WSL2 環境で AWS 認証情報を 1Password CLI に移行してみた

WSL2 環境で AWS 認証情報を 1Password CLI に移行してみた

2026.02.28

こんにちは、クラウド事業本部 コンサルティング部のいたくらです。

はじめに

以下のブログでは、macOS 環境で AWS 認証情報を 1Password CLI に移行する手順が紹介されています。

https://dev.classmethod.jp/articles/1password-cli-credential/

私は普段 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 と連携」を有効にします。

3.png

■ 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 一覧が返ってくれば成功です。

2-3.png

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 idsecret access key の両方を控えておきます。

4. ~/.aws/config を設定する

引き続き WSL2 側で、~/.aws/configcredential_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_processop.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.exeAppData/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 awsop 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/configcredential_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)でした!

この記事をシェアする

FacebookHatena blogX

関連記事