はじめに
インプルの矢島です。
突然ですが、あなたは管理するAWSアカウントが多くなってきていないですか?
プロジェクトごとにアカウントが分かれていたり、さらにはプロジェクトの環境ごとでもアカウントが分かれていることはよくありますよね。
そんな時に便利なスイッチロールについて解説します。
やること
こんな感じで、アカウントAの特定のIAMユーザーからアカウントBにスイッチします。

- アカウントBでアカウントAのIAMユーザーを信頼するIAMロールを作成
- アカウントAでアカウントBのIAMロールを引き受けられるIAMポリシーを作成する
- アカウントAで作成したIAMポリシーをIAMユーザーに紐づける
- アカウントAからBにスイッチする
アカウントBでアカウントAのIAMユーザーを信頼するIAMロールを作成
アカウントBにアクセスして、IAMロールを作成します。
信頼されたエンティティでは、AWSアカウントを選択します。

アカウントはアカウントBの12桁のIDを入力して、次に進みます。

許可を追加の部分では、任意のポリシーを選択します。
今回はテストなので、強い権限のAdminstratorAccessをつけます。

ロール名は任意を選択しておいてください。

作成が完了したら、以下のようにアカウントBのユーザーがすべてアクセスできるようになってます。
今回は特定のIAMユーザーのみアクセスできるようにしたいので、設定を変えます。
以下がデフォルトの設定(Principalがrootになってますね)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::xxxxxxxxxxxxx:root"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
以下のように変更します。PrincipalをアカウントAのIAMユーザーのARNに変更します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": <アカウントAのIAMユーザーARN>
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
これでアカウントBの設定が終了です。
以下がこの後使います。
- IAMロール名
- IAMロールのARN
- アカウントBのアカウントID
アカウントAでアカウントBのIAMロールを引き受けられるIAMポリシーを作成する
IAMからポリシーを作成を押下します。
サービスはSTSを選択します。
書き込みでAssumeRoleをチェックしてください。

リソースにはアカウントBで作成したIAMロールを指定します。

次に紐付けます。
アカウントAで作成したIAMポリシーをIAMユーザーに紐づける
IAMユーザーから許可を追加で先ほど作成したIAMポリシーを割り当てます。

これで準備OKです。次にスイッチしていきます。
アカウントAからBにスイッチする
マネジメントコンソールの上のユーザー名を押下して、ロールの切り替えを押下します。

以下の画面で、アカウントはアカウントBのIDを入力します。そして、ロール名はアカウントBのロール名を入力して、ロールを切り替えます。

スイッチできました。スイッチすると、マネコンの右上のユーザーが先ほど設定した表示名になっていますね。

簡単でしたね!読んでいただきありがとうございました!
参考
- https://www.cloudbuilders.jp/articles/1350/