1Passwordを使用してAWS CLIを安全に認証する

1Passwordマニュアル|AWSシェルプラグインを活用し、1PasswordでAWS CLIの認証を安全かつ簡単に行う方法をご紹介します。

1Passwordを使用してAWS CLIを安全に認証する

AWS シェルプラグインを使うと、認証情報をプレーンテキストでSaveするのではなく、1Password を使用して、指紋、 Apple Watch、またはシステム認証でAWS CLI を安全に認証できます。

指示に従ってデフォルトの認証情報を設定し、plugins.sh ファイルを取得すると、生体認証を使用して AWS CLI を認証するように求められます。

cdk を使う場合は、AWS CDK Toolkit シェルプラグインを設定することもできます。

必要条件

次のシェルがサポートされています:

  • Bash

  • Zsh

  • fish

ステップ 1: AWS アクセスキーをCreateしてSaveする

AWS アクセスキーを既にCreateしている場合は、手順 2 に進みます。

アクセス キーをまだCreateしていない場合は、Createして 1Password browser extension を使用して 1PasswordにすばやくSaveできます。

  • ブラウザで 1Password を開いてロックを解除します。

  • 手順に従って、AWS CLI のアクセスキーをCreateします。

  • ③「アクセス キーの取得」ページで、Showをクリックしてシークレット アクセス キーを表示します。

  • ④1Password が AWS アクセスキーのアイテムをSaveするかどうかを尋ねたら、Save itemをクリックします。

  • ⑤アイテムをSaveする保管庫を選択し、アイテムの名前と詳細を編集して、Save itemをクリックします。

The pop-up screen to save your AWS access key in 1Password.

ステップ2: デフォルトの資格情報を構成する

AWSを複数の環境で使用している場合

AWS シェルプラグインを本番環境や開発環境などの複数の環境で使う場合は、シームレスなコンテキスト切り替えのためにプラグインを設定する方法を学習します。

AWS シェルプラグインの使用を開始するには:

  • ①AWS プラグインで使う 1Password アカウントにサインインします。

  • $ op signin

  • ②特定のディレクトリでのみプラグインを設定したい場合は、そのディレクトリに変更します

  • ③プラグインを設定するには、次のコマンドを実行します。

  • $ op plugin init aws

AWS 認証情報を 1Passwordにインポートするか、認証情報がSaveされている保存済みの 1Password 項目を選択して、認証情報をいつ使うかを設定するように求められます。

A terminal window displaying the op plugin init command and options to import or select an item.

ステップ 1.1: アイテムをインポートまたは選択する

新しいアイテムをインポートする

AWS 認証情報を 1PasswordにまだSaveしていない場合は、Import into 1Passwordを選択します。認証情報を入力し、新しい 1Password アイテムの名前を選択して、Save先の保管庫を選択します。

1Password がローカル開発環境で資格情報を検出すると、自動的にインポートするように求められます。

A terminal window showing the fields available to import an item, including the token, item name, and vault.

保存済みのアイテムを選択

既に 1Passwordに AWS 認証情報をSaveしている場合は、Search in 1Passwordを選択します。

関連するアイテムとそれらがSaveされている保管庫のリストが表示されます。資格情報が表示されない場合は、Expand search を選択して、アカウント内の全てのアイテムを参照します。

A terminal window showing the option to search for an existing item in your 1Password account.

ステップ 1.2: デフォルトの資格情報スコープを設定する

認証情報を選択またはインポートすると、その項目を AWS の認証に使うタイミングを設定するように求められます。

A terminal window showing the options for configuring when the credentials should be used.
  • "Prompt me for each new terminal session"を選択すると、現在のターミナル セッションの期間中のみ資格情報が設定されます。ターミナルを終了すると、デフォルトは削除されます。

  • "Use automatically when in this directory or subdirectories" を選択すると、他のディレクトリ固有のデフォルトが設定されていない限り、現在のディレクトリとその全てのサブディレクトリで資格情報がデフォルトになります。ターミナル セッションのデフォルトは、ディレクトリ固有のデフォルトよりも優先されます。

  • "Use as global default on my system" を選択すると、資格情報が全てのターミナル セッションとディレクトリのデフォルトとして設定されます。ディレクトリ固有のデフォルトは、グローバル デフォルトよりも優先されます。

ステップ3: plugins.shファイルをソースする

プラグインを使用できるようにするには、plugins.sh ファイルをソース化します。例:

$ source ~/.config/op/plugins.sh

op フォルダーのファイル パスは、構成ディレクトリによって異なる場合があります。op plugin init は、正しいファイル パスを含むソース コマンドを出力します。

シェル プラグインを初めてインストールする場合は、現在のターミナル セッションを超えてプラグインを永続化するために、RC ファイルまたはシェル プロファイルに source コマンドを追加する必要があります。例:

  • Bash

$ echo "source ~/.config/op/plugins.sh" >> ~/.bashrc && source ~/.bashrc

  • Zsh

$ echo "source ~/.config/op/plugins.sh" >> ~/.zshrc && source ~/.zshrc

  • fish

$ echo "source ~/.config/op/plugins.sh" >> ~/.config/fish/config.fish && source ~/.config/fish/config.fish

ステップ4: CLIを使う

次回 AWS でコマンドを入力するときに、生体認証またはシステム認証による認証を求めるメッセージが表示されます。

A CLI being authenticated using 1Password CLI biometric unlock.

ステップ5: インポートした資格情報をディスクから削除する

1Passwordに AWS 認証情報をSaveしたら、現在ディスクにSaveされている全てのローカルコピーを削除できます。

プレーンテキストのアクセスキーは、通常、AWS 共有認証情報ファイル (デフォルトの場所: ~/.aws/credentials) にSaveされます。このファイルから認証情報を削除する場合は、Terraform など、AWS への認証にファイルを使う他のツールのシェルプラグインを必ず構成してください。

オプション: 複数の役割を担う​

AWS シェルプラグインを使うと、AWS 構成ファイルでロールプロファイルを定義することで、AWS CLI でロールを引き受けるのと同じ方法で複数のロールを引き受けることができます。

例:

~/.aws/config

[profile prod]

role_arn = arn:aws:iam::123456789012:role/prod

source_profile = wendyappleseed

次に、ロールを使用して AWS コマンドを呼び出すために --profile フラグを含めます。例:

$ aws sts get-caller-identity --profile prod

常に同じプロファイルを使う場合は、AWS_PROFILE 環境変数を設定できます。その場合、--profile フラグは、環境に設定されているデフォルトを上書きするためにのみ必要になります。例:

$ export AWS_PROFILE=prod

オプション: 多要素認証を設定する

AWS で多要素認証を使う場合は、AWS シェルプラグインを設定してワンタイムパスワードを提供できます。

これを行うには、次の 2 つの方法があります。

ワンタイムパスワードとARNを1PasswordにSaveする

ステップ1: QRコードをSaveする

  • ①1Password アプリを開いてロックを解除します。

  • ②AWS 認証情報がSaveされている項目を選択し、Editをクリックします。

  • Add Moreをクリックし、One-Time Passwordを選択します。

  • ⑤AWS ウィザードでShow secret keyをクリックし、文字列をアイテムのOne-Time Passwordフィールドにコピーします。

  • Saveをクリックします。

アイテムには、AWS 多要素認証デバイスのセットアップフローを完了するために使用できるワンタイムパスワードが表示されます。

編集したアイテムには、one-time passwordと mfa serial fieldsが含まれている必要があります。

The AWS item in 1Password with MFA credentials added.

ステップ2: 多要素認証デバイスのARNをSaveする

  • 多要素認証デバイスの ARN を見つけてコピーします。

  • ②1Password アプリを開いてロックを解除します。

  • ③AWS 認証情報をSaveした項目を選択し、Editをクリックします。

  • Add Moreをクリックし、Textを選択します。

  • ⑤ARN をフィールドの値として貼り付けます。

  • ⑥フィールドにmfa serialというタイトルを付けます。

  • Saveをクリックします。

1Password CLI は、ワンタイム パスワードと MFA シリアルというタイトルのフィールドにSaveされている多要素認証資格情報を検出します。ワンタイム パスワードが検出されない場合は、フィールドのタイトルが正しいことを確認してください。

1Password CLI は、一時的な多要素認証セッション値を指定するために、AWS_SECRET_ACCESS_KEY、AWS_ACCESS_KEY_ID、および AWS_SESSION_TOKEN 暫定環境変数を設定します。

次のステップ​

1Password Shell プラグインは 60 を超えるサードパーティの CLI をサポートしています。サポートされている CLI のリストを表示するには:

$ op plugin list

別のプラグインを選択して開始するには:

$ op plugin init

シームレスなコンテキスト切り替えのためにシェル プラグインを使うには、 multiple environmentsまたは multiple accountsでプラグインを構成する方法を学習します。

ヘルプを受ける

設定を検査する

現在の AWS 設定を検査するには:

$ op plugin inspect aws

1Password CLI は、AWS で使うために設定した認証情報とそのデフォルトのスコープのリスト、および AWS 用に設定されたエイリアスのリストを返します。

A terminal window showing the results of the command op plugin inspect.

資格情報を消去する

AWS で使用される認証情報をリセットするには:

$ op plugin clear aws

次の優先順位に従って、一度に 1 つの構成をクリアできます。

  • ①ターミナルセッションのデフォルト

  • ②ディレクトリのデフォルト、現在のディレクトリから $HOME まで

  • ③グローバルデフォルト

例えば、ディレクトリ $HOME/projects/awesomeProject にいて、ターミナル セッションのデフォルト、$HOME および $HOME/projects/awesomeProject のディレクトリのデフォルト、およびグローバル デフォルト認証情報が構成されている場合、全てのデフォルトをクリアするには、op plugin clear aws を 4 回実行する必要があります。

グローバルのデフォルト認証情報、ターミナル セッションのデフォルト、および現在のディレクトリのデフォルトを同時にクリアするには、op plugin clear aws --all を実行します。

参照​

1Password は、プラグイン コマンドに必要な認証情報を 1Password アカウントから直接環境変数に挿入することで、AWS で認証します。

op プラグインを使用して新しい項目をインポートするのではなく、AWS 認証情報を 1Passwordに手動でSaveした場合は、フィールド名が以下の表と一致していることを確認してください。

アイテムに必要な名前のフィールドが含まれていない場合は、保存済みのフィールドのいずれかの名前を変更するように求められます。

1Passwordフィールド名

環境変数

Access Key ID

AWS_ACCESS_KEY_ID

Secret Access Key

AWS_SECRET_ACCESS_KEY

Default region (optional)

AWS_DEFAULT_REGION

もっと詳しく知る