注目イベント!
春の新人向け連載企画開催中
新人エンジニアの皆さん、2024春、私たちと一緒にキャリアアップの旅を始めませんか?
IT業界への最初の一歩を踏み出す新人エンジニアをサポートする新連載スタート!
mameyose

AWS IAM Identity Centerのロールから別のロールにCLIでスイッチして操作する

| 3 min read
Author: shigeki-shoji shigeki-shojiの画像

こんにちは、庄司です。

複数の AWS アカウントがある環境では管理アカウント (Management Account) に AWS IAM Identity Center (旧 AWS SSO) をセットアップして各アカウントを使用していることが多いと思います。

私も個人的に利用している管理アカウントに「Google Workspace を AWS IAM Identity Center の外部 ID プロバイダとして使用する方法」を参考にセットアップしました。

カスタム権限セットの作成

#

IAM Identity Center の権限セットには AWS 管理ポリシーに似た管理権限セットもありますが、ここでは、STS の AssumeRole のみができるポリシーを利用するためにカスタム権限セットを作成しました。

カスタム権限セットにはアクセス先にあるポリシー名を設定します。日常的に使用しているアカウントに作成したポリシーは次のとおりです。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "*"
        }
    ]
}

このポリシーに AssumeRolePolicy と名付けました。

よりセキュアにするためのヒント

Resource* とワイルドカードにしていますが、よりセキュアにするためには限定したロールを指定すべきでしょう。

管理アカウントに戻って、カスタム権限セットを作成し、ユーザ (またはグループですが私はグループを利用していないため) に割り当ててアクセスするアカウントを設定しました。

AWS CLI の設定

#

設定したポリシーは AssumeRole しかできないものです。やりたいことは図のように、S3 へのアクセスが必要な場合は RoleForS3 ロールを受け持つということです。

SSO の設定

#

aws configure sso コマンドを使って .aws/config を設定できます。

aws configure sso
SSO session name (Recommended): 任意のセッション名
SSO start URL [None]: 利用するURL 
SSO region [None]: IAM Identity Center のリージョン 
SSO registration scopes [sso:account:access]:

Using the account ID [選択したアカウントID]

Using the role name "AssumeRolePolicy"

CLI default client Region [ap-northeast-1]:
CLI default output format [json]:
CLI profile name [******-*******]: プロファイル名

次のコマンドでログインします (CLI profile name を example としたと仮定します)。

aws sso login --profile example

ポリシーで AssumeRole 以外は許可されていないため、次のコマンドを実行しても AccessDenied となります。

aws s3api list-buckets --profile example

プロファイルの追加

#

.aws/config に次のプロファイルを追加します。

[profile requires3]
role_arn = arn:aws:iam::123412341234:role/RoleForS3
source_profile = example

role_arn123412341234 はお使いの AWS アカウントID に置換してください。

source_profile に上で設定した SSO プロファイル名を記述しています。これによって、SSO でログインした認証情報を使って、RoleForS3AssumeRole されます。

aws s3api list-buckets --profile requires3

S3 のバケット一覧が表示されるでしょう。

おわりに

#

プロファイルの追加後にみていただいたように、シングルサインオンの後、必要な作業に応じたロールでアクセスすることで、例えば DynamoDB のデータを確認したい場合は、DynamoDB の ReadOnly なロールで操作したり、CloudFormation で AWS リソースを作成する場合はそのためのロールで操作するといった、きめの細かいアクセス制御の下で実行できます。

豆蔵では共に高め合う仲間を募集しています!

recruit

具体的な採用情報はこちらからご覧いただけます。