Control Towerのアカウント発行をService Catalogの権限に絞ったポリシーでやってみた
はじめに
Control Towerでアカウントを発行するとき、毎回Administrator
の権限でアカウントファクトリーから実行していたのですが、実際に運用する際には権限が広すぎる点が気になります。
そこで権限を抑えて実行できないか考えていたのですが、Control Tower有効化後にAWS SSOで作成されるデフォルトのアクセス許可セットを思い出しました。
AWSServiceCatalogEndUserAccess:このグループは、Account Factory を使用して新しいアカウントをプロビジョニングするためにこのアカウントでのみ使用されます。
説明文からするとやりたいことがそのままできそうな感じがしたので、このアクセス許可セットでアカウント発行を試してみます。
AWSServiceCatalogEndUserAccessのアクセス許可セットについて
AWSServiceCatalogEndUserAccess
のアクセス許可セットはAWSServiceCatalogEndUserFullAccess
のマネージドポリシーがアタッチされています。
参考:AWS Service Catalog の Identity and Access Management - AWS Service Catalog
具体的な権限は以下の通りです。(2022/05/25時点)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:DescribeStackEvents", "cloudformation:DescribeStacks", "cloudformation:SetStackPolicy", "cloudformation:ValidateTemplate", "cloudformation:UpdateStack", "cloudformation:CreateChangeSet", "cloudformation:DescribeChangeSet", "cloudformation:ExecuteChangeSet", "cloudformation:ListChangeSets", "cloudformation:DeleteChangeSet", "cloudformation:TagResource", "cloudformation:CreateStackSet", "cloudformation:CreateStackInstances", "cloudformation:UpdateStackSet", "cloudformation:UpdateStackInstances", "cloudformation:DeleteStackSet", "cloudformation:DeleteStackInstances", "cloudformation:DescribeStackSet", "cloudformation:DescribeStackInstance", "cloudformation:DescribeStackSetOperation", "cloudformation:ListStackInstances", "cloudformation:ListStackResources", "cloudformation:ListStackSetOperations", "cloudformation:ListStackSetOperationResults" ], "Resource": [ "arn:aws:cloudformation:*:*:stack/SC-*", "arn:aws:cloudformation:*:*:stack/StackSet-SC-*", "arn:aws:cloudformation:*:*:changeSet/SC-*", "arn:aws:cloudformation:*:*:stackset/SC-*" ] }, { "Effect": "Allow", "Action": [ "cloudformation:GetTemplateSummary", "servicecatalog:DescribeProduct", "servicecatalog:DescribeProductView", "servicecatalog:DescribeProvisioningParameters", "servicecatalog:ListLaunchPaths", "servicecatalog:ProvisionProduct", "servicecatalog:SearchProducts", "ssm:DescribeDocument", "ssm:GetAutomationExecution", "config:DescribeConfigurationRecorders", "config:DescribeConfigurationRecorderStatus" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "servicecatalog:DescribeProvisionedProduct", "servicecatalog:DescribeRecord", "servicecatalog:ListRecordHistory", "servicecatalog:ListStackInstancesForProvisionedProduct", "servicecatalog:ScanProvisionedProducts", "servicecatalog:TerminateProvisionedProduct", "servicecatalog:UpdateProvisionedProduct", "servicecatalog:SearchProvisionedProducts", "servicecatalog:CreateProvisionedProductPlan", "servicecatalog:DescribeProvisionedProductPlan", "servicecatalog:ExecuteProvisionedProductPlan", "servicecatalog:DeleteProvisionedProductPlan", "servicecatalog:ListProvisionedProductPlans", "servicecatalog:ListServiceActionsForProvisioningArtifact", "servicecatalog:ExecuteProvisionedProductServiceAction", "servicecatalog:DescribeServiceActionExecutionParameters" ], "Resource": "*", "Condition": { "StringEquals": { "servicecatalog:userLevel": "self" } } } ] }
Service Catalogで製品を起動するのに必要な一通りの権限が許可されていますね。CloudFormationが許可されているのは、Service Catalog自体がCloudFormationをパッケージングしているサービスだからだと思います。
利用する際はControl Towerから作成されているAWSAccountFactory
というSSOグループとAWSServiceCatalogEndUserAccess
のアクセス許可セットが紐づけられているので、SSOユーザーをAWSAccountFactoryに所属させて下さい。
AWS Control Tower Account Factory を使用すると、クラウド管理者と AWS Single Sign-On エンドユーザーは、ランディングゾーンでアカウントをプロビジョニングできます。デフォルトでは、アカウントをプロビジョニングする AWS SSO ユーザーは AWSAccountFactory グループまたは管理グループに属している必要があります。
では実際にこの権限でアカウント発行をやってみます。
やってみる
AWSServiceCatalogEndUserAccess を使って管理アカウントへログイン
AWS SSOを使って管理アカウントへAWSServiceCatalogEndUserAccess
のアクセス許可セットでログインします。
今回はService Catalogの権限しか持っていないロールのため、Control Towerのアカウントファクトリーは利用できません。Control Towerのコンソールは権限不足でひらけませんでした。
というわけで、Control Towerからではなくアカウントファクトリーの実態であるService Catalogから行う必要があります。
Service Catalogからアカウントを発行する
Service Catalogの製品
を開くと、AWS Control Tower Account Factory
という製品が確認できます。Control Towerのコンソールからアカウントファクトリーを実行すると、裏ではこの製品が動く仕組みになっています。
もちろんControl Towerからではなく、Service Catalogからも実行できます。クリックすると製品の詳細が開けるので、右上の製品を起動
をクリックしてください。
すると、以下のような入力画面へ遷移します。ここで必要な情報を入力すればアカウントをControl Tower配下に作成することができます。
ここで入力できる情報ですが、Control Towerのコンソールから見るアカウントファクトリーとほぼ同じであることがわかります。
一応比較すると以下のような表になります。入力欄が英語になっているだけで全て内容は同じです。(Control Tower側に製品名を入力する欄がありませんが、表示名に入れたアカウント名がそのまま製品名になるようです。)
Control Tower | Service Catalog |
---|---|
入力欄なし(表示名がそのまま入力される) | プロビジョニングされた製品の名前 |
アカウント E メール | AccountEmail |
表示名 | AccountName |
親 OU | ManagedOrganizationalUnit |
AWS SSO E メール | SSOUserEmail |
AWS SSO ユーザー名:名 | SSOUserFirstName |
AWS SSO ユーザー名:性 | SSOUserLastName |
というわけで、Service Catalogからアカウントを発行してみます。各値を入力して起動すると、アカウントの発行が始まりました。
同時に別権限でControl Towerのコンソールも確認してみましたが、Control Tower配下に登録処理が行われていました。
この後無事に登録済みのステータスとなったので、AWSServiceCatalogEndUserAccess
のアクセス許可セットでも問題なくアカウント発行が確認できました。
おわりに
Service Catalogの権限を許可したアクセス許可セットを使って、Control Towerへのアカウント発行を試してみました。最小権限の原則に従うのであれば、アカウントの発行についてもAWSServiceCatalogEndUserFullAccess
のポリシーを使って実施するのがベストかと思います。
Control Towerを利用している環境で、アカウント発行を行う際は検討してみてください。