🌊

AWS CLI v2でIAM Identity Centerのユーザーにサインインする

2024/02/09に公開

はじめに

  • ローカルのAWS CLIでIAM Identity Centerのユーザーにサインインする手順です。
  • ローカルでAWS CLIを使いたいけれどIAMユーザーのアクセスキーを発行したくない方向けです。

構築手順

事前準備

  • IAM Identity Centerのユーザー作成が完了しているものとします。
  • すでにAWS CLI v2のインストールが完了しているものとします。
    AWS CLI v2がインストール済かどうかはaws --versionコマンドで確認できます。
$ aws --version
aws-cli/2.15.18 Python/3.11.6 Linux/5.15.133.1-microsoft-standard-WSL2 exe/x86_64.debian.11 prompt/off
  • IAM Identity Centerのマネジメントコンソールにアクセスし、「設定の概要」に記載されているIdentity Centerディレクトリの「リージョン」と「AWSアクセスポータルのURL」を控えておきます。
    Alt text

aws configure ssoウィザードでプロファイルを設定する

  • IAM Identity Centerのユーザー認証方法は下記の2つがあります。
    今回はAWS推奨のSSO トークンプロバイダー設定を利用します。
認証方法 特徴
SSO トークンプロバイダー設定 AWS推奨のやり方です。認証トークンを自動で更新して取得します。
更新不可のレガシー設定 認証トークンが自動で更新されないため、手動の更新が必要になります。
  • aws configure ssoコマンドを実行し、対話形式で以下のパラメータを入力します。
項目名 内容
SSO session name SSO sessionの名称。任意の名前を入力する。
SSO start URL AWSアクセスポータルのURL。
SSO region Identity Center ディレクトリのリージョン。
SSO registration scopes アクセススコープ。今回はsso:account:accessを入力すればよい。スコープの詳細についてはOAuth 2.0に記載されている。
$ aws configure sso
SSO session name (Recommended): my-sso
SSO start URL [None]: https://d-xxxxxxxxxx.awsapps.com/start/
SSO region [None]: ap-northeast-1
SSO registration scopes [sso:account:access]: sso:account:access
Attempting to automatically open the SSO authorization page in your default browser.
If the browser does not open or you wish to use a different device to authorize this request, open the following URL:

https://device.sso.ap-northeast-1.amazonaws.com/

Then enter the code:

XXXX-XXXX
  • パラメータの入力完了後、Webブラウザが自動的に起動する。
    Webブラウザが自動的に起動しない場合は、手動でWebブラウザからhttps://device.sso.ap-northeast-1.amazonaws.com/にアクセスし、ターミナルの出力結果に表示されたアクセスコード(XXXX-XXXXのような形式)を入力する。
    Alt text

  • AWSアクセスポータルのサインイン画面が表示されるので、IAM Identity Centerのユーザでサインインする。
    Alt text

  • アクセス許可の確認画面が表示されるので、「Allow」を選択して許可する。
    Alt text

  • サインインに成功したことを確認する。ここまで完了した後はWebブラウザは閉じてよい。
    Alt text

  • ターミナルに戻ると、先ほどサインインしたIdentity Centerのユーザでアクセスを許可されているアカウントの一覧が表示される。
    AWS CLIで利用するアカウントをキーボードのカーソルキー上下で選択しEnterを押下する。

There are 2 AWS accounts available to you.
> Main-Account, mainaccount@xxx.com (XXXXXXXXXXXX)
  Sub-Account, subaccount@xxx.com (XXXXXXXXXXXX)
  • 選択したアカウントにて利用可能な許可セットの一覧が表示される。AWS CLIで利用する許可セットをキーボードのカーソルキー上下で選択しEnterを押下する。
    今回はAWSAdministratorAccessを選択した。
Using the account ID XXXXXXXXXXXX
There are 2 roles available to you.
  AWSOrganizationsFullAccess
> AWSAdministratorAccess
  • 対話形式で以下のパラメータを設定しプロファイルを作成する。
    ローカルコンピュータに定義されているすべてのプロファイルからこのプロファイルを参照できるようになる。
項目名 内容
default client Region コマンドの送信先となるデフォルトのAWSリージョン。
default output format デフォルトの出力形式。json、yaml、text、table等がある。
profile name プロファイルの名前。任意の名前を入力する。プロファイル名にdefaultを指定すると、AWS CLIコマンド実行時に--profileコマンドでプロファイル名を指定しない場合に使用されるプロファイルとなる
CLI default client Region [None]: ap-northeast-1
CLI default output format [None]: json
CLI profile name [AWSAdministratorAccess-XXXXXXXXXXXX]: sso-admin
  • プロファイル設定が完了したことを示すメッセージが表示される。
To use this profile, specify the profile name using --profile, as shown:

aws s3 ls --profile sso-admin
  • ~/.aws/configにプロファイルの設定が保存されていることを確認する。
$ cat ~/.aws/config
[profile sso-admin]
sso_session = my-sso
sso_account_id = XXXXXXXXXXXX
sso_role_name = AWSAdministratorAccess
region = ap-northeast-1
output = json
[sso-session my-sso]
sso_start_url = https://d-XXXXXXXXXXXX.awsapps.com/start/
sso_region = ap-northeast-1
sso_registration_scopes = sso:account:access
  • AWS CLIのコマンド実行し動作確認を行う。
    下記コマンドを実行してレスポンスが帰ってくれば成功。
    長文が表示された場合は:qで抜けられる
$ aws ec2 describe-vpcs --profile sso-admin
{
    "Vpcs": []
}
$

セッションが切れた後に再度サインインする。

一度プロファイルが作られると、次回から下記コマンドを実行することでIdentify Centerへサインインできるようになる。
コマンドの実行後にWebブラウザが自動起動してIdentify Centerのサインインを行う。

$ aws sso login --sso-session my-sso

参考にしたWebサイト

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

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/sso-configure-profile-token.html

https://blog.serverworks.co.jp/aws-cli-with-iam-identity-center-

Discussion