この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
はじめに
既に運用されているプロジェクトでスイッチロールについての構築をしたので、構築内容を後学のために記載する。
同環境でスイッチロールの判例は多いので、異なる環境にまたがったスイッチロールの構成を検証する。
ユーザにアタッチするのも実運用ではあまり無いかと思うので、グループにスイッチロールポリシーをアタッチする。
構成図
1.AWS環境にユーザがログインする。
2.IAMユーザ毎に所属しているグループにアタッチされているスイッチロールポリシーに基づき、各環境のIAMロールにスイッチロールできる。
※本検証環境では本番環境にIAMユーザを構築し、スイッチロールで本番環境に移行する形式を取る。
実際にはユーザは管理環境に構築し、管理環境より各環境にスイッチロールを行う。
構築
0.前提条件
IAMユーザが作成されていること
1.【本番環境】スイッチロールのポリシー作成
1.1.CloudShell開始
AWSドキュメントAWS CloudShell の開始方法に従い、CloudShellを開始
1.2.スイッチロールポリシーの作成
1.2.1.JSONファイルを作成
CloudShell上で、ポリシー内容をJSONで作成して保存する
$ vi switchrole-policy.json
JSONの保存内容
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AssumeWorkRole",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::{【本番】AWSアカウント12桁番号}:role/{Role名:Work}"
},
{
"Sid": "AssumeAdminRole",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::{【STG】AWSアカウント12桁番号}:role/{Role名:Admin}"
}
]
}
1.2.2.CLIの実行
CloudShellで、作成したJSONファイルを指定してIAMポリシーを作成するコマンド実行
$ aws iam create-policy --policy-name {スイッチロールポリシー名} --policy-document file://switchrole-policy.json
2.【本番環境】IAMグループ作成
2.1.CloudShellよりIAMグループを作成
1.の作業に従いこちらも、CloudShellを利用して作業を実施
AWSドキュメントIAM ユーザーとグループを作成するに従い、下記コマンドよりIAMグループを作成
$ aws iam create-group --group-name {作成するグループ名}
2.2.IAMユーザをグループに追加
2.1.で作成したグループに既に作成されているIAMユーザを追加する
$ aws iam add-user-to-group --user-name {グループに追加するユーザ名} --group-name {作成するグループ名}
2.3.IAMグループにスイッチロールのポリシーをアタッチ
手順1で作成したスイッチロールのポリシーを手順2で作成したIAMグループにアタッチする
$ aws iam attach-group-policy --group-name {作成するグループ名} --policy-arn {"arn:aws:iam::{【本番】AWSアカウント12桁番号}:policy/{スイッチロールポリシー名}"}
3.【本番環境】閲覧権限しか持たない Work ロールを作成
スイッチロールする先となるIAMロール(Workロール)を【本番環境】に作成する。
Workロールに紐づくポリシーは、管理ポリシーの「ReadOnlyAccess」を利用する。
3.1.Workロールの作成
3.1.1.信頼ポリシーの作成
CloudShell上で、ポリシー内容をJSONで作成して保存する
$ vi trust-policy.json
JSONの保存内容
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::{【本番】AWSアカウント12桁番号}:root"
},
"Action": "sts:AssumeRole"
}
]
}
3.1.2.Workロールの作成
下記コマンドより Workロールを作成
$ aws iam create-role --role-name Work --assume-role-policy-document file://trust-policy.json
3.2.Workロールにポリシーのアタッチ
下記コマンドより WorkロールにReadOnlyAccess
ポリシー(管理ポリシー)をアタッチ
$ aws iam attach-role-policy --role-name Work --policy-arn arn:aws:iam::aws:policy/ReadOnlyAccess
4.【STG環境】Administrator権限を持つロールを作成
スイッチロールする先となるIAMロール(Adminロール)を【STG環境】に作成する。
Adminロールに紐づくポリシーは、管理ポリシーの「AdministratorAccess」を利用する。
4.1.Adminロールの作成
4.1.1.信頼ポリシーの作成
CloudShell上で、ポリシー内容をJSONで作成して保存する
※【本番環境】からのスイッチロールに対しての信頼ポリシーのため、許可するアカウントは 【本番】AWSアカウント12桁番号
$ vi trust-policy.json
JSONの保存内容
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::{【本番】AWSアカウント12桁番号}:root"
},
"Action": "sts:AssumeRole"
}
]
}
4.1.2.Adminロールの作成
下記コマンドより Workロールを作成
$ aws iam create-role --role-name Admin --assume-role-policy-document file://trust-policy.json
4.2.Adminロールにポリシーのアタッチ
下記コマンドより WorkロールにAdministratorAccess
ポリシー(管理ポリシー)をアタッチ
$ aws iam attach-role-policy --role-name Admin --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
挙動の確認
1.スイッチロール画面へ遷移
赤枠部分を選択して、スイッチロールの画面へ遷移する
2.1.【本番環境】で Workロール にスイッチロールの場合
赤枠部分に【本番環境】のアカウント番号 と ロール名:Work を入力して スイッチロールする
2.2.【本番環境】でスイッチロールが確認できる
赤枠部分より スイッチロールができていることを確認できる
3.1.【STG環境】で Adminロール にスイッチロールの場合
赤枠部分に【STG環境】のアカウント番号 と ロール名:Admi を入力して スイッチロールする
3.2.【STG環境】でスイッチロールが確認できる
赤枠部分より スイッチロールができていることを確認できる
さいごに
グループにアタッチしているスイッチロールを制御するポリシーと、スイッチロール先のIAMロール(+IAMポリシー)の理解が整理されていないと、人に説明する際に理解されにくい部分のため、こちらのブログを通して整理できてよかったです。