Windows WSL 環境でセキュアな Claude Code 実行環境をつくり直してみた

Windows WSL 環境でセキュアな Claude Code 実行環境をつくり直してみた

巷でセキュリティ強化の流れがきていたので、WSL 環境を見直していこうと思います。
2025.12.01

この記事はアノテーション株式会社 AWS Technical Support Advent Calendar 2025 | Advent Calendar 2025 - Qiita 1 日目の記事です。


WSL は仮想環境なので、これを機にデータの整理をして、もう元々の Ubuntu 環境を削除しちゃうか…ということで、つくり直していきます。

※ WSL 環境って統合されてるようで実は壁があってつらいですよね (パスの扱いで躓いたり、認証情報がうまく引き継がれなかったり)

※ でも問題が起きてセキュアな環境を構築し直したい時は、WSL もいいじゃん!作り直せばいいし!という前向きな気持ちでやっていきます

手順概要

Ubuntu 環境をキレイにして、セキュアな環境を構築していきたいので、下記のような流れになります。

イメージとしては、安全な環境に必要なデータだけ移行するような感じです。

  1. 念のため丸ごとバックアップ ← 保険なので必要なければスキップ
  2. 新しい Ubuntu 環境用意
  3. セキュアな環境構築
  4. AWS CLI インストール
  5. Claude Code インストール
  6. AWS Vault 導入(AWS 認証情報のセキュア管理)
  7. データコピー
  8. 元の Ubuntu 環境の削除

既存の Ubuntu 環境削除しないよって方は、3 ~ 6 までを一読してもらえればと思います。

手順 1: 念のため丸ごとバックアップ (保険)

  • 保存先は好きな場所に (自分のユーザのドキュメントフォルダ配下等)
  • 時間がかかります (数分 ~ 十数分)
  • ファイルサイズが大きい可能性あり (数 GB ~ 数十 GB)
# PowerShell で実行

# 現在のディストリビューション一覧を確認
wsl -l -v

# バックアップ用ディレクトリを作成
mkdir C:\wsl-backup

# Ubuntu を丸ごとエクスポートしてバックアップ
wsl --export Ubuntu C:\wsl-backup\ubuntu-backup.tar

画像ファイル等無し、データ 1 GB 以下程度の環境で 3 分ぐらい、バックアップファイルは 約 10 GB でした。

手順 2: 新しい Ubuntu 環境用意

# PowerShell で実行

# 現在のディストリビューション確認
wsl -l -v

# 利用可能なディストリビューション一覧
wsl --list --online

# 新しい Ubuntu をインストール(例: Ubuntu-24.04)
# 初回起動でユーザー名とパスワードを設定します。
wsl --install -d Ubuntu-24.04

# ubuntu 環境にログインするので抜ける
exit

# ディストリビューション確認
wsl -l -v

TIPS:
Windows のターミナルを利用している場合に、古い Ubuntu 環境情報が残ってる場合、設定からプロファイル削除できます。

2025-11-30 16_02_26-Greenshot - エクスプローラー

2025-11-30 15_55_34-blog.md - vscord - Visual Studio Code

手順 3: セキュアな環境構築

WSL 本体の更新

wsl --update で Linux カーネルの脆弱性修正や WSL の不具合修正が適用されます。


# PowerShell で実行

# WSL 本体・カーネルを最新に更新 (セキュリティ修正を適用)
wsl --update

# バージョン確認
wsl --version

# 更新があった場合、WSL を再起動して更新を反映
wsl --shutdown

セキュリティアップデート

Ubuntu を最新にアップデートします。

apt upgrade では npm パッケージ等のアプリケーションは更新されません。
npm コマンドを無効化している場合などは、npm 自体の更新もされません。

更新されるもの:
システムパッケージ (curl, git, vim など), セキュリティパッチ, OS 関連ライブラリ

更新されないもの (例) :
npm パッケージ (node_modules/ 内), pip パッケージ (Python ライブラリ)

# パッケージリストを更新
sudo apt update

# パッケージを最新版にアップグレード
sudo apt upgrade -y

アップデートは、週 1 回程度か、何か WSL 上で実行する時に気づいたら手動で実行してます。

不要なパッケージの削除

アップデート時に不要になった古いパッケージや依存関係を削除します。

apt upgrade で新しいパッケージに更新すると、古いバージョンのパッケージがシステムに残るので autoremove で削除していきます。

# 不要なパッケージを自動削除 (アップデート後に行う)
sudo apt autoremove -y

必要なツールのインストール

「とりあえず入れとく」はやめて、必要なものだけをインストールし、使うタイミングで都度追加します。

今回は AWS CLI を導入するので、必要な unzip コマンドだけ先にインストールします。

# 必要最低限のツールだけインストール
sudo apt install unzip -y

手順 4: AWS CLI インストール

AWS CLI のインストール

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html

# AWS CLI v2 をダウンロード
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"

# ダウンロードファイルを解凍
unzip awscliv2.zip

# AWS CLI をインストール
sudo ./aws/install

# インストール確認
aws --version

# インストール後、一時ファイルを削除
rm -rf aws awscliv2.zip

AWS CLI 初期設定

# AWS 認証情報を設定
aws configure

# プロンプトに従って入力:
# AWS Access Key ID: # 平文で残したくない為何も入力しない
# AWS Secret Access Key: # 平文で略
# Default region name: ap-northeast-1  # 東京リージョン
# Default output format: json

手順 5: Claude Code インストール

https://code.claude.com/docs/ja/setup

Claude Code のインストール

以前は npm でインストールする手順があり、その場合は Node.js のインストールが必要でした。

今回は今推奨されている curl コマンドのインストール方法で実行していきます。

# ネイティブインストーラーでインストール
curl -fsSL https://claude.ai/install.sh | bash

結果が返ってきて、claude は ~/.local/bin/claude にあるとのことです。

$curl -fsSL https://claude.ai/install.sh | bash
Setting up Claude Code...

✔ Claude Code successfully installed!

  Version: 2.0.55

  Location: ~/.local/bin/claude

  Next: Run claude --help to get started

⚠ Setup notes:
  • Native installation exists but ~/.local/bin is not in your PATH. Run:

  echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc

✅ Installation complete!

パスに追加していきます。

# PATH に追加
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc

# インストール確認
claude --version

Claude 認証

# claude を実行するディレクトリを作って移動
mkdir -p ~/claudecode-workspace
cd ~/claudecode-workspace

# Claude Code を起動
claude

# 初回起動時に認証プロンプトが表示されます
# 画面の指示に従って認証を完了してください

CLAUDE.md ファイルの生成

試しに CLAUDE.md を作っておきます。

# Claude Code 内で実行
日本語で回答をするための CLAUDE.md ファイルを作成してください

# 生成されたファイルを確認
/exit
cat CLAUDE.md

手順 6: AWS Vault 導入(AWS 認証情報のセキュア管理)

https://github.com/99designs/aws-vault

AWS Vault とは

AWS 認証情報を暗号化して安全に管理することができるツールです。

認証情報を平文で保存せず、 OS の安全なキーチェーン (Windows の場合 Credential Manager) に保存してくれます。

blog-aws-valut (1)

平文の credential ファイルは必要なく、コマンド実行ごとに一時的なセッションキーを発行して実行できます。

必要なツールのインストール

# 前提ライブラリ
sudo apt install build-essential -y

# Homebrew のインストール
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Homebrew の設定
echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> ~/.bashrc
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"

# gcc をインストール
brew install gcc

# aws-vault と関連ツールのインストール
brew install aws-vault pass gnupg

GPG 鍵の作成と pass の初期化

# GPG 鍵を生成(名前、メールアドレスは example 等なんでも OK)
gpg --gen-key

# 作成されたキー ID を確認(長い英数字の文字列)
gpg --list-keys

# pass を初期化(上記で確認した結果の 40 桁のキー ID を使用)
pass init <キー ID>

環境変数の設定

# ~/.bashrc に追加 (EOF まで入力)
cat << 'EOF' >> ~/.bashrc

# aws-vault 設定
export AWS_VAULT_BACKEND=pass
export AWS_VAULT_PASS_PREFIX=aws-vault
export AWS_SESSION_TOKEN_TTL=3h
export GPG_TTY=$(tty)
EOF

# 反映
source ~/.bashrc

AWS 認証情報の設定

~/.aws/config ファイルを確認して、必要な情報を追記してください

例 (スイッチロール + MFA 設定している場合)

[default]
region = ap-northeast-1
output = json

[profile stg]
role_arn = arn:aws:iam::<AWSアカウントID>:role/<IAMユーザ名> # スイッチロール先の IAM ロール
mfa_serial = arn:aws:iam::<AWSアカウントID>:mfa/<IAMユーザ名> # MFA デバイスの ARN
source_profile = default
duration_seconds = 3600 # セッションの有効期限 1 時間

セッションの有効期限は 1 時間にしておきます。

# aws-vault にプロファイルを追加
aws-vault add default
# プロンプトで Access Key ID, Secret Access Key, MFA Device ARN を入力

# 登録確認
aws-vault list

動作確認

# aws-vault 経由で AWS コマンドを実行
aws-vault exec <プロファイル名> -- aws s3 ls

# GPG パスフレーズと MFA トークン(設定した場合)を入力

成功すれば S3 バケット一覧が表示されます。

日常的な使い方

# 単発コマンド
aws-vault exec <プロファイル名> -- aws s3 ls

# 複数コマンドを実行する場合(シェル起動)
aws-vault exec <プロファイル名> -- bash
aws s3 ls
aws ec2 describe-instances
exit

Claude に AWS Vault を使って調査してもらう

aws-vault の MFA 認証は対話的な入力が必要なので、Claude が自動実行するのは難しそうです。

事前にセッションを確立してから Claude に調査依頼をしてみます。

手順

# ユーザー側で事前に MFA 認証を通す
aws-vault exec <プロファイル名> -- aws sts get-caller-identity
# ここで MFA コードを入力

# シェルに入る(セッションが有効な間、コマンドを実行可能)
aws-vault exec <プロファイル名> -- bash

# このシェル内で Claude にコマンド実行を依頼
claude

これで Claude にコマンドを実行してみてもらったら成功しました。

s3 バケット一覧を取得してください

2025-11-30 21_09_33-blog.md - vscord - Visual Studio Code

未来では aws login を使ってもっといい感じに Claude 上で操作できるようになると思います。

セッション切れの場合は、一度シェルを抜けて再度 aws-vault exec <profile> -- bash を実行してください。
セッション時間については、~/.aws/config ファイルでご自身の適切な時間に設定することをお勧めします。

トラブルシューティング

aws-vault 実行時に、GPG のバージョン不整合エラーがでました。

gpg: WARNING: server 'gpg-agent' is older than us (2.4.4 < 2.4.8)
gpg: WARNING: server 'keyboxd' is older than us (2.4.4 < 2.4.8)
gpg: WARNING: server 'keyboxd' is older than us (2.4.4 < 2.4.8)

この警告は動作には問題ないので、無視しても OK です。

解決方法:
ソースから gnupg 2.4.8 以上をビルドすれば解消可能 (今の WSL Ubuntu 環境だとできないかも?)

※ コマンドでの解消方法を書こうと思いましたが力尽きました。

手順 7: データコピー

やったことメモ

  • .bashrc や .zshrc は古い設定をそのまま使わず、必要な部分だけコピー
  • 認証情報のパーミッションは必ず正しく設定 (600)

Windows エクスプローラーで手動コピー

Win + R キー → \\wsl$ を入力 → OK をクリック

2025-11-30 20_32_06-ファイル名を指定して実行

対象の WSL 環境を開いた後もう一度

Win + R キー → \\wsl$ を入力 → OK をクリック

元の WSL 環境を開いて、ファイルをコピー&ペースト


※ コマンドでしようと思ったのですが力尽きました。

WSL コマンドチートシートを張っておきます。

# Linux 環境で現在のディレクトリのフォルダをエクスプローラーで開く
powershell.exe /c start .

# Linux 環境からコマンド実行してホストマシンの C ドライブ等へアクセス
/mnt/c/Users/<ユーザー名>/

# エクスプローラーで上記を入力して Linux 領域を開く
\\wsl$\

手順 8: 元の Ubuntu 環境の削除

元の Ubuntu 環境を削除する場合は、下記コマンドで削除してください。

Ubuntu 環境の削除

# PowerShell で実行

# ディストリビューション名確認
wsl -l -v

# Ubuntu 環境を削除
wsl --unregister <ディストリビューション名>

最後に

aws login を使ってもっといい未来が来ることを願って寝て待ちます。

これを機に皆さんの Claude Code 実行環境のセキュリティを見直す機会になれば嬉しく思います。

Ubuntu 環境をリフレッシュして、素敵な WSL ライフをお過ごしください!

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、さまざまな背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。

この記事をシェアする

FacebookHatena blogX

関連記事