概要
やりたいこと
AWS マネジメントアカウント(旧名組織マスターアカウント)配下のアカウントに対して、特定のメンバーアカウント(セキュリティ監視用)からスイッチロールしたい。
Organizations 経由の CloudFormation StackSets (サービスマネージド型)を利用し、各メンバーアカウントへスイッチロール用の Stack を作成する。
サービスマネージド型 CloudFormation
AWS Organizations の CloudFormation StackSets をサービスマネージド型 CloudFormationと呼ぶ。
対象は組織配下のメンバーアカウントとなる。
スイッチロール
アクセスしたい AWS アカウントに専用の IAM Role を作成しておけば、アクセス元 AWS アカウントからその Role の権限でアクセスできる機能。アクセス先に IAM User を作らずにすむ。
スイッチ後は、元のユーザーアクセス権限が一時的に無効になり、そのロールに割り当てられたアクセス権限が代わりに付与される。
CloudFormation
スイッチロール用の IAM Role
Read 権限用の IAM Role を作成する。
Principal にアクセス元 AWS アカウントの IAM User の Arn を指定する。
vi switch_role.yaml
AWSTemplateFormatVersion: 2010-09-09
Description: Enable AWS Config
Resources:
SecurityRole:
Type: AWS::IAM::Role
Properties:
RoleName: !Sub security-role
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
AWS:
- arn:aws:iam::111111111111:user/runble1
Action:
- sts:AssumeRole
Path: /
ManagedPolicyArns:
- arn:aws:iam::aws:policy/ReadOnlyAccess
サービスマネージド型 CloudFormation
Organizations 配下の全アカウントに対して、CloudFormation StackSets からデプロイする。
StackSet 作成。
aws cloudformation create-stack-set \ --profile organizations-test-lac \ --stack-set-name switch-role-organizations \ --template-body file://switch_role.yaml \ --permission-model SERVICE_MANAGED \ --auto-deployment Enabled=true,RetainStacksOnAccountRemoval=true --capabilities CAPABILITY_NAMED_IAM
Stack Instance を作成。IAM Role はグローバルリソースなため東京リージョンのみを指定。
aws cloudformation create-stack-instances \ --profile organizations-test-lac \ --stack-set-name switch-role-organizations \ --deployment-targets OrganizationalUnitIds="ou-xxxx-xxxxxxxx" \ --regions '["ap-northeast-1"]' \ --operation-preferences FailureToleranceCount=0,MaxConcurrentCount=1
コンソールからロールの切り替え
セキュリティ監視アカウントのコンソールにログインし、上タブより「スイッチロール」を選択。
ロールの切り替え先アカウント ID とロール名を選択。
以下のようにスイッチロールができれば OK。
コメント