今回は「複数アカウントを切り替えて利用するスイッチロール」についてまとめます。
概要
"開発" と "本番" でアカウントが違う
セキュリティ、監査上の対応やヒューマンエラーを防ぐといった目的から開発環境と本番環境で異なるアカウントを利用するといったケースがあります。 何も考えずただ普通にアカウント(IAMユーザー)を作っていくと次の図のような状態になります。
このような状態だと、複数のアカウントをいちいちログアウト/ログインを繰り返して切り替えることになり、作業がかなり面倒です。 また、ユーザー離着任のたびにIAMユーザーを消したり作ったりをそれぞれのアカウントに対して行うというのは漏れなどがありやや危険な気もします。
複数アカウントを切り替える "スイッチロール"
上記のような状態を解決する手段の1つがスイッチロールを使ったアカウント管理の集約です。
IAMユーザー自体はある1か所に集約し、他のアカウントへは適切なロールへスイッチさせて利用するという方法です。 ここで登場するのが「スイッチロール」と言う方法で、スイッチ先のロールのことを「AssumeRole」と呼びます。
今回はこの「スイッチロール(AssumeRole)」の作り方と使い方をまとめます。
設定
今回は以下のような単純化した環境での設定を行っていきます。 設定するのは「スイッチ先のロール」と「スイッチ元のポリシーおよびグループ/ユーザー」です。
スイッチ先
スイッチ先では信頼するスイッチ元のアカウントIDを指定した「IAMロール」を作成します。
ロール作成
スイッチ先のロール作成はマネジメントコンソール上から行ってみます。
-
IAMのロールから「ロールの作成」を選択
-
「別のAWSアカウント」を選択
-
「アカウントID」を入力して「次のステップ」を選択
- アカウントID
- スイッチ元のアカウントIDを入力
- 外部IDが必須
- マネジメントコンソールを利用する場合、利用できないのでチェックしない。AWS CLI 利用の場合は使える。
- MFAが必須
- MFAの要否に応じてチェックを入れる
-
スイッチ先で利用させたいポリシーを選択して「次のステップ」を選択
今回は管理権限を丸っと渡すので「AdministratorAccess」を選択。
-
スイッチ先のロールにタグを指定したい場合、タグ名を指定して「次のステップ」を選択
-
「ロール名」を入力して「ロールの作成」を選択
スイッチ元
スイッチ元ではスイッチ先のIAMロールへアクセスできる「IAMポリシー」を作成し、そのポリシーを必要とするグループまたはユーザーにポリシーをアタッチします。
ポリシー作成
-
スイッチ元のIAMのポリシーから「ポリシーの作成」を選択
-
「JSON」タブへ移動
-
ポリシーを直接記述で作成し、「ポリシーの確認」を選択
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::<TargetAccountId>:role/<TargetAccountRoleName>" } ] }
"TargetAccountID" にはスイッチ先のアカウントIDを入力、 "TargetAccountRoleName" はスイッチ先のロールとして作成したロール名を指定します。
-
「名前」を設定して「ポリシーの作成」を選択
グループ/ユーザーへポリシー追加
作成したポリシーをあとは必要なグループやユーザーにつけてあげることで利用可能な状態になります。 ポリシーをグループやユーザーに付与するのはそのままなのでここでは割愛…。
利用
前述までの設定が終わっていればあとは利用方法です。 「ロールの切り替え」と「切り替えたロールから戻る」の2通りおさえればOKです。
ロールの切り替え
-
マネジメントコンソール右上のアカウント名を選択
-
「ロールの切り替え」を選択
-
初回の場合 "ロールの切り替え" が表示されるので「ロールの切り替え」を選択
-
「アカウント」「ロール」を入力して「ロールの切り替え」を選択
- アカウント
- スイッチ先のアカウントIDを指定
- ロール
- スイッチ先のロール名を指定
- 表示名
- 表示名を任意の文字列で指定
-
無事スイッチできればアカウント名が「表示名」に切り替わる
ロール利用の停止
今回は「複数アカウントを切り替えて利用する "スイッチロール"」についてまとめました。 参考になったでしょうか? 本記事がお役に立っていると嬉しいです!!
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!