🐬

aws-cliのssoログインの動作を確認する

2025/01/03に公開

はじめに

自分のAWSアカウントがしばらく放置気味だったので、PCを新調したことをきっかけにアカウントの管理をちゃんと見直しました。

AWS IAM Identity Center の設定

ユーザーの新規追加

IAM Identity Center ではMFAの認証の設定、ユーザーが認証した後のセッション期間を統一的に決めることができます。
setting.png

まず、全てのAWSアカウントで一意に利用できるユーザーを用意します。
以下の入力項目を入力すると指定したEmailアドレスにサインイン用のリンクが送られます。
上記の設定次第ですが、基本はMFAの設定が求められます。
add_user.png

この段階ではAWSアカウントが何も紐づいていないので、ログインしても何も表示されません。
no_account_service.png

AWSアカウントにグループを追加する

ユーザーかグループを追加したいAWSアカウントを選択します。
assign_aws_account.png

今回はグループでの追加を試しました。あらかじめグループは作成しておきます。
add_user_group.png

サンプルで2種類作成しておきます。(画像はAdministratorsAccessのみ)

  • AdministratorsAccess
  • ReadOnlyAccess
    add_permission.png

確認して送信
confirm_assignment.png

AWSアカウントが紐づくと以下のように表示されます。パーミッションのリンクをクリックすると、AWSコンソールが開きます。
aws_console.png

アクセスキーのリンクをクリックすると、aws-cliでの指定方法が表示されます。
aws_cli.png

AWS CLI で複数アカウントやパーミッションを切り替えてみる

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-files.html

設定の前提は以下とします。

  • 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を利用するためにアクセスキーを発行する必要もありません。

参考

https://dev.classmethod.jp/articles/federate-azure-ad-and-aws-iam-identity-center/

Discussion