複数のアカウントがあると、利用したいアカウントにログインしたり、ログアウトする必要がありますが、
Switch Roleアクションを利用すると、1つログインすると、Switch Roleで、他のアカウントを利用することができます。
社員が増えたり、減ったりしますが、1環境のみユーザを作ればよく、各アカウントごとにユーザを作る必要がなくなります。
「Assume Roleアクション」は他者にAWSアカウントの権限を委譲する仕組みです。
他者にスイッチロールができるようになります。
設定は、各ロールで「信頼関係」を設定することで、権限を付与することができます。
スイッチロールするときに、
AWS STS(Security Token Service)のAssume Roleアクションによって、IAMロールから一時的認証情報(アクセスキーID、シークレットアクセスキー、セッショントークン)を取得して使用します。
スイッチロールするポリシーを作成し、それをユーザに割り当てましょう。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole" "Resource": "*" } }
1234567890の誰にでもスイッチロールできる。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole" "Resource": "arn:aws:iam::1234567890:role/*" } }
1234567890のsw-admin-writeロールにスイッチロールできる。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole" "Resource": [ "arn:aws:iam::1234567890:role/sw-admin-write", "arn:aws:iam::9988776655:role/sw-admin-write" ] } }
特定 IP のみ特権ロールの AssumeRole を許可する。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAssumeRole", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::xxxxxxxxxx:role/AssumedAdministratorAccessRole" }, { "Sid": "SourceIPRestriction", "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "NotIpAddress": { "aws:SourceIp": [ "xxx.xxx.xxx.xxx/32" ] } } } ] }
スイッチロールされるロールの「信頼関係」で、許可するユーザを追加します。
特定 IP からのみIAM ユーザーがこのロールを引き受けられるように設定します。
スイッチロールされるロールの「信頼関係」に以下のように設定します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::xxxxxxxxxxxxxxx:user/xxxxxxxxx", "arn:aws:iam::xxxxxxxxxxxxxxx:user/xxxxxxxxx", "arn:aws:iam::xxxxxxxxxxxxxxx:user/xxxxxxxxx", "arn:aws:iam::xxxxxxxxxxxxxxx:user/xxxxxxxxx" ] }, "Action": "sts:AssumeRole" "Condition": { "IpAddress": { "aws:SourceIp": "x.x.x.x/32" } } } ] }
スイッチロールされるロールの「信頼関係」に以下のように設定します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::aaaaaaaa:root" }, "Action": "sts:AssumeRole" "Condition": { "ArnLike": { "aws:PrincipalArn": "arn:aws:iam::aaaaaaaaaa:user/*_infra" } } } ] }
スイッチロールされるロールの「信頼関係」に以下のように設定します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": "sts:AssumeRole" } ] }
SwichRoleのIAMを変更したら、ログアウト、ログインして確認しましょう。
そのままスイッチロールだけ確認すると、ログインできたり、できなかったりおかしい状態になります。
(1)右上のアカウント名をクリックし、「ロールの切り替え」を選択します。
(2)以下を入力し、「ロールの切り替え」をクリックします。
項目 | 設定 | 説明 |
---|---|---|
アカウント | 12345678901 | スイッチロール先のアカウント |
ロール | sw-service1-infra | スイッチロール先のロール名 大文字小文字注意 |
表示名 | オプション | |
色 | オプション |
aws sts assume-role --role-arn "arn:aws:iam::12345678901:role/sw-service1-infra" --role-session-name sw-service1-infraSession # 環境変数を設定 export AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxx export AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxx export AWS_SESSION_TOKEN=xxxxxxxxxxxxxxxxx # 環境変数を削除 unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN # 確認 aws sts get-caller-identity
[dst-role] role_arn = arn:aws:iam::123456789012:role/some-role credential_source=Ec2InstanceMetadata
Ec2InstanceMetadata : EC2 インスタンスプロファイルを利用
$ aws s3 ls --profile dst-role
参考:AWS CLIでインスタンスプロファイルからのAssumeRoleが簡単になりました | DevelopersIO
$HOME/.aws/credential
[operator] aws_access_key_id = dummy_access_key aws_secret_access_key = dummy_secret_key [dst-role] role_arn = arn:aws:iam::123456789012:role/some-role source_profile = operator
$ aws s3 ls --profile dst-role
参考:AWS CLIでインスタンスプロファイルからのAssumeRoleが簡単になりました | DevelopersIO