ハンズオン(簡易版): IAM Identity Center基礎

クリーンアップ2. SSO Adminアカウントアサインメントの削除 (handson-cli-iic-permission-set: XXXXXXXXXXXX/handson-cli-iic-group)

手順の目的

SSO Admin許可セット名"handson-cli-iic-permission-set"、SSO Adminアカウントアサインターゲットタイプ"AWS_ACCOUNT"、対象AWSアカウントのアカウントID"XXXXXXXXXXXX"、SSO Adminアカウントアサインプリンシパルタイプ"GROUP"、SSO Adminアカウントアサインプリンシパル(IdentityStoreグループ表示名)"handson-cli-iic-group"のSSO Adminアカウントアサインメントを削除します。

設定値の指定

手順に必要な設定値を変数に格納をします。

0. リージョン

リージョンを指定します。

環境変数の設定:

export AWS_DEFAULT_REGION='ap-northeast-1'

1. SSO_ADMIN許可セット名

SSO_ADMIN許可セット名を指定します。

変数の設定:

SSO_ADMIN_PERMISSION_SET_NAME='handson-cli-iic-permission-set'

2. SSO Adminアカウントアサインメントターゲットタイプ

SSO Adminアカウントアサインメントターゲットタイプを指定します。

変数の設定:

SSO_ADMIN_ACCOUNT_ASSIGNMENT_TARGET_TYPE='AWS_ACCOUNT'

3. AWSアカウントID

一時ファイルを指定します。

変数の設定:

DIR_TMP="${HOME}/environment/tmp-handson-cli-iic"

変数の設定:

FILE_TMP="${DIR_TMP}/handson-cli-iic-account.tmp" \
  && echo ${FILE_TMP}

結果(例):

${HOME}/environment/tmp-handson-cli-iic/handson-cli-iic-account.tmp

一時ファイルをドットコマンドで読み込みます。

コマンド:

. ${FILE_TMP}

AWSアカウントIDを指定します。

変数の設定:

AWS_ACCOUNT_ID="${AWS_ID}" \
  && echo ${AWS_ACCOUNT_ID}

結果(例):

XXXXXXXXXXXX

4. SSO Adminアカウントアサインメントプリンシパルタイプ

SSO Adminアカウントアサインメントプリンシパルタイプを指定します。

変数の設定:

SSO_ADMIN_ACCOUNT_ASSIGNMENT_PRINCIPAL_TYPE='GROUP'

5. IdentityStoreグループ名

IdentityStoreグループ名を指定します。

変数の設定:

IDENTITYSTORE_GROUP_DISPLAY_NAME='handson-cli-iic-group'

6. アカウントアサインメントステータス一時ファイル用ディレクトリ

アカウントアサインメントステータス一時ファイル用ディレクトリを指定します。

変数の設定:

DIR_TMP_SSO_ADMIN_ACCOUNT_ASSIGNMENT_OUTPUT="${HOME}/environment/tmp-handson-cli-iic"

ディレクトリが存在することを確認し、存在しない場合は作成します。

コマンド:

ls -d ${DIR_TMP_SSO_ADMIN_ACCOUNT_ASSIGNMENT_OUTPUT} > /dev/null 2>&1 \
  || mkdir -p ${DIR_TMP_SSO_ADMIN_ACCOUNT_ASSIGNMENT_OUTPUT}

7. アカウントアサインメントステータス一時ファイル

アカウントアサインメントステータス一時ファイルを指定します。

変数の設定:

FILE_TMP_SSO_ADMIN_ACCOUNT_ASSIGNMENT_OUTPUT="${DIR_TMP_SSO_ADMIN_ACCOUNT_ASSIGNMENT_OUTPUT}/$(date +%Y-%m-%d)-${SSO_ADMIN_PERMISSION_SET_NAME}-${SSO_ADMIN_ACCOUNT_ASSIGNMENT_TARGET_TYPE}-${AWS_ACCOUNT_ID}-${SSO_ADMIN_ACCOUNT_ASSIGNMENT_PRINCIPAL_TYPE}-${IDENTITYSTORE_GROUP_DISPLAY_NAME}-deletion.json" \
  && echo ${FILE_TMP_SSO_ADMIN_ACCOUNT_ASSIGNMENT_OUTPUT}

結果(例):

${HOME}/environment/tmp-handson-cli-iic/2023-12-21-handson-cli-iic-permission-set-AWS_ACCOUNT-XXXXXXXXXXXX-GROUP-handson-cli-iic-group-deletion.json"

設定値の確認

各変数に正しい設定値が格納されていることを確認します。

変数の確認:

cat << END

  # 0. AWS_DEFAULT_REGION:"ap-northeast-1"
       AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION}"

  # 1. SSO_ADMIN_PERMISSION_SET_NAME:"handson-cli-iic-permission-set"
       SSO_ADMIN_PERMISSION_SET_NAME="${SSO_ADMIN_PERMISSION_SET_NAME}"
  # 2. SSO_ADMIN_ACCOUNT_ASSIGNMENT_TARGET_TYPE:"AWS_ACCOUNT"
       SSO_ADMIN_ACCOUNT_ASSIGNMENT_TARGET_TYPE="${SSO_ADMIN_ACCOUNT_ASSIGNMENT_TARGET_TYPE}"
  # 3. AWS_ACCOUNT_ID:"XXXXXXXXXXXX"
       AWS_ACCOUNT_ID="${AWS_ACCOUNT_ID}"
  # 4. SSO_ADMIN_ACCOUNT_ASSIGNMENT_PRINCIPAL_TYPE:"GROUP"
       SSO_ADMIN_ACCOUNT_ASSIGNMENT_PRINCIPAL_TYPE="${SSO_ADMIN_ACCOUNT_ASSIGNMENT_PRINCIPAL_TYPE}"
  # 5. IDENTITYSTORE_GROUP_DISPLAY_NAME:"handson-cli-iic-group"
       IDENTITYSTORE_GROUP_DISPLAY_NAME="${IDENTITYSTORE_GROUP_DISPLAY_NAME}"
  # 6. DIR_TMP_SSO_ADMIN_ACCOUNT_ASSIGNMENT_OUTPUT:"${HOME}/environment/tmp-handson-cli-iic"
       DIR_TMP_SSO_ADMIN_ACCOUNT_ASSIGNMENT_OUTPUT="${DIR_TMP_SSO_ADMIN_ACCOUNT_ASSIGNMENT_OUTPUT}"
  # 7. FILE_TMP_SSO_ADMIN_ACCOUNT_ASSIGNMENT_OUTPUT:"${HOME}/environment/tmp-handson-cli-iic/2023-12-21-handson-cli-iic-permission-set-AWS_ACCOUNT-XXXXXXXXXXXX-GROUP-handson-cli-iic-group-deletion.json""
       FILE_TMP_SSO_ADMIN_ACCOUNT_ASSIGNMENT_OUTPUT="${FILE_TMP_SSO_ADMIN_ACCOUNT_ASSIGNMENT_OUTPUT}"

END

各変数について、上の行と下の行の値の内容もしくは形式が同じであることを確認します。 もし異なる場合は、それぞれの手順番号に戻って変数の設定を行います。

処理の実行

インスタンスのARNを取得します。

コマンド:

sso_admin_instance_arn=$( \
  aws sso-admin list-instances \
    --query "Instances[].InstanceArn" \
    --output text \
) \
  && echo ${sso_admin_instance_arn}

結果(例):

arn:aws:sso:::instance/ssoins-xxxxxxxxxxxxxxxx

IdentityStore のIDを取得します。

コマンド:

sso_admin_identity_store_id=$( \
  aws sso-admin list-instances \
    --query "Instances[].IdentityStoreId" \
    --output text \
) \
  && echo ${sso_admin_identity_store_id}

結果(例):

d-xxxxxxxxxx

許可セットのARNを取得します。

コマンド:

for i in $(
  aws sso-admin list-permission-sets \
    --instance-arn ${sso_admin_instance_arn} \
    --query 'PermissionSets[]' \
    --output text \
); do

  name=$(
    aws sso-admin describe-permission-set \
      --instance-arn ${sso_admin_instance_arn} \
      --permission-set-arn ${i} \
      --query 'PermissionSet.Name' \
      --output text
  )

  if [ ${name}x == ${SSO_ADMIN_PERMISSION_SET_NAME}x ]; then
    sso_admin_permission_set_arn=$(
      aws sso-admin describe-permission-set \
        --instance-arn ${sso_admin_instance_arn} \
        --permission-set-arn ${i} \
        --query 'PermissionSet.PermissionSetArn' \
        --output text
    )
  fi
done \
  && echo ${sso_admin_permission_set_arn}

結果(例):

arn:aws:sso:::permissionSet/ssoins-xxxxxxxxxxxxxxxx/ps-xxxxxxxxxxxxxxxx

IAM Identity CenterグループIDを取得します。

コマンド:

identitystore_group_id=$( \
  aws identitystore get-group-id \
    --identity-store-id ${sso_admin_identity_store_id} \
    --alternate-identifier "{\"UniqueAttribute\":{\"AttributePath\":\"displayName\",\"AttributeValue\":\"${IDENTITYSTORE_GROUP_DISPLAY_NAME}\"}}" \
  --query "GroupId" \
  --output text \
) \
  && echo ${identitystore_group_id}

結果(例):

xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

SSO_ADMIN許可セットの削除

SSO Adminアカウントアサインメントを削除します。

変数の確認:

cat << END

  # sso_admin_instance_arn:"arn:aws:sso:::instance/ssoins-xxxxxxxxxxxxxxxx"
    sso_admin_instance_arn="${sso_admin_instance_arn}"
  # sso_admin_permission_set_arn:"arn:aws:sso:::permissionSet/ssoins-xxxxxxxxxxxxxxxx/ps-xxxxxxxxxxxxxxxx"
    sso_admin_permission_set_arn="${sso_admin_permission_set_arn}"
  # SSO_ADMIN_ACCOUNT_ASSIGNMENT_TARGET_TYPE:"AWS_ACCOUNT"
    SSO_ADMIN_ACCOUNT_ASSIGNMENT_TARGET_TYPE="${SSO_ADMIN_ACCOUNT_ASSIGNMENT_TARGET_TYPE}"
  # AWS_ACCOUNT_ID:"XXXXXXXXXXXX"
    AWS_ACCOUNT_ID="${AWS_ACCOUNT_ID}"
  # SSO_ADMIN_ACCOUNT_ASSIGNMENT_PRINCIPAL_TYPE:"GROUP"
    SSO_ADMIN_ACCOUNT_ASSIGNMENT_PRINCIPAL_TYPE="${SSO_ADMIN_ACCOUNT_ASSIGNMENT_PRINCIPAL_TYPE}"
  # identitystore_group_id:"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    identitystore_group_id="${identitystore_group_id}"
  # FILE_TMP_SSO_ADMIN_ACCOUNT_ASSIGNMENT_OUTPUT:"${HOME}/environment/tmp-handson-cli-iic/2023-12-21-handson-cli-iic-permission-set-AWS_ACCOUNT-XXXXXXXXXXXX-GROUP-handson-cli-iic-group-deletion.json""
    FILE_TMP_SSO_ADMIN_ACCOUNT_ASSIGNMENT_OUTPUT="${FILE_TMP_SSO_ADMIN_ACCOUNT_ASSIGNMENT_OUTPUT}"

END

コマンド:

aws sso-admin delete-account-assignment \
  --instance-arn ${sso_admin_instance_arn} \
  --permission-set-arn ${sso_admin_permission_set_arn} \
  --target-type ${SSO_ADMIN_ACCOUNT_ASSIGNMENT_TARGET_TYPE} \
  --target-id ${AWS_ACCOUNT_ID} \
  --principal-type ${SSO_ADMIN_ACCOUNT_ASSIGNMENT_PRINCIPAL_TYPE} \
  --principal-id ${identitystore_group_id} \
  > ${FILE_TMP_SSO_ADMIN_ACCOUNT_ASSIGNMENT_OUTPUT} \
    && cat ${FILE_TMP_SSO_ADMIN_ACCOUNT_ASSIGNMENT_OUTPUT}

結果(例):

{
    "AccountAssignmentDeletionStatus": {
        "Status": "IN_PROGRESS",
        "RequestId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "TargetId": "XXXXXXXXXXXX",
        "TargetType": "AWS_ACCOUNT",
        "PermissionSetArn": "arn:aws:sso:::permissionSet/ssoins-xxxxxxxxxxxxxxxx/ps-xxxxxxxxxxxxxxxx",
        "PrincipalType": "GROUP",
        "PrincipalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
}

リクエストIDを取得します。

コマンド:

sso_admin_account_assignment_deletion_request_id=$( \
  cat ${FILE_TMP_SSO_ADMIN_ACCOUNT_ASSIGNMENT_OUTPUT} \
    | jp.py 'AccountAssignmentDeletionStatus.RequestId' \
    | sed 's/\"//g' \
) \
  && echo ${sso_admin_account_assignment_deletion_request_id}

結果(例):

xxxxxxxx-xxxx-xxxx-xxxx- xxxxxxxxxxxx

完了確認

「SSO Admin許可セット名"handson-cli-iic-permission-set"、SSO Adminアカウントアサインターゲットタイプ"AWS_ACCOUNT"、対象AWSアカウントのアカウントID"XXXXXXXXXXXX"、SSO Adminアカウントアサインプリンシパルタイプ"GROUP"、SSO Adminアカウントアサインプリンシパル(IdentityStoreグループ表示名)"handson-cli-iic-group"のSSO Adminアカウントアサインメントが存在しない。」ことを確認します。

コマンド:

aws sso-admin list-account-assignments \
  --instance-arn ${sso_admin_instance_arn} \
  --permission-set-arn ${sso_admin_permission_set_arn} \
  --account-id ${AWS_ACCOUNT_ID} \
  --query "length(
    AccountAssignments[?
      PrincipalType == \`${SSO_ADMIN_ACCOUNT_ASSIGNMENT_PRINCIPAL_TYPE}\`
        && PrincipalId == \`${identitystore_group_id}\`
    ])"

結果(例):

0

「SSO Adminアカウントアサインメントのステータスが"SUCCEEDED"である。」ことを確認します。

コマンド:

aws sso-admin describe-account-assignment-deletion-status \
  --instance-arn ${sso_admin_instance_arn} \
  --account-assignment-deletion-request-id ${sso_admin_account_assignment_deletion_request_id} \
  --query 'AccountAssignmentDeletionStatus.Status' \
  --output text

結果(例):

SUCCEEDED

アカウントアサインメントステータス一時ファイルを削除します。

コマンド:

rm ${FILE_TMP_SSO_ADMIN_ACCOUNT_ASSIGNMENT_OUTPUT}

結果(例):

(出力なし)

手順の完了

SSO Admin許可セットのARNの取得をします。

コマンド:

for i in $(
  aws sso-admin list-permission-sets \
    --instance-arn ${sso_admin_instance_arn} \
    --query 'PermissionSets[]' \
    --output text \
); do

  name=$(
    aws sso-admin describe-permission-set \
      --instance-arn ${sso_admin_instance_arn} \
      --permission-set-arn ${i} \
      --query 'PermissionSet.Name' \
      --output text
  )

  if [ ${name}x == ${SSO_ADMIN_PERMISSION_SET_NAME}x ]; then
    sso_admin_permission_set_arn=$(
      aws sso-admin describe-permission-set \
        --instance-arn ${sso_admin_instance_arn} \
        --permission-set-arn ${i} \
        --query 'PermissionSet.PermissionSetArn' \
        --output text
    )
  fi
done \
  && echo ${sso_admin_permission_set_arn}

結果(例):

arn:aws:sso:::permissionSet/ssoins-xxxxxxxxxxxxxxxx/ps-xxxxxxxxxxxxxxxx

ARNをコピーします。

  • IAM Identity Centerダッシュボード ( https://console.aws.amazon.com/singlesignon/home )にアクセスします。

  • 左ペイン "許可セット"をクリックします。

  • 許可セットの検索フォームにARNをペーストします。

  • "許可セット名"(リンク)をクリックします。

  • "アカウント"(タブ)をクリックします。

  • アカウントアサインメントを削除したAWSアカウントが表示されていなければ正常です。