AWS Organizationを使ったアカウントの整備とスイッチロールの導入
したいこと
- 一つのAWSアカウントに本番環境や検証環境のサービスを同居させたくない
- 本番環境、ステージング環境、検証環境等を完全に分離させたい
- 検証環境は開発エンジニアがEC2等インスタンスを作成、削除を許容したいが本番環境はインフラエンジニアだけ許可などの制御がしたい
- 環境ごとにIAM発行する手間をなくしたい
- スイッチロールを使用しIAM1つだけで済むようにしたい
AWS Organizationを使い環境ごとのグループ・アカウントを作成
- グループ・アカウントを環境ごとに作成
- それぞれのアカウントは独立するので検証アカウント内は本番アカウント内のサービスは表示されないので間違ったサーバー変更は起き得ない
アカウントイメージ
アカウント | 内容 |
---|---|
支払いアカウント | 頂点に存在、本番、開発、検証の費用をまとめて払う為だけのアカウント |
本番アカウント | 本番環境動作アカウント、インフラエンジニアだけ |
ステージングアカウント | ステージング環境動作アカウント、インフラエンジニアだけ |
検証アカウント | 検証環境動作アカウント、開発エンジニア、インフラエンジニア両方 |
スクリーンショット
アカウントを細分化できました
※ メアドだけ黒塗り
スイッチロール準備
今回は検証アカウント(toyscreation-sandbox)にEC2参照ロールを作成し
ログインアカウントで作成したIAMがスイッチロールでEC2参照ロールを使う
検証環境のロール作成
検証アカウント(toyscreation-sandbox)にログインしロール作成
- 別のAWSアカウント
- アカウントIDはログインアカウントを選択
- オプションは選択に応じて
権限ポリシーはサンプルとしてEC2のみ
タグ追加は今回はスキップ
ロールの作成、ロール名、ロール説明を入力
ログインアカウントのスイッチロール操作
IAMポリシー作成
ロール切替のポリシーが sts:AssumeRole
になるのでポリシーを追加してユーザーに付与が必要
- "TargetAccountID" にはスイッチ先のアカウントIDを入力
- "TargetAccountRoleName" はスイッチ先のロールとして作成したロール名を指定
{
"Version": "2012-10-17",
"Statement":
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::<TargetAccountId>:role/<TargetAccountRoleName>"
}
]
}
IAMユーザー追加
rootユーザーはスイッチロールの利用は出来ないのでIAMでユーザーを追加
上記で作成したポリシーをIAMユーザに付与
スイッチロール設定
対象IAMでログイン
アカウントメニューにロールの切り替えが表示
各項目を入力
- アカウント:スイッチ先のアカウントIDを指定
- ロール:スイッチ先のロール名を指定
- 表示名:表示名を任意の文字列で指定
確認
EC2の表示は許可されているが、それ以外は許可されていない(スクショはS3)
まとめ
- 本番環境、ステージング環境、検証環境等を完全に分離させた
- アカウント別に環境を完全に分離出来た(ただし支払いは一本化)
- 各環境で必要なAWSサービスが動いているかわかりやすくなった
- スイッチロールを使い環境の切り替えが楽になった
2. エンジニア別 x 環境別に権限をスイッチロールで切り替えれるようになった
いいね!と思ったら LGTM お願いします