1Passwordを使用してAWS CLIを安全に認証する
AWS シェルプラグインを使うと、認証情報をプレーンテキストでSaveするのではなく、1Password を使用して、指紋、 Apple Watch、またはシステム認証でAWS CLIarrow-up-right を安全に認証できます。
指示に従ってデフォルトの認証情報を設定し、plugins.sh ファイルを取得すると、生体認証を使用して AWS CLI を認証するように求められます。
cdk を使う場合は、AWS CDK Toolkit シェルプラグインarrow-up-right を設定することもできます。
arrow-up-right
次のシェルがサポートされています:
ステップ 1: AWS アクセスキーをCreateしてSaveする
AWS アクセスキーを既にCreateしている場合は、手順 2 に進みます。
アクセス キーをまだCreateしていない場合は、Createして 1Password browser extensionarrow-up-right を使用して 1PasswordにすばやくSaveできます。
③「アクセス キーの取得」ページで、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 アカウントにサインインします。
②特定のディレクトリでのみプラグインを設定したい場合は、そのディレクトリに変更します
③プラグインを設定するには、次のコマンドを実行します。
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 コマンドを追加する必要があります。例:
$ echo "source ~/.config/op/plugins.sh" >> ~/.bashrc && source ~/.bashrc
$ echo "source ~/.config/op/plugins.sh" >> ~/.zshrc && source ~/.zshrc
$ echo "source ~/.config/op/plugins.sh" >> ~/.config/fish/config.fish && source ~/.config/fish/config.fish
次回 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 で多要素認証arrow-up-right を使う場合は、AWS シェルプラグインを設定してワンタイムパスワードを提供できます。
これを行うには、次の 2 つの方法があります。
ワンタイムパスワードコードと ARN を、AWS 認証情報がSaveされている 1Password の項目に追加します。このオプションを選択すると、多要素認証情報はデフォルトのプロファイルとして扱われ、他の全てのプロファイルと共にグローバルに使用されます。
ワンタイムパスワードとARNを1PasswordにSaveする
ステップ1: QRコードをSaveする
①1Password アプリを開いてロックを解除します。
②AWS 認証情報がSaveされている項目を選択し、Edit をクリックします。
③Add More をクリックし、One-Time Password を選択します。
⑤AWS ウィザードでShow secret key をクリックし、文字列をアイテムのOne-Time Passwordフィールドにコピーします。
アイテムには、AWS 多要素認証デバイスのセットアップフローを完了するために使用できるワンタイムパスワードが表示されます。
編集したアイテムには、one-time passwordと mfa serial fieldsが含まれている必要があります。
The AWS item in 1Password with MFA credentials added. ステップ2: 多要素認証デバイスのARNをSaveする
②1Password アプリを開いてロックを解除します。
③AWS 認証情報をSaveした項目を選択し、Edit をクリックします。
④Add More をクリックし、Text を選択します。
⑥フィールドにmfa serialというタイトルを付けます。
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 environmentsarrow-up-right または multiple accountsarrow-up-right でプラグインを構成する方法を学習します。
現在の 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した場合は、フィールド名が以下の表と一致していることを確認してください。
アイテムに必要な名前のフィールドが含まれていない場合は、保存済みのフィールドのいずれかの名前を変更するように求められます。
Default region (optional)