aws-cliのssoログインの動作を確認する
はじめに
自分のAWSアカウントがしばらく放置気味だったので、PCを新調したことをきっかけにアカウントの管理をちゃんと見直しました。
AWS IAM Identity Center の設定
ユーザーの新規追加
IAM Identity Center ではMFAの認証の設定、ユーザーが認証した後のセッション期間を統一的に決めることができます。
まず、全てのAWSアカウントで一意に利用できるユーザーを用意します。
以下の入力項目を入力すると指定したEmailアドレスにサインイン用のリンクが送られます。
上記の設定次第ですが、基本はMFAの設定が求められます。
この段階ではAWSアカウントが何も紐づいていないので、ログインしても何も表示されません。
AWSアカウントにグループを追加する
ユーザーかグループを追加したいAWSアカウントを選択します。
今回はグループでの追加を試しました。あらかじめグループは作成しておきます。
サンプルで2種類作成しておきます。(画像はAdministratorsAccessのみ)
- AdministratorsAccess
- ReadOnlyAccess
確認して送信
AWSアカウントが紐づくと以下のように表示されます。パーミッションのリンクをクリックすると、AWSコンソールが開きます。
アクセスキーのリンクをクリックすると、aws-cliでの指定方法が表示されます。
AWS CLI で複数アカウントやパーミッションを切り替えてみる
設定の前提は以下とします。
- Account A
- AdministratorsAccess
- ReadOnlyAccess
- Account B
- ReadOnlyAccess
設定とログイン
[profile a-admin]
sso_session = sso
sso_account_id = aaaaaaaaaaaa
sso_role_name = AdministratorAccess
region = ap-northeast-1
output = json
[profile a-read]
sso_session = sso
sso_account_id = aaaaaaaaaaaa
sso_role_name = ReadOnlyAccess
region = ap-northeast-1
output = json
[profile b-read]
sso_session = sso
sso_account_id = bbbbbbbbbbb
sso_role_name = ReadOnlyAccess
region = ap-northeast-1
output = json
[sso-session sso]
sso_region = ap-northeast-1
sso_start_url = https://xxx.com/start/#
sso_registration_scopes = sso:account:access
sso-session に払い出されたSSOの開始URLとリージョンを指定して、profileを再利用できる形で定義できます。
account_idとrole_nameにはAWSアカウントのIDと設定したパーミッションごとに指定します。
aws-cli を実行するために、まずはログインを実行します。
$ aws sso login
上記コマンドを実行するとブラウザが立ち上がるので、ログインします。
profileを指定して実行する
パーミッションの指定
同一のアカウントに対して異なるパーミッションで簡単に実行ができます。
$ aws sts get-caller-identity --profile a-admin
{
"UserId": "xxxx:yyyy",
"Account": "aaaaaaaaaaaa",
"Arn": "arn:aws:sts::aaaaaaaaaaaa:assumed-role/AWSReservedSSO_AdministratorAccess_zzzz/yyyy"
}
$ aws sts get-caller-identity --profile a-read
{
"UserId": "xxxx:yyyy",
"Account": "aaaaaaaaaaaa",
"Arn": "arn:aws:sts::aaaaaaaaaaaa:assumed-role/AWSReservedSSO_ReadOnlyAccess_zzzz/yyyy"
}
別アカウントの指定
別アカウントに対してもprofileの指定だけで切り替えることが可能です。
$ aws sts get-caller-identity --profile a-admin
{
"UserId": "xxxx:yyyy",
"Account": "aaaaaaaaaaaa",
"Arn": "arn:aws:sts::aaaaaaaaaaaa:assumed-role/AWSReservedSSO_AdministratorAccess_zzzz/yyyy"
}
$ aws sts get-caller-identity --profile b-read
{
"UserId": "xxxx:yyyy",
"Account": "bbbbbbbbbbb",
"Arn": "arn:aws:sts::bbbbbbbbbbb:assumed-role/AWSReservedSSO_ReadOnlyAccess_zzzz/yyyy"
}
おわりに
AWSアカウントごとにIAMの払い出しやaws-cliを利用するためにアクセスキーを発行する必要もありません。
参考
Discussion