Account Factory Customization (AFC) を使用したアカウントのカスタマイズ - AWS Control Tower

Account Factory Customization (AFC) を使用したアカウントのカスタマイズ

AWS Control Tower では、AWS Control Tower コンソールからリソースをプロビジョニングする際、新規および既存の AWS アカウントをカスタマイズできます。AWS Control Tower では、Account Factory Customization を設定すると、今後のプロビジョニングに備えてこのプロセスが自動化されるため、パイプラインを維持する必要がなくなります。カスタマイズされたアカウントは、リソースがプロビジョニングされるとすぐに使用できます。

ブループリントを使用して新しいアカウントをプロビジョニングする

カスタマイズされたアカウントは、CloudFormation テンプレートまたは Terraform を使用し AWS Control Tower Account Factory でプロビジョニングされます。カスタマイズされたアカウントのブループリントとして機能するテンプレートは、ユーザーが定義します。ブループリントでは、アカウントのプロビジョニング時に必要な特定のリソースと設定が記述されています。また、AWS パートナーによって構築および管理される事前定義済みのブループリントも使用できます。パートナーが管理するブループリントの詳細については、「AWS Service Catalog 入門ライブラリ」を参照してください。

既存のアカウントにブループリントを適用

AWS Control Tower コンソールのアカウント更新ステップに従って、カスタマイズされたブループリントを既存のアカウントに適用することもできます。詳細については、「コンソールでアカウントを更新する」を参照してください。

定義: ハブアカウント

アカウントのブループリントは、ここではハブアカウントと呼ばれる AWS アカウントに保存されます。ブループリントは Service Catalog 製品の形式で保存されます。他の Service Catalog 製品と区別するために、この製品をブループリントと呼びます。Service Catalog 製品の作成方法の詳細については、「AWS Service Catalog 管理者ガイド」の「製品の作成」を参照してください。

注記

AWS Control Tower にはプロアクティブコントロールが含まれており、AWS Control Tower で CloudFormation リソースを監視します。オプションで、これらのコントロールをランディングゾーンでアクティブ化できます。プロアクティブコントロールを適用すると、アカウントにデプロイするリソースが組織のポリシーと手順に準拠しているかどうかがチェックされます。プロアクティブコントロールの詳細については、「Proactive controls」を参照してください。

AFC との連携の詳細については、「Automate account customization using Account Factory Customization in AWS Control Tower」(AWS Control Tower の Account Factory Customization を使ったアカウントのカスタマイズの自動化) を参照してください。

前提条件

カスタマイズされたアカウントの作成を AWS Control Tower の Account Factory を使用して開始する前に、AWS Control Tower のランディングゾーン環境をデプロイし、新しく作成したアカウントを配置する組織単位 (OU) を AWS Control Tower に登録しておく必要があります。

カスタマイズの準備
  • ハブアカウントを指定する: ハブアカウントとして機能する新しいアカウントを作成することも、既存の AWS アカウント アカウントを使用することもできます。AWS Control Tower 管理アカウントをブループリントハブアカウントとしては使用しないことを強くお勧めします。

  • : を AWS Control Tower に AWS アカウント を登録してカスタマイズする予定の場合は、AWS Control Tower に登録する他のアカウントと同様に、まずそれらのアカウントに AWSControlTowerExecution ロールを追加する必要があります。

  • パートナーのブループリントの設定 (オプション): マーケットプレイスサブスクリプション要件を持つパートナーのブループリントを使用する予定の場合は、これらのブループリントを AWS Control Tower 管理アカウントから設定した後に Account Factory Customization ブループリントとしてデプロイする必要があります。

注記

AWS Control Tower アカウントごとに 1 つのブループリントをデプロイできます。

Account Factory Customizations (AFC) に関する考慮事項

  • AFC は、単一の AWS Service Catalog ブループリント製品のみを使用したカスタマイズをサポートします。

  • AWS Service Catalog ブループリント製品はハブアカウント、および AWS Control Tower のランディングゾーンのホームリージョンと同じリージョンで作成される必要があります。

  • AWSControlTowerBlueprintAccess IAM ロールは、適切な名前、権限、信頼ポリシーを使用して作成する必要があります。

  • AWS Control Tower は、ホームリージョンのみにデプロイするか、またはAWS Control Tower によって管理されているすべてのリージョンにデプロイするかという 2 つのブループリントのデプロイオプションをサポートしています。リージョンの選択はできません。

  • メンバーアカウントのブループリントを更新するとき、ブループリントハブアカウント ID と AWS Service Catalog ブループリント製品を変更することはできません。

  • AWS Control Tower では、1 回のブループリント更新操作で既存のブループリントの削除と新しいブループリントの追加を同時に行うことはできません。ブループリントを削除してから、別の操作で新しいブループリントを追加できます。

  • AWS Control Tower は、作成または登録するアカウントがカスタマイズされているか、またはカスタマイズされていないかに基づいて動作を変更します。カスタマイズされたアカウントをブループリントを使用して作成または登録しない場合、AWS Control Tower は AWS Control Tower 管理アカウントで (Service Catalog を通じて)、Account Factory によってプロビジョニングされた製品を作成します。ブループリントを使用してアカウントを作成または登録する際にカスタマイズを指定する場合は、AWS Control Tower は AWS Control Tower 管理アカウントで、Account Factory でプロビジョニングされた製品を作成しません。

ブループリントエラーが発生した場合

ブループリントの適用中のエラー

新しいアカウント、または AWS Control Tower に登録している既存のアカウントのいずれの場合も、ブループリントをアカウントに適用する過程でエラーが発生した場合の復旧手順は同じです。アカウントは存在したままですが、カスタマイズされず、AWS Control Tower に登録されていません。続行するには、次の手順に従って、AWS Control Tower にアカウントを登録し、登録時にブループリントを追加します。

AWSControlTowerBlueprintAccess ロール作成中のエラーと回避策

AWS Control Tower アカウントから AWSControlTowerBlueprintAccess ロールを作成する場合、AWSControlTowerExecution ロールを使用してプリンシパルとしてサインインする必要があります。他のユーザーとしてサインインすると、次のアーティファクトに示すように、CreateRole オペレーションは SCP によって妨げられます。

{ "Condition": { "ArnNotLike": { "aws:PrincipalArn": [ "arn:aws:iam::*:role/AWSControlTowerExecution", "arn:aws:iam::*:role/stacksets-exec-*" ] } }, "Action": [ "iam:AttachRolePolicy", "iam:CreateRole", "iam:DeleteRole", "iam:DeleteRolePermissionsBoundary", "iam:DeleteRolePolicy", "iam:DetachRolePolicy", "iam:PutRolePermissionsBoundary", "iam:PutRolePolicy", "iam:UpdateAssumeRolePolicy", "iam:UpdateRole", "iam:UpdateRoleDescription" ], "Resource": [ "arn:aws:iam::*:role/aws-controltower-*", "arn:aws:iam::*:role/*AWSControlTower*", "arn:aws:iam::*:role/stacksets-exec-*" ], "Effect": "Deny", "Sid": "GRIAMROLEPOLICY" }

以下の回避策を使用できます。

  • (最も推奨)AWSControlTowerExecution ロールを継承して、AWSControlTowerBlueprintAccess ロールを作成します。この回避策を選択した場合、リソースの意図しない変更を防ぐために、ロールの作成後すぐに AWSControlTowerExecution ロールからサインアウトしてください。

  • AWS Control Tower に登録されていないため、この SCP の対象ではないアカウントにサインインします。

  • この SCP を一時的に編集して、オペレーションを許可します。

  • (あまり推奨しない) AWS Control Tower 管理アカウントをハブアカウントとして使用すると、SCP の対象になりません。

CloudFormation に基づく AFC ブループリント用のポリシードキュメントのカスタマイズ

Account Factory を使用してブループリントを有効にすると、AWS Control Tower ではユーザーに代わって StackSet を作成するように CloudFormation に指示します。CloudFormation は、StackSet で CloudFormation スタックを作成するために、管理アカウントへのアクセスを要求します。CloudFormation は AWSControlTowerExecution ロールを通じて管理アカウントにすでに管理者権限を持っていますが、このロールは CloudFormation に継承されません。

ブループリントの有効化の一環として、AWS Control Tower によってメンバーアカウントにロールが作成されます。このロールは CloudFormation によって継承され、StackSet の管理タスクが完了する場合があります。Account Factory を使用してカスタマイズ済みブループリントを有効にする最も簡単な方法は、allow-all ポリシーを使用することです。このようなポリシーはすべてのブループリントテンプレートと互換性があるためです。

ただし、ベストプラクティスでは、ターゲットアカウントで CloudFormation の権限を制限する必要があります。カスタマイズされたポリシーを指定できますが、このポリシーは、AWS Control Tower によって作成されて CloudFormation が使用するロールに適用されます。例えば、ブループリントによって something-important という名前の SSM パラメータが作成された場合、次のポリシーを指定できます。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowCloudFormationActionsOnStacks", "Effect": "Allow", "Action": "cloudformation:*", "Resource": "arn:aws:cloudformation:*:*:stack/*" }, { "Sid": "AllowSsmParameterActions", "Effect": "Allow", "Action": [ "ssm:PutParameter", "ssm:DeleteParameter", "ssm:GetParameter", "ssm:GetParameters" ], "Resource": "arn:*:ssm:*:*:parameter/something-important" } ] }

AllowCloudFormationActionsOnStacks ステートメントはすべての AFC カスタムポリシーで必須です。CloudFormation はこのロールを使用してスタックインスタンスを作成します。このため、スタックに対して CloudFormation アクションを実行する権限が必要となります。AllowSsmParameterActions セクションは、有効になっているテンプレートに固有です。

権限に関する問題の解決

制限付きポリシーを使用してブループリントを有効にするとき、ブループリントを有効にする権限が不足していることがあります。このような問題を解決するには、ポリシードキュメントを改訂し、修正されたポリシーを使用するようにメンバーアカウントのブループリント設定を更新します。ポリシーがブループリントを有効にするのに十分な権限を備えていることを確認するには、CloudFormation アクセス許可が付与されていること、およびそのロールを使用してスタックを直接作成できることを確認します。

Terraform ベースの Service Catalog 製品の作成に必要な追加のアクセス許可

AFC 用の Terraform 設定ファイルで AWS Service Catalog External 製品を作成する場合、AWS Service Catalog では、テンプレートで定義されたリソースを作成するために必要なアクセス許可に加えて、特定のアクセス許可を AFC カスタム IAM ポリシーに追加する必要があります。デフォルトのフル Admin ポリシーを選択した場合は、これらの追加のアクセス許可を追加する必要はありません。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Action": [ "resource-groups:CreateGroup", "resource-groups:ListGroupResources", "resource-groups:DeleteGroup", "resource-groups:Tag" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "tag:GetResources", "tag:GetTagKeys", "tag:GetTagValues", "tag:TagResources", "tag:UntagResources" ], "Resource": "*", "Effect": "Allow" }, { "Action": "s3:GetObject", "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "s3:ExistingObjectTag/servicecatalog:provisioning": "true" } } } ] }

AWS Service Catalog での External 製品タイプを使用した Terraform 製品作成の詳細については、「Service Catalog 管理者ガイド」の「ステップ 5: 起動ロールの作成」を参照してください。

AWS Service Catalog External 製品タイプへの移行

AWS Service Catalog は、サポートの対象を Terraform オープンソース製品およびプロビジョニングされた製品から、External という新しい製品タイプに変更しました。この移行の詳細については、「AWS Service Catalog 管理者ガイド」の「既存の Terraform オープンソース製品およびプロビジョニングされた製品から External 製品タイプへの更新」を参照してください。

この変更は、AWS Control Tower アカウントファクトリーのカスタマイズを使用して作成または登録した既存のアカウントに影響します。これらのアカウントを External 製品タイプに移行するには、AWS Service Catalog と AWS Control Tower の両方で変更を行う必要があります。

新しい External 製品タイプに移行するには
  1. AWS Service Catalog の既存の Terraform リファレンスエンジンをアップグレードして、ExternalTerraform オープンソースの両方の製品タイプのサポートを含めます。Terraform Reference Engine の更新方法については、AWS Service Catalog GitHub リポジトリを参照してください。

  2. AWS Service Catalog で、新しい External 製品タイプを使用した複製により、すべての既存の Terraform オープンソース製品 (ブループリント) を複製します。既存の Terraform Open Source ブループリントを削除しないでください

  3. AWS Control Tower で、Terraform オープンソースブループリントを使用している各アカウントを更新し、新しい External ブループリントを使用するようにします。

    1. ブループリントを更新するには、まず Terraform オープンソースブループリントを完全に削除する必要があります。詳細については、「アカウントからブループリントを削除する」を参照してください。

    2. 新しい External ブループリントを同じアカウントに追加します。詳細については、「ブループリントを AWS Control Tower アカウントに追加する」を参照してください。

  4. Terraform オープンソースブループリントを使用するすべてのアカウントが External ブループリントに更新されたら、AWS Service Catalog に戻り、Terraform オープンソースを製品タイプとして使用しているすべての製品を終了します。

  5. 今後、AWS Control Tower アカウントファクトリーのカスタマイズを使用して作成または登録するすべてのアカウントは、CloudFormation または External 製品タイプを使用するブループリントを参照する必要があります。

    External 製品タイプを使用して作成したブループリントの場合、AWS Control Tower は Terraform テンプレートと Terraform リファレンスエンジンを使用するアカウントのカスタマイズのみをサポートします。詳細については、「カスタマイズのための設定」を参照してください。

注記

AWS Control Tower は、新しいアカウントの作成時に Terraform オープンソースを製品タイプとしてサポートしていません。これらの変更の詳細については、「AWS Service Catalog 管理者ガイド」の「既存の Terraform オープンソース製品およびプロビジョニングされた製品から External 製品タイプへの更新」を参照してください。AWS Service Catalog は、必要に応じて、この製品タイプの移行に関してお客様をサポートします。アカウント担当者を通じて支援をリクエストしてください。