1PasswordでAWSクレデンシャルを扱うならop pluginより素のopコマンド

2025-05-30
#aws #1password
  1. はじめに
  2. op pluginを使わない理由
  3. 設定方法
    1. 設定の詳細
  4. 利点
    1. AWS CLIの全機能と互換性がある
    2. 柔軟な設定が可能
    3. 他のツールとの統合が簡単
    4. Touch IDが利用できる
  5. まとめ

はじめに

1PasswordでAWSクレデンシャルを管理する際は公式のop pluginの利用が一般的だが、credential_process を使う場合は素の op コマンドを直接使うことで、より高い柔軟性を得られる。

op pluginを使わない理由

op pluginは独自の認証メカニズムを使用しており、AWS CLIの標準的な credential_process との併用が難しい。特にgit-remote-s3など credential_process を必要とするツールとの組み合わせで使いにくい。

AWS Shell Plugin - Credential Process Authentication · Issue #213 · 1Password/shell-plugins · GitHub

Platform or tool AWS Desired or expected behavior AWS Shell plugin gets provisioned with secrets via a credential process. Further details should be filled in when picking up this issue. Current behavior AWS shell plugin currently suppor...

github.com

この問題は、素の op コマンドを直接 credential_process で呼び出すことで回避できる。

設定方法

~/.aws/config に以下を記述する

[default]
credential_process=sh -c "op --account=my.1password.com --vault='env' item get --format=json --fields=label=AccessKeyId,label=SecretAccessKey aws-dev | jq 'map({key: .label, value: .value}) | from_entries + {Version: 1}'"

対応するaccount/vaultにitemを追加する

1password item

設定の詳細

コマンドの構成:

  1. op --account=my.1password.com --vault='env' item get --format=json --fields=label=AccessKeyId,label=SecretAccessKey aws-dev

    • 1Passwordの env vaultから aws-dev というアイテムを取得

    • AccessKeyIdSecretAccessKey のフィールドだけを抽出

    • JSON形式で出力

  2. jq 'map({key: .label, value: .value}) | from_entries + {Version: 1}'

    • 1Passwordの出力形式をAWS CLIが期待する形式に変換

    • Version: 1 を追加(credential_process の仕様で必須)

利点

AWS CLIの全機能と互換性がある

credential_process はAWS CLIの標準機能のため、aws sso などすべてのAWSツールで問題なく動作する。

柔軟な設定が可能

プロファイルごとに異なる1Passwordアイテムを参照できる。

[default]
credential_process=sh -c "op item get aws-prod --format=json --fields=label=AccessKeyId,label=SecretAccessKey | jq 'map({key: .label, value: .value}) | from_entries + {Version: 1}'"

[profile dev]
credential_process=sh -c "op item get aws-dev --format=json --fields=label=AccessKeyId,label=SecretAccessKey | jq 'map({key: .label, value: .value}) | from_entries + {Version: 1}'"

他のツールとの統合が簡単

Terraformや各種SDKなど、AWS CLIの設定を読み込むツールとも連携できる。

Touch IDが利用できる

aws-vaultはmacOSでTouch IDがサポートされておらず(#273)、Keychainアクセスのたびにパスワード入力が必要。

op コマンドはTouch IDに対応しているため、指紋認証だけでアクセスできる。

まとめ

credential_process を使う場合は、op pluginより素の op コマンドを直接使う方が柔軟性と互換性に優れる。 特に複数のAWSアカウントを使い分ける場合や、AWS CLIの全機能を使用する必要がある場合に適している。