ロールの切り替えとは
AWSアカウントが増えた場合、それぞれのAWSアカウントにユーザーを作ると運用管理が大変です。
スイッチロールを使うことで、1つのAWSアカウントにユーザーを作成し、そのAWSアカウントから残りのAWSアカウントにスイッチしてログインすることができます。
管理者は、ユーザーの追加や削除は1つのAWSアカウントになるので運用管理が楽です。
ユーザーも複数のAWSアカウントごとにログインログアウトログインがなくなり便利です。
図で表すとこのようなイメージです。
AWSアカウント1は末尾・・71
AWSアカウント2は末尾・・51
やってみます
以下の流れでやってみます
- 今回の例
- Account2で、IAM Roleを作成します。(スイッチした先のAccount2で与える権限をロールとして定義する)
- Account1で、IAM Policyを作成し、それをUserまたはGroupにアタッチ(今回はGroupにアタッチします)
- スイッチロールを試す
①今回の例
例えば管理者チーム、開発者チームがあるとします。
それぞれ管理者チームをAdmin_group、開発者チームをDev_groupでIAM Groupを作成していきます。
Admin_groupにuser1、Dev_groupにuser2を追加していきます。
②Account2で、IAM Roleを作成します。
管理者のAdmin_group用のロールと開発者のDev_group用のロールを作成します。
AWS Account2に管理者でログインし、IAMの画面で"ロールの作成"をクリックします。
"別のAWSアカウント"をクリックし、スイッチ元となるアカウント(AWS Account1)のIDを入力し、"次へ"をクリックします。
管理者の権限をアタッチしたいので、"AdministratorAccess"のポリシーにチェックを入れ、"次へ"をクリックします。
ロール名に"Admin_group"を入力し、"ロールの作成"をクリックします。
Admin_groupというIAMロールが作成されました。
割愛しますが、Dev_groupというIAMロールも同じ要領で作成します。
先程のAdmin_groupとの違いは権限に"AmazonEC2FullAccess"をアタッチしている点です。
※DevなのでEC2のみに権限を与えていると思ってください。
作成したロールの"信頼関係"というタブを確認すると、ロールを渡すことができる(信頼している)AWSアカウントIDの設定が入っています。
これでこのAWSアカウントID(Account1)にロールを渡すことができます。
Account1で、IAM Policyを作成、それをUserまたはGroupにアタッチ(今回はGroupにアタッチします)
ポリシー作成
スイッチ元となるAccount1に管理者でログインし、IAMの画面を開き"ポリシー作成"をクリックします。
"Json"のタブをクリックし、以下の内容をコピペします。
スイッチ先のAccount2(・・58)へのSTSアクセス権限を与えています。(STSはロールをくださいというAPIアクセスのこと)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::xxxxxxxxxx58:role/Admin_group"
}
]
}
"Admin_policy"という名前をつけて"Create"をクリックします。
Dev_policyも同じ要領で作成します。
グループ作成
IAMの画面で"グループ作成”をクリックします。
"Admin_group"と入力し"次へ"をクリックします。
ポリシーのアタッチで先程作成した"Admin_policy"にチェックを入れ"次へ"をクリックします。
ユーザー作成
IAMの画面で"ユーザーの追加"をクリックし、以下を入力し、"次へ"をクリックします。
ユーザー名に"test_user1"
"AWSマネージメントコンソールへのアクセス"にチェック
パスワードは任意を入力
ユーザーをグループに追加で"Admin_group"にチェックを入れ"次へ"をクリックします。
"ユーザーの作成"をクリックします。
Dev用ユーザーのtest_user2も同じ要領でユーザー作成する
スイッチロール試してみる
全体の流れはこんな感じ
スイッチ元のユーザーが、スイッチ先のアカウントからロールをもらってログインします。
test_user1(スイッチ元の管理者ユーザー)でログインし、右上のユーザー名のところをクリックし、"ロールの切り替え"をクリックします。
ロールの切り替え画面で、スイッチ先のAWSアカウントID(末尾58のaccount2)を入力し、ロール名を先程作成した"Admin_group"を入力し、"ロールの切り替え"をクリックします。
ユーザー名部分がピンク色になり、末尾が58のAccount2にログインしているのが分かります。
S3をクリックすると、Administorator権限を持ってるので表示されます。
元のアカウントに戻る時は、画面右上のユーザー名をクリックし、"test_user1に戻る"をクリックします。
次にDevユーザーでの動作確認です。
test_user2でログインしなおし、画面右上のユーザー名をクリックし"ロールの切り替え"をクリックします。
ロールの切り替え画面で、スイッチ先のAWSアカウントID(末尾58のaccount2)を入力し、ロール名を先程作成した"Dev_group"を入力し、"ロールの切り替え"をクリックします。
ユーザー名部分がピンク色になり、末尾が58のAccount2にログインしているのが分かります。
S3をクリックすると、Access Deniedで表示されません。DevはEC2の権限しかないからです。
EC2インスタンスを作成することはできます。DevはEC2の権限があるからです。
まとめ
スイッチ元のIAMグループに対してスイッチ先のIAMロールが1:1で結びついているため、ユーザーが増えてもスイッチ先のIAMロールを増やす必要はありません。
CLIでのスイッチロールも簡単です。こちらの方のブログにきれいにまとまってるので参照ください。
https://nasrinjp1.hatenablog.com/entry/2018/04/06/215737