IAM Identity Center管理下のアカウントの一時認証情報をCLIで取得する

IAM Identity Center管理下のアカウントの一時認証情報をCLIで取得する

Clock Icon2023.05.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS事業本部のイシザワです。

CLIを使ってIAM Identity Center管理下のアカウントのリソースにアクセスするためには、通常はプロファイルを作成しますが、プロファイルを作らずに一時認証情報を取得してアクセスする方法があったため備忘録として残しておきます。

具体的には、下図の赤枠をクリックすることで確認できる一時認証情報をCLIで取得します。

手順

まず、IAM Identity Centerの管理アカウントのIAM Identity Centerダッシュボードを開き、下図の赤枠のログインURLを控えておきます。

以下のコマンドを実行し、最後に表示されるURLにブラウザでアクセスし、SSOユーザーの認証とデバイスの認可を行います。START_URLは控えていたログインURLとしてください。CLIENT_NAMEは任意の文字列です。

START_URL="<ログインURL>"
CLIENT_NAME="sample-client"

CLIENT_INFO=$(aws sso-oidc register-client \
                --client-name $CLIENT_NAME \
                --client-type public)

CLIENT_ID=$(echo $CLIENT_INFO | jq -r '.clientId')
CLIENT_SECRET=$(echo $CLIENT_INFO | jq -r '.clientSecret')

DEVICE_INFO=$(aws sso-oidc start-device-authorization \
                --client-id $CLIENT_ID \
                --client-secret $CLIENT_SECRET \
                --start-url $START_URL)

DEVICE_CODE=$(echo $DEVICE_INFO | jq -r '.deviceCode')
VERIFICATION_URI=$(echo $DEVICE_INFO | jq -r '.verificationUriComplete')

echo -e "Please open the following url:\n\n$VERIFICATION_URI"

以下のコマンドを実行し、アクセストークンを取得します。

ACCESS_TOKEN_INFO=$(aws sso-oidc create-token \
                      --client-id $CLIENT_ID \
                      --client-secret $CLIENT_SECRET \
                      --grant-type "urn:ietf:params:oauth:grant-type:device_code" \
                      --device-code $DEVICE_CODE)

ACCESS_TOKEN=$(echo $ACCESS_TOKEN_INFO | jq -r '.accessToken')

get-role-credentialsでアカウントの認証情報を取得します。アカウントIDと権限セット名の他に、SSOの認証情報としてアクセストークンが必要です。

ACCOUNT_ID="123456789012"
ROLE_NAME="AdministratorAccess"

CREDENTIAL_INFO=$(aws sso get-role-credentials \
                    --role-name $ROLE_NAME \
                    --account-id $ACCOUNT_ID \
                    --access-token $ACCESS_TOKEN)

以下のコマンドで、一時認証情報で対象のアカウントにアクセスできていることが確認できます。対象アカウントのアカウントIDが出力されます。

env \
  AWS_ACCESS_KEY_ID=$(echo $CREDENTIAL_INFO | jq -r '.roleCredentials.accessKeyId') \
  AWS_SECRET_ACCESS_KEY=$(echo $CREDENTIAL_INFO | jq -r '.roleCredentials.secretAccessKey') \
  AWS_SESSION_TOKEN=$(echo $CREDENTIAL_INFO | jq -r '.roleCredentials.sessionToken') \
  aws sts get-caller-identity --query 'Account' --output text

注意点

一時認証情報に有効期限があるのはもちろんのことですが、アクセストークンにも有効期限があります。 下記コマンドでアクセストークンの有効期間(秒数)が取得できます。

echo $ACCESS_TOKEN_INFO | jq -r '.expiresIn'

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.