
WSL2 環境で AWS 認証情報を 1Password CLI に移行してみた
こんにちは、クラウド事業本部 コンサルティング部のいたくらです。
はじめに
以下のブログでは、macOS 環境で AWS 認証情報を 1Password CLI に移行する手順が紹介されています。
私は普段 Windows + WSL2 を使用しているのですが、同じことをやろうとしたところ、WSL2 特有のハマりポイントがいくつかありました。
本記事では、WSL2(Ubuntu-22.04)環境で AWS 認証情報を 1Password CLI に移行する手順と、ハマりポイントをまとめます。
利用している環境
- Windows 11 Enterprise(24H2)
- WSL2(Ubuntu-22.04)
- 1Password デスクトップアプリ(Windows 版)
- 1Password CLI 2.32.1(Windows 版)
- AWS CLI v2(WSL2 側にインストール済み)
構成イメージ
今回は以下のような構成で、基幹アカウントの IAM ユーザーから個人検証アカウントにスイッチロールする想定です。
1Password(アクセスキーを安全に保管)
↓ credential_process で取得
基幹アカウント(IAM ユーザー)
↓ AssumeRole(スイッチロール)
個人検証アカウント(IAM ロール)
先に結論
WSL2 環境では、以下の 3 点に気を付けましょう。
- Linux 版ではなく Windows 版の
op.exeを使う(Linux 版opは Windows 側の 1Password アプリに接続できないため) op pluginではなくcredential_processを使う(Windows 版op.exeでは Shell Plugins がサポートされていないため)- 1Password のアイテム参照にはアイテム ID を使う(日本語のアイテム名は
op readの参照パスに使えないため)
最終的な ~/.aws/config は以下のようになります。
[profile base]
output = json
region = ap-northeast-1
credential_process = sh -c 'echo "{\"Version\": 1, \"AccessKeyId\": \"$(op.exe read "op://Vault名/アイテムID/セクションID/access key id")\", \"SecretAccessKey\": \"$(op.exe read "op://Vault名/アイテムID/セクションID/secret access key")\"}"'
[profile default]
output = json
region = ap-northeast-1
role_arn = arn:aws:iam::123456789012:role/your-role-name
source_profile = base
mfa_serial = arn:aws:iam::999999999999:mfa/your-username
やってみた
1. Windows 側の準備
■ 1Password デスクトップアプリの設定
1Password アプリを開き、設定 → 開発者 → 「1Password CLI と連携」を有効にします。

■ 1Password CLI のインストール(Windows 側)
PowerShell(管理者権限)で以下を実行します。
winget install AgileBits.1Password.CLI
2. WSL2 側の設定
ここからは WSL2 側のターミナルで操作します。
■ op.exe へのパスを通す
WSL2 から Windows 版 op.exe を呼び出せるようにパスを通します。
まず、op.exe のインストール先を確認します。
ls /mnt/c/Users/*/AppData/Local/Microsoft/WinGet/Links/op.exe
表示されたパスを ~/.bashrc に追加します。
echo 'export PATH="$PATH:/mnt/c/Users/<ユーザー名>/AppData/Local/Microsoft/WinGet/Links"' >> ~/.bashrc
■ エイリアスの設定
WSL2 内で op コマンドを打つだけで op.exe が呼ばれるようにエイリアスを設定します。
echo 'alias op="op.exe"' >> ~/.bashrc
source ~/.bashrc
■ 接続確認
op vault list
Windows 側の 1Password アプリで認証ダイアログが表示され、Vault 一覧が返ってくれば成功です。

3. AWS 認証情報を 1Password に登録する
以下のコマンドを WSL2 側で実行し、アクセスキーを 1Password に保存します。
op item create \
--category=login \
--title="AWS Base Account" \
--vault="Vault名" \
"access key id=YOUR_ACCESS_KEY_ID" \
"secret access key=YOUR_SECRET_ACCESS_KEY"
実行すると、ID: にアイテム ID が表示されます。
このアイテム ID を使って、credential_process で必要な参照パス(セクション ID を含む op:// 形式)を確認します。
op item get <アイテムID> --format=json
出力の fields 内にある reference フィールドの値を控えておきます。
以下のように、各フィールドに op:// 形式の参照パスが含まれています。
{
"id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"section": {
"id": "セクションID"
},
"type": "CONCEALED",
"label": "access key id",
"value": "AKIAXXXXXXXXXXXXXXXX",
"reference": "op://Vault名/アイテムID/セクションID/access key id"
}
この reference の値が credential_process で使うパスになります。access key id と secret access key の両方を控えておきます。
4. ~/.aws/config を設定する
引き続き WSL2 側で、~/.aws/config に credential_process を設定します。
以下は、基幹アカウントから個人検証アカウントにスイッチロールする構成の例です。
[profile base]
output = json
region = ap-northeast-1
credential_process = sh -c 'echo "{\"Version\": 1, \"AccessKeyId\": \"$(op.exe read "op://Vault名/アイテムID/セクションID/access key id")\", \"SecretAccessKey\": \"$(op.exe read "op://Vault名/アイテムID/セクションID/secret access key")\"}"'
[profile default]
output = json
region = ap-northeast-1
role_arn = arn:aws:iam::123456789012:role/your-role-name
source_profile = base
mfa_serial = arn:aws:iam::999999999999:mfa/your-username
ポイントは以下の通りです。
credential_processでop.exe readを呼び出し、1Password から認証情報を取得defaultプロファイルはsource_profile = baseで基幹アカウントの認証情報を参照role_arnでスイッチロール先を指定mfa_serialで MFA デバイスを指定
5. 動作確認
■ 基幹アカウント(IAM ユーザー)の確認
aws sts get-caller-identity --profile base
1Password の認証が求められ、承認すると以下のような出力が返ります。
{
"UserId": "AIDAXXXXXXXXXXXXXXXXX",
"Account": "999999999999",
"Arn": "arn:aws:iam::999999999999:user/your-username"
}
■ スイッチロール先(個人検証アカウント)の確認
aws sts get-caller-identity --profile default
MFA コードの入力を求められ、入力後にスイッチロール先のアカウント情報が返ります。
{
"UserId": "AROAXXXXXXXXXXXXXXXXX:botocore-session-XXXXXXXXXX",
"Account": "123456789012",
"Arn": "arn:aws:sts::123456789012:assumed-role/your-role-name/botocore-session-XXXXXXXXXX"
}
これで ~/.aws/credentials に平文でアクセスキーを保存することなく、1Password 経由で安全に AWS CLI を利用できるようになりました。
おまけ:ハマりポイント
WSL2 環境で 1Password CLI を使う際にハマったポイントをまとめます。
1. WSL2 の Linux 版 op は Windows の 1Password アプリに接続できない
WSL2 に apt でインストールした Linux 版の op コマンドで op vault list を実行すると、以下のエラーが発生しました。
[ERROR] connecting to desktop app: cannot connect to 1Password app, make sure it is running
WSL2 は独立した Linux VM として動作しているため、Linux 版の op バイナリは Windows 側の 1Password デスクトップアプリとプロセス間通信(IPC)ができません。2026 年 2 月時点で、この連携は公式にサポートされていません。
Windows 版の op.exe を WSL2 から直接呼び出す方式に変更することで解決しました。WSL2 には Windows 実行ファイルを呼び出せる Interop 機能があるため、op.exe のパスを通してエイリアスを設定するだけで利用可能です。
2. op.exe のパスが通っていない
winget で 1Password CLI を Windows 側にインストールしたのですが、WSL2 から op.exe を実行すると command not found になりました。
winget でインストールした op.exe は AppData/Local/Microsoft/WinGet/Links/ に配置されますが、このパスが WSL2 の $PATH に自動的に追加されないことがあります。
op.exe のインストール先を確認し、~/.bashrc にパスを追加することで解決しました。
# op.exe の場所を探す
ls /mnt/c/Users/*/AppData/Local/Microsoft/WinGet/Links/op.exe
# パスを追加
echo 'export PATH="$PATH:/mnt/c/Users/<ユーザー名>/AppData/Local/Microsoft/WinGet/Links"' >> ~/.bashrc
source ~/.bashrc
3. op plugin 方式が WSL2 では使えない
元記事で紹介されている op plugin init aws → op plugin run -- aws の方式を WSL2 から試すと、以下のエラーが発生しました。
$ op plugin init aws
[ERROR] Shell Plugins are currently not supported on this operating system
$ op plugin run -- aws sts get-caller-identity
[ERROR] Shell Plugins are currently not supported on this operating system
Windows 版の op.exe を WSL2 経由で実行しているため、Shell Plugins 機能がサポートされていないようです。
代わりに credential_process 方式を採用しました。~/.aws/config に credential_process を設定することで、AWS CLI が認証情報を必要とするタイミングで op.exe read を呼び出し、1Password から取得する仕組みにしています。
4. 日本語のアイテム名が op read の参照パスに使えない
1Password に日本語名でアイテムを保存し、op read "op://Vault名/日本語アイテム名/field" を実行すると以下のエラーが発生しました。
[ERROR] could not read secret: invalid secret reference: invalid character in secret reference: '基'
op read のシークレット参照パス(op:// URI)はマルチバイト文字に対応していないようです。
アイテム名の代わりにアイテム ID を使うことで回避できます。op item get <アイテムID> --format=json で出力される reference フィールドにはアイテム ID ベースの参照パスが記載されているので、そちらを使用します。
# NG: 日本語アイテム名
op://Vault名/基幹アカウント/access key id
# OK: アイテム ID
op://Vault名/アイテムID/セクションID/access key id
なお、アイテム ID ベースの参照パスを使っているため、後から 1Password 上でアイテム名を変更しても ~/.aws/config の修正は不要です。
さいごに
WSL2(Ubuntu-22.04)環境で AWS 認証情報を 1Password CLI に移行する手順を紹介しました。
macOS 向けの記事をそのまま WSL2 に適用しようとするとハマるポイントがいくつかあるので、WSL2 ユーザーの方はぜひ本記事を参考にしていただければと思います。
この記事がどなたかのお役に立てれば幸いです。
以上、クラウド事業本部コンサルティング部のいたくら(@itkr2305)でした!







