AWS: コマンドツールでの認証設定パターン
はじめに
AWS CLI をはじめとするコマンドツールで AWS にアクセスする場合、認証情報 (Credentials) の設定が必要ですが、その方法にはいくつかのパターンがあります。ツールには以下のようなものがありますが、ツールやバージョンによっても対応しているものが微妙に異なるため、期待した動作にならない場合があります。いろいろな方法を覚えておくと良いでしょう。
-
AWS CLI (
aws
) -
EB CLI (
eb
) -
Amazon ECS CLI (
ecs-cli
) -
AWS SAM CLI (
sam
) -
Serverless Framework (
sls
/serverless
) -
AWS CDK (
cdk
) -
Terraform (
terraform
) -
CDK for Terraform (
cdktf
)
設定パターン
設定パターンには以下のものがあります。
- 認証情報を環境変数に設定する (IAM ユーザー/ロール、IAM Identity Center)
- 認証情報をプロファイルに設定する (IAM ユーザー/ロール、IAM Identity Center)
- IAM ロールをプロファイルに設定する
- IAM Identity Center によるアクセス先をプロファイルに設定する
1. 認証情報を環境変数に設定する
最もシンプルで汎用性の高い方法です。
IAM ユーザーに対して生成した固定の認証情報を設定する場合、以下の環境変数を設定します。
export AWS_ACCESS_KEY_ID=********
export AWS_SECRET_ACCESS_KEY=********
一時認証情報を環境変数に設定する場合は、セッショントークン (AWS_SESSION_TOKEN
) も指定する必要があります。
export AWS_ACCESS_KEY_ID=********
export AWS_SECRET_ACCESS_KEY=********
export AWS_SESSION_TOKEN=********
IAM ロールの場合は AssumeRole API により一時認証情報を取得します。
aws sts assume-role --role-arn "(IAM ロールの ARN)" --role-session-name "(セッション名)"
IAM Identity Center の場合、ポータルサイトから該当する Permission set の Command line or programmatic access
をクリックすると一時認証情報を取得できます。
2. 認証情報をプロファイルに設定する
参考)
認証情報をプロファイルとして保存しておき、プロファイルを指定してアクセスする方法です。プロファイルも認証情報も指定せずに実行した場合は default
という名前のプロファイルが使われます。
プロファイルは aws configure
コマンドで生成することができ、~/.aws/config
と ~/.aws/credentials
ファイルに以下のように設定されます。
~/.aws/config
[profile (プロファイル名)]
region = ap-northeast-1
output = json
~/.aws/credentials
[(プロファイル名)]
aws_access_key_id = ********
aws_secret_access_key = ********
IAM ロールや IAM Identity Center の一時認証情報を設定する場合は、aws_session_token
も指定します。一時認証情報を取得する方法は、パターン 1 と同様です。
[(プロファイル名)]
aws_access_key_id = ********
aws_secret_access_key = ********
aws_session_token = ********
保存したプロファイルを使用して AWS にアクセスするには、環境変数またはコマンドラインオプションでプロファイルを指定します。
例)
export AWS_PROFILE=(プロファイル名)
EB CLI では AWS_EB_PROFILE
など、別の環境変数を使用するものもあるため、プロファイルの指定方法は各ツールのマニュアルを確認してください。
3. IAM ロールをプロファイルに設定する
プロファイルに IAM ロールを設定することで、コマンド実行時に自動的に一時認証情報を取得してアクセスできます。role_arn
に IAM ロールの ARN を、source_profile
には AssumeRole を実行するためのプロファイルを指定します。
[profile (プロファイル名)]
region = ap-northeast-1
output = json
role_arn = (IAM ロールの ARN)
source_profile = (AssumeRole を実行するプロファイル名)
IAM ロールが MFA を要求する場合は、mfa_serial
に MFA デバイスを指定する必要もあります。コマンドを実行するたびに MFA トークンの入力が求められます。特にバッチから複数のコマンドを実行するような場合、この方法は使いにくいかもしれません。また物理的なセキュリティトークンによる MFA には対応していません。
[profile (プロファイル名)]
region = ap-northeast-1
output = json
role_arn = (IAM ロールの ARN)
source_profile = (AssumeRole を実行するプロファイル名)
mfa_serial = (MFA デバイスの ARN)
4. IAM Identity Center によるアクセス先をプロファイルに設定する
参考) AWS IAM Identity Center を使用するために AWS CLI を設定する
IAM Identity Center 用のプロファイルは aws configure sso
コマンドで生成することができ、アクセスポータルの URL (sso_start_url
) とリージョン (sso_region
)、アクセス先のアカウント ID (sso_account_id
) と Permission set (sso_role_name
) で構成されます。
記述形式には 2 通りあり、aws configure sso
コマンドで Session name を指定するかどうかで変わります。Session name を指定しない場合は、profile
セクションごとに上記すべての設定を記述しますが、Session name を指定した場合は sso-session
セクションにアクセスポータルに関する設定を記述し、複数のプロファイルで共有できる形となります。後者は新しい形式でありトークンが期限切れになっても自動更新されるようですが、ツールによっては対応していない場合があるようなので、注意が必要です。
Session name を指定しない場合の設定例 (レガシー)
[profile (プロファイル名)]
sso_start_url = https://****.awsapps.com/start#/
sso_region = ap-northeast-1
sso_account_id = ************
sso_role_name = AdministratorAccess
region = ap-northeast-1
output = json
Session name を指定した場合の設定例
[sso-session (SSO セッション名)]
sso_start_url = https://****.awsapps.com/start#/
sso_region = ap-northeast-1
sso_registration_scopes = sso:account:access
[profile (プロファイル名)]
sso_session = (SSO セッション名)
sso_account_id = ************
sso_role_name = AdministratorAccess
region = ap-northeast-1
output = json
保存したプロファイルを使用して AWS にアクセスするには、aws sso login
コマンドを実行して一時認証情報を取得する必要があります。取得した認証情報は ~/.aws/sso/cache/
ディレクトリに保存され、以降のコマンド実行時に使用されます。新しい形式で設定した場合、プロファイル名ではなく SSO セッション名を指定することもできます。
aws sso login --profile (プロファイル名)
aws sso login --sso-session (セッション名)
Discussion