

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# クラウド基盤
<a name="cloudfoundations-pattern-list"></a>

**Topics**
+ [で Landing Zone Accelerator を使用してアカウントの作成を自動化する AWS](automate-account-creation-lza.md)
+ [複数のアカウントとリージョンの AWS リソースを自動的にインベントリする](automate-aws-resource-inventory.md)
+ [MongoDB Atlas を含む AWS ランディングゾーンを構築する](build-aws-landing-zone-that-includes-mongodb-atlas.md)
+ [全体の一元化のために VPC フローログを設定する AWS アカウント](configure-vpc-flow-logs-for-centralization-across-aws-accounts.md)
+ [Terraform を使用して AWS アクセス許可セットを動的に管理する](manage-aws-permission-sets-dynamically-by-using-terraform.md)
+ [AWS Organizations を使用して Transit Gateway アタッチメントに自動的にタグを付ける](tag-transit-gateway-attachments-automatically-using-aws-organizations.md)
+ [その他のパターン](cloudfoundations-more-patterns-pattern-list.md)

# で Landing Zone Accelerator を使用してアカウントの作成を自動化する AWS
<a name="automate-account-creation-lza"></a>

*Amazon Web Services、Justin Kuskowski、Joe Behrens、Nathan Scott*

## 概要
<a name="automate-account-creation-lza-summary"></a>

このパターンでは、[Landing Zone Accelerator on AWS](https://aws.amazon.com/solutions/implementations/landing-zone-accelerator-on-aws/) ソリューションを使用して、承認されたユーザーがリクエストを送信 AWS アカウント したときに新しい を自動的にデプロイする方法について説明します。を使用して、多数の AWS Lambda 関数をオーケストレーション AWS Step Functions します。Lambda 関数は、アカウント情報を Git リポジトリに追加し、 AWS CodePipeline パイプラインを開始し、必要な AWS リソースがプロビジョニングされていることを確認します。このプロセスが完了すると、アカウントが作成されたことを知らせる通知がユーザーに届きます。

必要に応じて、Microsoft Entra ID グループを統合し、アカウント作成プロセス中に AWS IAM アイデンティティセンター アクセス許可セットを割り当てることができます。組織で Microsoft Entra ID を ID ソースとして使用している場合、この方法は、新規アカウントへのアクセスを自動的に管理したり設定したりするのに役立ちます。

## 前提条件と制限
<a name="automate-account-creation-lza-prereqs"></a>

**前提条件**
+ の管理アカウントへのアクセス AWS Organizations
+ AWS Cloud Development Kit (AWS CDK) バージョン 2.118.0 以降、[インストール](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_install)および[設定](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_configure)済み
+ Python バージョン 3.9 以降が[インストールされている](https://www.python.org/downloads/)
+ AWS Command Line Interface (AWS CLI) バージョン 2.13.19 以降、[インストール](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)済み
+ Docker バージョン 24.0.6 以降が[インストールされている](https://docs.docker.com/get-started/get-docker/)
+ 管理アカウントに[デプロイ](https://docs.aws.amazon.com/solutions/latest/landing-zone-accelerator-on-aws/deploy-the-solution.html)された Landing Zone Accelerator on AWS ソリューション
+ (オプション) Microsoft Entra ID と IAM Identity Center が[統合されている](https://docs.aws.amazon.com/singlesignon/latest/userguide/idp-microsoft-entra.html)

**制限事項**

このアカウント作成のワークフローは、単一の AWS アカウントをデプロイするシーケンシャル実行に対応しています。この制限を設けることにより、アカウント作成のワークフローを、並列実行中にリソースを競合させることなく正常に完了できます。

## アーキテクチャ
<a name="automate-account-creation-lza-architecture"></a>

**ターゲットアーキテクチャ**

次の図は、Landing Zone Accelerator on AWS. AWS Step Functions orchestrates AWS アカウント を使用して新しい の作成を自動化する高レベルのアーキテクチャを示しています。Step Functions ワークフローの各タスクは、1 つ以上の AWS Lambda 関数によって実行されます。

![\[Landing Zone Accelerator on AWS を使用して新規アカウントの作成を自動化するワークフロー\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/d31abfaa-6854-4923-b896-3b817de9f4d9/images/dfd6503d-a4ed-43df-82d4-082f8153d473.png)


この図表は、次のワークフローを示しています:

1. ユーザーは、Python スクリプトを実行するか、Amazon API Gateway を使用してアカウントをリクエストします。

1. アカウント作成オーケストレーターのワークフローは、 AWS Step Functionsから始まります。

1. このワークフローはソースコードリポジトリの `account-config.yaml` ファイルを更新します。また、ランディングゾーンアクセラレーターを AWS パイプラインで開始し、パイプラインのステータスを確認します。このパイプラインは、新しいアカウントを作成し設定します。この仕組みの詳細については、Landing Zone Accelerator on AWSの「[Architecture overview](https://docs.aws.amazon.com/solutions/latest/landing-zone-accelerator-on-aws/architecture-overview.html)」を参照してください。

1. (オプション) パイプラインが完了すると、ワークフローは Microsoft Entra ID にグループが存在するかどうかをチェックします。グループが Microsoft Entra ID に存在しない場合、ワークフローは Microsoft Entra ID にグループを追加します。

1. ワークフローは、Landing Zone Accelerator on AWS ソリューションでは実行できない追加のステップを実行します。デフォルトのステップは次のとおりです。
   +  AWS Identity and Access Management (IAM) [でのアカウントエイリアス](https://docs.aws.amazon.com/IAM/latest/UserGuide/console-account-alias.html)の作成
   + のアカウントに[タグ](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_tagging.html)をアタッチする AWS Organizations
   + アカウントに割り当てられたタグに基づいて [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) にパラメータを作成する

1. (オプション) ワークフローは、前に指定した Microsoft Entra ID グループに 1 つ以上の[アクセス許可セット](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetsconcept.html)を割り当てます。アクセス許可セットがあることにより、グループのユーザーは新規アカウントにアクセスし、設定したアクションを実行することができます。

1.  AWS Lambda 関数は QA テストと検証テストを実行します。リソースの作成を検証し、タグが作成されたことを確認し、セキュリティリソースがデプロイされたことを検証します。

1. ワークフローはアカウントを解放し、Amazon Simple Email Service (Amazon SES) を使用してプロセスが正常に完了したことをユーザーに通知します。

Step Functions ワークフローの詳細については、このパターン内の「[追加情報](#automate-account-creation-lza-additional)」セクションにある *Step Functions のワークフロー図*を参照してください。

**Microsoft Entra ID アプリケーション**

Microsoft Entra ID と統合させる場合は、このパターンをデプロイする際に次の 2 つのアプリケーションを作成します。
+ IAM アイデンティティセンターにリンクされている、Microsoft Entra ID グループを IAM アイデンティティセンターで利用可能にするアプリケーション。この例では、この Microsoft Entra ID アプリケーションの名前は `LZA2` です。
+ Lambda 関数が Microsoft Entra ID と通信し [Microsoft Graph API](https://learn.microsoft.com/en-us/graph/identity-network-access-overview) を呼び出すことを許可するアプリケーション。このパターンでは、このアプリケーションの名前は `create_aws_account` です。

これらのアプリケーションは、Microsoft Entra ID グループを同期し、アクセス許可セットを割り当てる際に使用されるデータを収集します。

## ツール
<a name="automate-account-creation-lza-tools"></a>

**AWS のサービス**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) は、任意のスケールで REST、HTTP、WebSocket API を作成、公開、維持、監視、保護する上で役立ちます。このパターンでは、API Gateway を使用して AWS アカウント 名前の可用性を確認し、 AWS Step Functions ワークフローを開始し、Step Functions 実行のステータスを確認します。
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html) は、コードで AWS クラウド インフラストラクチャを定義およびプロビジョニングするのに役立つソフトウェア開発フレームワークです。
+ [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html) は、規範的なベストプラクティスに従って、 AWS マルチアカウント環境のセットアップと管理に役立ちます。
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) は、アプリケーションをさまざまなソースのリアルタイムデータに接続できるようにするサーバーレスイベントバスサービスです。例えば、 AWS Lambda 関数、API 送信先を使用する HTTP 呼び出しエンドポイント、その他のイベントバスなどです AWS アカウント。このソリューションでは、Step Functions ワークフローの状態が `Failed`、`Timed-out`、`Aborted` のいずれかに変わった場合に Lambda 関数を開始する、[EventBridge ルール](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html)を使用します。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) は、誰を認証し、誰に使用を認可するかを制御することで、 AWS リソースへのアクセスを安全に管理するのに役立ちます。
+ [AWS IAM アイデンティティセンター](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html) を使用すると、すべての AWS アカウント およびクラウドアプリケーションへのシングルサインオン (SSO) アクセスを一元管理できます。
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) は、データの保護に役立つ暗号化キーの作成と制御に役立ちます。このパターンでは、Amazon Simple Storage Service (Amazon S3) に保存されているデータ、Lambda 環境変数、Step Functions のデータなどのデータを暗号化するために AWS KMS キーが使用されます。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) は、作成して一元管理する AWS アカウント 組織に複数の を統合するのに役立つアカウント管理サービスです。
+ [Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/ses/latest/dg/Welcome.html) は、独自の E メールアドレスとドメインを使用して E メールを送受信するのに役立ちます。新規アカウントが正常に作成されると、Amazon SES からユーザーに通知が届きます。
+ [Amazon Simple Notiﬁcation Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) は、ウェブサーバーやメールアドレスなど、パブリッシャーとクライアント間のメッセージの交換を調整および管理するのに役立ちます。アカウント作成のプロセス中にエラーが発生すると、Amazon SNS はユーザーが設定した E メールアドレスに通知を送信します。
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) は、 AWS Lambda 関数やその他の を組み合わせてビジネスクリティカルなアプリケーション AWS のサービス を構築するのに役立つサーバーレスオーケストレーションサービスです。
+ [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) は、設定データ管理とシークレット管理のための安全な階層型ストレージを提供します。

**その他のツール**
+ [awscurl](https://pypi.org/project/awscurl/0.6/) は AWS API リクエストの署名プロセスを自動化し、標準の curl コマンドとしてリクエストを行うのに役立ちます。
+ [Microsoft Entra ID](https://learn.microsoft.com/en-us/entra/fundamentals/whatis) (旧 *Azure Active Directory*) は、クラウドベースの ID およびアクセス管理のサービスです。
+ [Microsoft Graph API](https://learn.microsoft.com/en-us/graph/graph-explorer/graph-explorer-overview) を使用すると、Microsoft Entra や Microsoft 365 など Microsoft のクラウドサービスのデータやインテリジェンスにアクセスすることができます。

**コードリポジトリ**

このパターンのコードは、GitHub の [lza-account-creation-workflow](https://github.com/aws-samples/lza-account-creation-workflow) リポジトリで使用できます。

[lambda\$1layer](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_layer) ディレクトリには、複数の Lambda 関数で参照される次のレイヤーが含まれています。
+ [account\$1creation\$1helper](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_layer/account_creation_helper) – このレイヤーには、ロールを引き受け、進行状況をチェックするためのモジュールが含まれています AWS Service Catalog。
+ [boto3](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_layer/boto3) – このレイヤーには、 に AWS Lambda 最新バージョンがあることを確認する[AWS SDK for Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)モジュールが含まれています。
+ [identity\$1center\$1helper](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_layer/identity_center_helper) – このレイヤーは IAM アイデンティティセンターへの呼び出しをサポートします。

[lambda\$1src](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src) ディレクトリには、次の Lambda 関数が含まれています。
+ [AccountTagToSsmParameter](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/event/AccountTagToSsmParameter) – この関数は、Parameter Store でパラメータを作成 AWS Organizations するために、アカウントにアタッチされたタグを使用します。各パラメータは、プレフィックス `/account/tags/` から始まります。
+ [AttachPermissionSet](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/stepfunction/AttachPermissionSet) – この関数は、IAM Identity Center グループにアクセス権限セットを追加します。
+ [AzureADGroupSync](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/stepfunction/AzureADGroupSync) – この関数は、ターゲットの Microsoft Entra ID グループを IAM アイデンティティセンターに同期します。
+ [CheckForRunningProcesses](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/stepfunction/CheckForRunningProcesses) – この関数は、`AWSAccelerator-Pipeline` パイプラインが実行中かどうかをチェックします。パイプラインが実行されている場合、関数は AWS Step Functions ワークフローを遅延させます。
+ [CreateAccount](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/stepfunction/CreateAccount) – この関数は AWS Service Catalog と AWS Control Tower を使用して新しい を作成します AWS アカウント。
+ [CreateAdditionalResources](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/stepfunction/CreateAdditionalResources) – この関数は、Landing Zone Accelerator によって管理されていない AWS リソース、またはアカウントのエイリアスや AWS Service Catalog タグ AWS CloudFormationなどのリソースを作成します。
+ [GetAccountStatus](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/stepfunction/GetAccountStatus) – この関数は、 でプロビジョニングされた製品をスキャンし AWS Service Catalog て、アカウント作成プロセスが完了したかどうかを判断します。
+ [GetExecutionStatus](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/api/GetExecutionStatus) – この関数は、実行中または完了した AWS Step Functions 実行のステータスを取得します。
+ [NameAvailability](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/api/NameAvailability) – この関数は、 AWS アカウント 名前がすでに存在するかどうかを確認します AWS Organizations。
+ [ReturnResponse](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/stepfunction/ReturnResponse) – アカウントの作成が完了すると、この関数が新規アカウントの ID を返します。アカウントの作成が完了していない場合はエラーメッセージが返されます。
+ [RunStepFunction](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/api/RunStepFunction) – この関数は、アカウントを作成する AWS Step Functions ワークフローを実行します。
+ [SendEmailWithSES](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/stepfunction/SendEmailWithSES) – この関数は、アカウントの作成が終わるのを待っているユーザーに E メールを送信します。
+ [ValidateADGroupSyncToSSO](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/stepfunction/ValidateAdGroupSyncToSSO) – この関数は、指定された Microsoft Entra ID グループが IAM アイデンティティセンターと同期されているかどうかをチェックします。
+ [ValidateResources](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/stepfunction/ValidateResources) – この関数は、すべての AWS Control Tower カスタマイズが正常に実行されたことを検証します。

## ベストプラクティス
<a name="automate-account-creation-lza-best-practices"></a>

 AWS CDKには、次の命名規則が推奨されます。 
+ すべてのパラメータをプレフィックス `p` から開始する。
+ すべての条件をプレフィックス `c` から開始する。
+ すべてのリソースをプレフィックス `r` から開始する。
+ すべての出力をプレフィックス `o` から開始する。

## エピック
<a name="automate-account-creation-lza-epics"></a>

### 検証とタグ付けのために IAM ロールをデプロイする
<a name="deploy-the-iam-roles-for-validation-and-tagging"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| の Landing Zone Accelerator をカスタマイズ AWS する準備をします。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | AWS DevOps | 
| `lza-account-creation-validation` ロールのデプロイを準備する | 次に、ソリューションをカスタマイズして、管理アカウント以外のすべてのアカウントに `lza-account-creation-validation` IAM ロールをデプロイします。このロールは、`ValidateResources` Lambda 関数に、新規アカウントへの読み取り専用アクセスを付与します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | AWS DevOps | 
| `account-tagging-to-ssm-parameter-role` ロールのデプロイを準備する | 次に、ソリューションをカスタマイズして、管理アカウント以外のすべてのアカウントに `account-tagging-to-ssm-parameter-role` IAM ロールをデプロイします。このロールは、Parameter Store AWS Systems Manager でパラメータを作成するために使用されます。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | AWS DevOps | 
| `config-log-validation-role` ロールのデプロイを準備する | 次に、ソリューションをカスタマイズして、`config-log-validation-role` IAM ロールをログアーカイブアカウントにデプロイします。このロールにより、`ValidateResources`Lambda 関数はログ記録とアクセス AWS Config ルールのために Amazon S3 バケットにアクセスできます。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | AWS DevOps | 

### (オプション) Microsoft Entra ID からデータを取得する
<a name="optional-get-data-from-microsoft-entra-id"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Lambda 関数に Microsoft Entra ID との通信を許可するアプリケーションを作成する。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | Microsoft Entra ID | 
| `create_aws_account` アプリケーションの値を取得する。 | 次に、`create_aws_account` アプリケーションに必要な値を取得します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | Microsoft Entra ID | 
| Microsoft Entra ID を IAM アイデンティティセンターと統合するアプリケーションを作成する。 | Microsoft Entra ID 管理センターで、`LZA2` アプリケーションを登録します。手順は、Microsoft ドキュメントの「[Register an application](https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-register-app)」を参照してください。 | Microsoft Entra ID | 
| `LZA2` アプリケーションの値を取得する。 | 次に、`LZA2` アプリケーションに必要な値を取得します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | Microsoft Entra ID | 
| シークレットを作成します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | AWS DevOps | 

### 解決策をデプロイする
<a name="deploy-the-solution"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ソースコードを複製します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | DevOps エンジニア | 
| `deploy-config.yaml` ファイルを更新します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | AWS DevOps | 
| ソリューションを AWS 環境にデプロイします。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html)このソリューションでは、Amazon S3 バケットを使用してこのソリューションのソースコードを保存します。[upload\$1to\$1source\$1bucket.py](https://github.com/aws-samples/gen-ai-trivia/blob/main/scripts/upload_to_source_bucket.py) スクリプトを使用すれば、ソースコードのアーカイブを作成して更新したバージョンをアップロードできます。 | AWS DevOps | 

### オプション 1 – Python を使用してアカウントを作成する
<a name="option-1-create-an-account-using-python"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 使用する引数を特定する。 | Step Functions のワークフローを開始する Python スクリプトを実行するときに使用する引数を選択します。引数の一覧については、本パターン内の「[追加情報](#automate-account-creation-lza-additional)」のセクションを参照してください。 | AWS DevOps、Python | 
| Python スクリプトを実行する。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | DevOps エンジニア、Python | 

### オプション 2 – API Gateway と awscurl を使用してアカウントを作成する
<a name="option-2-create-an-account-using-api-gateway-and-awscurl"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| awscurl の変数を設定します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | AWS DevOps | 
| 名前を使用できるかどうかチェックします。 | 次のコマンドを入力して、この名前を AWS アカウントに使用できるか確認します。`<AWS_ACCOUNT_NAME>` をターゲットアカウントの名前に置き換えます。<pre>awscurl --service execute-api \<br />    --region ${AWS_REGION} \<br />    --access_key ${AWS_ACCESS_KEY_ID} \<br />    --secret_key ${AWS_SECRET_ACCESS_KEY} \<br />    --security_token ${AWS_SESSION_TOKEN} \<br />    -X POST ${API_GATEWAY_ENDPOINT}check_name?account_name=<AWS_ACCOUNT_NAME></pre> | AWS DevOps | 
| アカウント作成のワークフローを実行します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | AWS DevOps | 

### (オプション) ソリューションをクリーンアップする
<a name="optional-clean-up-the-solution"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Amazon S3 バケットからオブジェクトを削除します。 | 次の Amazon S3 バケット内にオブジェクトがあれば削除します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | AWS DevOps | 
| CloudFormation スタックを削除します。 | 次の コマンドを実行して CloudFormation スタックを削除します。<pre>aws cloudformation delete-stack \<br />  --stack-name lza-account-creation-workflow-application<br />aws cloudformation wait stack-delete-complete \<br />  --stack-name lza-account-creation-workflow-application</pre> | AWS DevOps | 
| パイプラインを削除します。 | 次のコマンドを入力して `lza-account-creation-workflow-pipeline` パイプラインを削除します。<pre>cdk destroy lza-account-creation-workflow-pipeline --force</pre> | AWS DevOps  | 

## 関連リソース
<a name="automate-account-creation-lza-resources"></a>
+ [でのランディングゾーンアクセラレータ AWS](https://aws.amazon.com/solutions/implementations/landing-zone-accelerator-on-aws/)ー (AWS ソリューションライブラリ)
+ [一般的な AWS CDK 問題のトラブルシューティング](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html) (AWS CDK ドキュメント)

## 追加情報
<a name="automate-account-creation-lza-additional"></a>

**Step Functions のワークフロー図**

次の図は、Step Functions のワークフローで実行される手順を示したものです。

![\[Step Functions ワークフローの状態\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/d31abfaa-6854-4923-b896-3b817de9f4d9/images/d93aa7bf-1144-4f25-9488-aacc534a7813.png)


**引数**

以下は、Step Functions ワークフローを開始する Python スクリプトを実行するときに使用できる引数です。

以下の引数が必要です。
+ `account-name (-a)` (文字列) – 新しい の名前 AWS アカウント。
+ `support-dl (-s)` (文字列) – アカウント作成プロセスが完了したときに通知を受信する E メールアドレス。
+ `managed-org-unit (-m)` (文字列) – 新規アカウントを含むマネージド[組織単位 (OU)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#organizationalunit)。

以下の引数はオプションです。
+ `ad-integration (-ad)` (文字列ディクショナリ) – Microsoft Entra ID グループと割り当てられたアクセス許可セット。以下は、このコマンドの使用方法の例です。

  ```
  --ad-integration "{\"<PermissionSetName>\": \"<EntraIdGroupName>\"}"
  ```
+ `account-email (-e)`** **(文字列) – 新しい のルートユーザーの E メールアドレス AWS アカウント。
**注記**  
この引数を使用しないと、E メールアドレスは `configs/deploy-config.yaml` ファイルから `rootEmailPrefix` と `rootEmailDomain` の値を使用して生成されます。E メールアドレスが指定されていない場合、E メールアドレスは `rootEmailPrefix+accountName@rootEmailDomain` の形式を使用して生成されます。
+ `region (-r)` (文字列) – Step Functions ワークフロー AWS リージョン がデプロイされた 。デフォルト値は `us-east-1` です。
+ `force-update (-f)` (文字列ブール値) – `true`を入力して、プロビジョニング済み製品の更新 AWS Service Catalog を強制します。
+ `bypass-creation (-b)` (文字列ブール値) – `true` を入力して `accounts-config.yaml` ファイルへのアカウントの追加を回避し、`AWSAccelerator-Pipeline` パイプラインの実行を回避します。この引数は、通常、アカウント作成ワークフロープロセスをテストしたり、`Landing Zone Accelerator` パイプラインでエラーが発生した場合に残りの Step Functions ステップを実行したりするために使用されます。
+ `tags (-t)` (文字列) – に追加する追加のタグ AWS アカウント。デフォルトでは `account-name`、`support-dl`、`purpose` のタグが追加されます。以下は、このコマンドの使用方法の例です。

  ```
  --tags TEST1=VALUE1 TEST2=VALUE2
  ```

# 複数のアカウントとリージョンの AWS リソースを自動的にインベントリする
<a name="automate-aws-resource-inventory"></a>

*Amazon Web Services、Matej Macek*

## 概要
<a name="automate-aws-resource-inventory-summary"></a>

このパターンは、複数のアカウントと の AWS リソースの包括的なインベントリを維持するための自動化されたアプローチの概要を示しています AWS リージョン。このアプローチは、インフラストラクチャエンジニアとセキュリティエンジニアがリソース管理プラクティスを改善できるように設計されています。を使用して AWS Config 、リソースの変更、クエリ用の Amazon Athena、インタラクティブダッシュボード用の Amazon Quick Sight を追跡します。このソリューションを実装するには、 AWS CloudFormation スタックをデプロイします。

このソリューションは、[Amazon Athena と Amazon Quick Sight を使用した AWS Config データの視覚化](https://aws.amazon.com/blogs/mt/visualizing-aws-config-data-using-amazon-athena-and-amazon-quicksight/)」(AWS ブログ記事) で説明されているものと似ています。こちらのパターンでは、このソリューションを拡大して以下の一般的な要件に対応し、以下のようなメリットをもたらします。
+ **コンプライアンスに重点を置く** – このアプローチは、[PCI DSS](https://www.pcisecuritystandards.org/)、[NIST SP 800-53](https://csrc.nist.gov/pubs/sp/800/53/r5/upd1/final)、[ISO/IEC 27001](https://www.iso.org/standard/27001)、[HIPAA](https://www.hhs.gov/programs/hipaa/index.html)、[GDPR](https://gdpr.eu/)、および、正確なアセットインベントリを義務付けるその他の規制要件を満たすのに役立ちます。
+ **カスタマイズフレームワーク** – さまざまな AWS リソースの Quick Sight ダッシュボードを作成するための基盤を提供し、特定の要件に合わせてソリューションをカスタマイズできます。
+ **ユーザー主導の強化** – このアプローチでは、実際のユースケースから得られたフィードバックを取り入れ、より包括的なソリューションのリクエストに対処します。

インフラストラクチャ、セキュリティ、財務の各チームは、ダイナミックな環境、マルチアカウント環境、またはマルチリージョン環境で、可視化とコラボレーションの問題に直面することがよくあります。このソリューションは、これらの課題に対処し、リソースインベントリの作成と維持に必要な時間と労力を大幅に削減できるように設計されています。その結果、リソースの割り当てに関連した意思決定の改善、リスクの特定と軽減、コストの最適化、全体的な可視性とコラボレーションの向上に役立つ、リソースの一元的なビューが手に入ります。このアプローチを取り入れることで、セキュリティ、コンプライアンス、運用上の目的における概念的なソリューションと実際の実装ニーズとのギャップを埋めることができます。

## 前提条件と制限
<a name="automate-aws-resource-inventory-prereqs"></a>

**前提条件**
+ 次の有効な AWS アカウント:
  + *管理アカウント* – 請求、アカウントの作成、組織全体のアクセスの制御のための一元化されたアカウント
  + *監査アカウント* – セキュリティモニタリング、コンプライアンスチェック、ドリフト通知のための一元化されたハブ
  + *ログアーカイブアカウント* – 収集されたデータを保存および分析するための一元化されたアカウント
+ 監査アカウントでは、ターゲットアカウントとリージョンから設定データを収集して集計する AWS Config [アグリゲータ](https://docs.aws.amazon.com/config/latest/developerguide/aggregate-data.html) 
+ ログアーカイブアカウントで、以下を設定します。
  + アグリゲータからデータを保存する Amazon Simple Storage Service (Amazon S3) AWS Config [バケット](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) 
  + Amazon Quick [サブスクリプション](https://docs.aws.amazon.com/quicksight/latest/user/signing-up.html)
  + Quick Sight と Amazon Athena 間の[認可された接続](https://docs.aws.amazon.com/quicksight/latest/user/athena.html) 
  + Athena クエリを介して Amazon S3 バケットにアクセスするための[アクセス権限](https://docs.aws.amazon.com/athena/latest/ug/s3-permissions.html)
+ AWS Command Line Interface (AWS CLI)、[インストール](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)および[設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)済み
+ 次のリソースをプロビジョニングする CloudFormation スタックをデプロイするためのアクセス許可。
  +  AWS Lambda 関数
  + Amazon S3 通知設定
  + Athena データベース、テーブル、ビュー
  + Quick Sight データセットとデータソース
+ でオートメーションを実行するアクセス許可 AWS Systems Manager
+ Quick へのアクセス許可

**制限事項**
+ このソリューションは に依存します AWS Config。 AWS Config は通常、変更が検出された直後、または指定した頻度でリソースの設定変更を記録します。ただし、これはベストエフォートベースであり、場合によっては時間がかかることがあります。
+ このソリューションは、 が[AWS Config サポートするリソースタイプ](https://docs.aws.amazon.com/config/latest/developerguide/resource-config-reference.html)のみを追跡します。
+ このソリューションは、他のクラウドプロバイダー、またはオンプレミス環境のリソースインベントリは追跡しません。
+ 一部の AWS のサービス は では使用できません AWS リージョン。リージョンの可用性については、 AWS ドキュメントの[「サービスエンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)」ページを参照して、サービスのリンクを選択します。

## アーキテクチャ
<a name="automate-aws-resource-inventory-architecture"></a>

次の図は、 AWS 組織内の複数のアカウントで設定およびコンプライアンスデータを収集、整理、分析、視覚化するための効率的なプロセスを示しています。

![\[組織全体の設定およびコンプライアンスデータを収集して視覚化。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/67a9667a-da19-4dcb-a2fe-62bc94a0541b/images/c9245de1-ac85-4a9e-a0c0-dbcc27a8bb5d.png)


この図表は、次のワークフローを示しています:

1. ア AWS Config グリゲータは定期的にターゲットアカウントとリージョンのリソースに関する設定とコンプライアンスデータを収集し、ログアーカイブアカウントの Amazon S3 バケットにデータを配信します。

1. Amazon S3 バケットに新しい AWS Config データを追加すると、 AWS Lambda 関数が呼び出されます。

1. Lambda 関数は、各スナップショットファイルのリージョンと日付に対応する値を持つキーを設定することで、データをパーティション化します。これにより、設定とコンプライアンスデータを AWS Glue 効率的にクエリして処理できます。

1. Amazon Athena は AWS Glue [スキーマ](https://docs.aws.amazon.com/glue/latest/dg/schema-registry.html)を使用して、Amazon S3 バケットに保存されているデータに対して SQL クエリを実行します。のスキーマメタデータを使用して AWS Glue 、データの構造を理解します。

1. Athena の[ビュー](https://docs.aws.amazon.com/athena/latest/ug/views.html)は、ターゲットデータセットを定義して抽出します。

1. Quick Sight [のダッシュボード](https://docs.aws.amazon.com/quicksight/latest/user/using-dashboards.html)は、データセットを視覚化および分析するのに役立ちます。

## ツール
<a name="automate-aws-resource-inventory-tools"></a>

**AWS のサービス**
+ 「[Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)」はインタラクティブなクエリサービスで、Amazon S3 内のデータをスタンダード SQL を使用して直接分析できます。
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) は、 AWS リソースの設定、迅速かつ一貫したプロビジョニング、 AWS アカウント および 全体にわたるライフサイクル全体の管理に役立ちます AWS リージョン。
+ [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html) は、 内のリソースの詳細ビュー AWS アカウント と設定方法を提供します。リソースがどのように相互に関連しているか、またそれらの構成が時間の経過とともにどのように変化したかを特定するのに役立ちます。 AWS Config [アグリゲータ](https://docs.aws.amazon.com/config/latest/developerguide/aggregate-data.html)は、複数の およびリージョンから AWS Config 設定 AWS アカウント およびコンプライアンスデータを収集します。
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) は、フルマネージド型の抽出、変換、ロード (ETL) サービスです。これにより、データストアとデータストリーム間でのデータの分類、整理、強化、移動を確実に行うことができます。このパターンでは、 AWS Glue [データカタログ](https://docs.aws.amazon.com/glue/latest/dg/components-overview.html#data-catalog-intro)と[スキーマレジストリ](https://docs.aws.amazon.com/glue/latest/dg/schema-registry.html)を使用します。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) は、作成して一元管理する AWS アカウント 組織に複数の を統合するのに役立つアカウント管理サービスです。
+ [Amazon Quick Sight](https://docs.aws.amazon.com/quicksuite/latest/userguide/quick-bi.html) は、インタラクティブな視覚化、ダッシュボード、レポートを通じて生データを有意義なインサイトに変換するのに役立つビジネスインテリジェンス (BI) サービスです。Quick Sight は Amazon Quick のコアコンポーネントです。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。
+ 「[AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)」は、 AWS クラウドで実行されるアプリケーションとインフラストラクチャの管理に役立ちます。これにより、アプリケーションとリソースの管理が簡素化され、運用上の問題を検出して解決する時間が短縮され、 AWS リソースを大規模に安全に管理できます。[AWS Systems Manager 自動化](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-automation.html)により、多くの の一般的なメンテナンス、デプロイ、修復タスクが簡素化されます AWS のサービス。

**コードリポジトリ**

このパターンの AWS CloudFormation テンプレートは、[AWS Config 視覚化](https://github.com/aws-samples/aws-management-and-governance-samples/blob/master/AWSConfig/AWS-Config-Visualization/README.md) GitHub リポジトリで使用できます。この CloudFormation テンプレートは、Amazon Athena で使用する AWS Config ように を設定する AWS Systems Manager オートメーションランブックをデプロイします。この自動化は、指定された Amazon S3 バケットに接続する準備 AWS Glue をし、Amazon Athena でビューを作成し、ダッシュボードの視覚化のために Quick Sight を設定します。

## ベストプラクティス
<a name="automate-aws-resource-inventory-best-practices"></a>
+  AWS 「 規範ガイダンス」の[「 を使用した安全なマルチアカウント AWS 環境のセットアップと管理 AWS Control Tower](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-aws-environment/welcome.html)」のベストプラクティスに従うことをお勧めします。
+  AWS 組織全体の設定およびコンプライアンスデータを収集する AWS Config アグリゲータを作成することをお勧めします。詳細については、 AWS Config ドキュメントの[「マルチアカウントマルチリージョンデータ集約](https://docs.aws.amazon.com/config/latest/developerguide/aggregate-data.html)」を参照してください。
+ このソリューションをデプロイする前に、[Amazon S3](https://aws.amazon.com/s3/pricing/)、、[AWS Config](https://aws.amazon.com/config/pricing/)[Athena](https://aws.amazon.com/athena/pricing/)、および [Quick](https://aws.amazon.com/quicksight/pricing/) の現在の料金情報を確認することをお勧めします。

## エピック
<a name="automate-aws-resource-inventory-epics"></a>

### CloudFormation スタックをデプロイする
<a name="deploy-the-cfnshort-stack"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| CloudFormation テンプレートをダウンロードします。 | [Config-QuickSight-Visualization-SSM-Automation.yaml](https://github.com/aws-samples/aws-management-and-governance-samples/blob/master/AWSConfig/AWS-Config-Visualization/cft/Config-QuickSight-Visualization-SSM-Automation.yaml) CloudFormation テンプレートをダウンロードします。 | AWS 管理者、クラウド管理者、DevOps エンジニア | 
| CloudFormation テンプレートを変更します。 | この手順は、 を使用して[AWS Control Tower](https://aws.amazon.com/controltower/)いて、 AWS Config によって管理されている場合にのみ実行してください AWS Control Tower。CloudFormation テンプレートを変更する必要があります。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-aws-resource-inventory.html) | DevOps エンジニア、AWS 管理者 | 
| CloudFormation スタックを作成します。 | 「[CloudFormation コンソールからスタックを作成する](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html)」の手順に従います。次の点に注意してください。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-aws-resource-inventory.html) | AWS 管理者、クラウド管理者、DevOps エンジニア | 

### Systems Manager で自動化を実行する
<a name="run-the-automation-in-sys"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| クイックユーザー名を見つけます。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-aws-resource-inventory.html) | AWS 管理者、クラウド管理者、DevOps エンジニア | 
| 配信チャネル名と Amazon S3 バケット名を見つけます。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-aws-resource-inventory.html) | AWS 管理者、クラウド管理者、DevOps エンジニア | 
| Systems Manager で自動化を実行します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-aws-resource-inventory.html) | AWS 管理者、クラウド管理者、DevOps エンジニア | 

### Quick Sight でデータを視覚化する
<a name="visualize-data-in-qsight"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| データを更新します。 | 特定の要件に従ってデータセットの更新をスケジュールするには、「[Refreshing SPICE data](https://docs.aws.amazon.com/quicksight/latest/user/refreshing-imported-data.html)」の手順に従います。 | AWS 管理者、DevOps エンジニア、クラウド管理者 | 
| 分析を作成します。 | リソースを視覚化するのに役立つダッシュボードを Quick Sight で作成するには、[「Quick Sight で分析を開始する](https://docs.aws.amazon.com/quicksuite/latest/userguide/creating-an-analysis.html)」の手順に従います。 | Quick Suite 管理者 | 
| ダッシュボードを作成します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-aws-resource-inventory.html) | Quick Suite 管理者 | 

### (オプション) クリーンアップする
<a name="optional-clean-up"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Systems Manager の自動化によって作成されたリソースを削除します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-aws-resource-inventory.html) | AWS 管理者、クラウド管理者、DevOps エンジニア | 
| CloudFormation スタックを削除します。 | `Config-QuickSight-Visualization-SSM-Automation` スタック内のリソースを削除するには、「[CloudFormation コンソールからスタックを削除する](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)」の手順に従います。 | AWS 管理者、クラウド管理者、DevOps エンジニア | 

## トラブルシューティング
<a name="automate-aws-resource-inventory-troubleshooting"></a>


| 問題 | ソリューション | 
| --- | --- | 
| Amazon Quick は への接続を試みていますが`us-east-1` AWS リージョン、そのリージョンでのリソースの作成は許可されていません。 | サービスコントロールポリシーは、このリージョンでサブスクリプションを Amazon Quick に制限しています。サービスコントロールポリシーで、ターゲットを手動で指定します AWS リージョン。`<REGION_ID>` を適切なリージョン識別子に置き換えます。<pre>https://<REGION_ID>.quicksight.aws.amazon.com/sn/start/dashboards</pre>以下に例を示します。<pre>https://eu-central-1.quicksight.aws.amazon.com/sn/start/dashboards</pre> | 
| Amazon Athena では、次のメッセージが表示されます。`Before you run your first query, you need to set up a query result location in Amazon S3.` | Amazon Athena からのクエリ結果を保存する Amazon S3 バケットが作成されていることを確認します。手順については、「[Amazon Athena コンソールを使用してクエリ結果の場所を指定する](https://docs.aws.amazon.com/athena/latest/ug/query-results-specify-location-console.html)」を参照してください。 | 

## 関連リソース
<a name="automate-aws-resource-inventory-resources"></a>

**AWS ドキュメント**
+ [AWS Config ドキュメント](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html)
+ [Amazon Quick ドキュメント](https://docs.aws.amazon.com/quicksuite/latest/userguide/what-is.html)

**AWS ブログ投稿**
+ [による AWS Config データの視覚化の自動化 AWS Systems Manager](https://aws.amazon.com/blogs/mt/automate-aws-config-data-visualization-with-aws-systems-manager/)
+ [を使用してリソース設定の変更を定期的に記録する方法 AWS Config](https://aws.amazon.com/blogs/mt/how-to-record-resource-configuration-changes-periodically-with-aws-config/)

**その他のリソース**
+ [Amazon Quick Community Learning Center](https://community.amazonquicksight.com/c/learning-center/10/none)
+ [Amazon Quick Community Gallery](https://community.amazonquicksight.com/c/gallery/44)

# MongoDB Atlas を含む AWS ランディングゾーンを構築する
<a name="build-aws-landing-zone-that-includes-mongodb-atlas"></a>

*Igor Alekseev (Amazon Web Services)*

*Anuj Panchal (MongoDB)*

## 概要
<a name="build-aws-landing-zone-that-includes-mongodb-atlas-summary"></a>

このパターンでは、MongoDB Atlas クラスターと統合された AWS ランディングゾーンを構築する方法について説明します。インフラストラクチャは Terraform スクリプトを使用して自動的にデプロイされます。

ラン[ディングゾーン](https://docs.aws.amazon.com/prescriptive-guidance/latest/strategy-migration/aws-landing-zone.html)と呼ばれるよく構造化されたマルチアカウント AWS 環境は、特に企業にスケーラビリティとセキュリティを提供します。これは、ワークロードとアプリケーションを迅速にデプロイするための基盤として機能し、セキュリティとインフラストラクチャの信頼性を確保するのに役立ちます。ランディングゾーンを構築する場合は、アカウント構造、ネットワーク、セキュリティ、アクセス管理などの技術的およびビジネス上の要因を慎重に検討する必要があります。これらの考慮事項を、組織の将来の成長とビジネス目標に一致させる必要があります。

このパターンのユースケースには、次のようなものがあります。
+ **エンタープライズ SaaS および PaaS プラットフォーム:** で実行されるマルチテナント Software as a Service (SaaS) アプリケーションおよび Platform as a Service (PaaS) プラットフォーム AWS は、この設定を使用して、パブリックインターネット経由でデータを公開することなく、MongoDB Atlas への安全なプライベートアクセスを提供できます。
+ **規制の厳しい業界**: Health Insurance Portability and Accountability Act (HIPAA)、Payment Card Industry Data Security Standard (PCI DSS)、System and Organization Controls 2 (SOC2)、一般データ保護規則 (GDPR) などの基準に厳密に準拠する必要がある銀行、金融サービス、医療、政府機関のワークロードには、以下によるメリットがあります。
  + を介した暗号化されたプライベート接続 AWS PrivateLink
  + MongoDB レプリカセットのマルチ AZ 高可用性
+ **安全な AI/ML ワークロード**: Amazon Bedrock、Amazon SageMaker AI、またはカスタム AI モデルのトレーニングパイプラインまたは推論パイプラインは、PrivateLink 経由で MongoDB Atlas にデータを安全に取得して保存できます。
+ **ディザスタリカバリとビジネス継続性**: マルチ AZ 設計により、単一のアベイラビリティーゾーンの障害によってワークロードが中断されることはありません。アベイラビリティーゾーン間で設定された Atlas レプリカにより、自動フェイルオーバーが保証されます。これは、金融技術 (フィンテック) アプリ、デジタルバンキング、医療モニタリングなどの常時稼働サービスにとって重要です。

## 前提条件と制限
<a name="build-aws-landing-zone-that-includes-mongodb-atlas-prereqs"></a>

**前提条件**
+ Atlas API キーを作成するための、MongoDB Atlas への組織所有者アクセス権。この要件の詳細については、MongoDB ドキュメントの「[組織のアクセス管理](https://www.mongodb.com/docs/atlas/tutorial/manage-organizations/)」を参照してください。
+ アクティブな [AWS アカウント](https://aws.amazon.com/resources/create-account/)。
+ インストールおよび設定済みの [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)。
+ MongoDB バージョン 6.0 以降で作成された MongoDB Atlas クラスター。
+ MongoDB および MongoDB Atlas に精通していること。詳細については、[MongoDB Atlas のドキュメント](https://www.mongodb.com/docs/atlas/)をご参照ください。

**制限事項**
+ 一部の AWS のサービス は、すべてで利用できるわけではありません AWS リージョン。利用可能なリージョンについては、「[AWS のサービス (リージョン別)](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)」を参照してください。特定のエンドポイントについては、「[サービスエンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)」を参照して、サービスのリンクを選択してください。

## アーキテクチャ
<a name="build-aws-landing-zone-that-includes-mongodb-atlas-architecture"></a>

次のリファレンスアーキテクチャ図は、MongoDB Atlas プライベートエンドポイントと統合された AWS ランディングゾーンのデプロイ設定を示しています。このリファレンスアーキテクチャは、MongoDB Atlas と統合された安全でスケーラブルで可用性の高い AWS ランディングゾーンを確立する方法を示しています。マルチ AZ 配置、最小特権のセキュリティコントロール、プライベート接続などの AWS ベストプラクティスを組み合わせることで、組織は最新のアプリケーション向けに堅牢な環境をプロビジョニングできます。

![\[MongoDB Atlas と統合された AWS ランディングゾーンのマルチ AZ アーキテクチャ。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/72d335b9-b5b1-4fe2-9972-65edbec60ab1/images/82a8cc98-6f22-4e28-a236-57a809930055.png)


このアーキテクチャは以下の要素で構成されます。

**VPC**
+ 単一の仮想プライベートクラウド (VPC) が 3 つのアベイラビリティーゾーンをカバーしています。
+ この VPC は、アベイラビリティーゾーンごとのサブネットとして分割されます。これらのサブネットは、ワークロードを分散して高可用性を実現します。

**インターネットアクセス**
+ インターネットゲートウェイは、アプリケーションや踏み台ホストなど、インターネット接続を必要とするリソースのアウトバウンドインターネット接続を提供します。
+ パブリックサブネットには NAT ゲートウェイを格納できます。こうすることにより、プライベートサブネットワークロードは更新、パッチ、その他の必要なパッケージを、パブリックインターネットに直接公開することなくダウンロードできるようになります。

**プライベートサブネットとルートテーブル**
+ アプリケーションコンポーネント、マイクロサービス、またはその他の機密性の高いリソースは通常、プライベートサブネット内に置かれます。
+ 専用ルートテーブルはトラフィックフローを制御します。プライベートサブネットから NAT ゲートウェイに直接アウトバウンドトラフィックをルーティングして、Egress-Only の安全なインターネットアクセスを実現します。
+ インターネットからのインバウンドリクエストは、パブリックサブネット内の伸縮性のあるロードバランサーまたは踏み台ホスト (使用する場合) を経由し、プライベートサブネットリソースに適切にルーティングされます。

**PrivateLink を介した MongoDB Atlas 接続**
+ このアーキテクチャでは、(VPC エンドポイントを介して) PrivateLink を使用して、データをパブリックインターネットに公開することなく MongoDB Atlas に安全に接続します。
+ リクエストは AWS バックボーンネットワークに残ります。転送中のデータには PrivateLink 暗号化の利点があり、パブリックインターネット経由でルーティングされることはありません。
+ MongoDB Atlas 専用 VPC は、プライマリノードとセカンダリノードをホストし、安全で隔離された環境をマネージドデータベースクラスターに提供します。

**マルチ AZ 配置**
+ 重要なインフラストラクチャコンポーネント (NAT ゲートウェイやアプリケーションサブネットなど) は、少なくとも 3 つのアベイラビリティーゾーンに分散されます。アベイラビリティーゾーンで機能停止が発生した場合、このアーキテクチャにより、残りのアベイラビリティーゾーンのワークロードが引き続き動作します。
+ MongoDB Atlas は、レプリカセットを通じた高可用性をデフォルトで提供し、データベースレイヤーの耐障害性を維持します。重要なインフラストラクチャが少なくとも 3 つのアベイラビリティーゾーンに分散されることいより、レジリエンスを実現します。

## ツール
<a name="build-aws-landing-zone-that-includes-mongodb-atlas-tools"></a>

**AWS のサービス**
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) を使用すると、認証情報 (パスワードを含む) をコード内にハードコードする代わりに、プログラムによってシークレットを取得する API コールを使用できます。

**その他の製品とツール**
+ [MongoDB Atlas](https://www.mongodb.com/atlas) は、MongoDB データベースをクラウドにデプロイおよび管理するためのフルマネージド型 Database as a Service (DbaaS) です。
+ 「[Terraform](https://www.terraform.io/)」は、HashiCorp の infrastructure as code (IaC) ツールで、クラウドとオンプレミスのリソースの作成と管理を支援します。このパターンでは、Terraform を使用してスクリプトを実行し、 AWS と MongoDB Atlas に必要なリソースのデプロイを容易にします。

**コードリポジトリ**

このパターンのコードは、GitHub の [AWS and MongoDB Atlas Landing Zone](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone) リポジトリで入手できます。

## エピック
<a name="build-aws-landing-zone-that-includes-mongodb-atlas-epics"></a>

### 検出および評価の完了
<a name="complete-discovery-and-assessment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 主要なステークホルダーを識別 | ランディングゾーンプロジェクトに関与するすべての主要なステークホルダーとチームメンバーを特定します。これには、次のようなロールが含まれる可能性があります。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/build-aws-landing-zone-that-includes-mongodb-atlas.html) | 移行リード | 
| 構造ブループリントを作成 |  AWS と MongoDB Atlas 対応ランディングゾーンの必要な構造を概説する設計図を作成します。 | 移行リード | 
| アーキテクチャプランを作成 | アプリケーションアーキテクトと協力して要件を分析し、耐障害性と回復力に優れたアーキテクチャを設計します。このパターンは、参照用のスターターアーキテクチャテンプレートを提供します。このテンプレートは、組織のセキュリティとインフラストラクチャのニーズに合わせてカスタマイズできます。 | クラウドアーキテクト | 
| セットアップとデプロイを計画 | すべてのステークホルダーと共に、アーキテクチャのデプロイ方法、セキュリティ対策の実装方法、その他の側面を決定し、組織の利益とリクエスト元のチームの利益を合致させます。 | 移行リード、DevOps エンジニア、DBA | 

### MongoDB Atlas 環境のセットアップ
<a name="set-up-the-mongodb-atlas-environment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| リポジトリのクローン作成 | コマンドを実行して、[GitHub リポジトリ](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone)からコードをクローンします。<pre>git clone https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone</pre> | アプリ開発者、DevOps エンジニア | 
| Atlas 組織 ID を取得 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/build-aws-landing-zone-that-includes-mongodb-atlas.html) | DBA | 
| Atlas 組織レベルの API キーを生成 | Atlas で組織レベルの API キーを生成するには、[MongoDB ドキュメント](https://www.mongodb.com/docs/atlas/configure-api-access/#grant-programmatic-access-to-an-organization)の指示に従います。 | DBA | 
| でシークレットを作成します AWS Secrets Manager。 | 前のステップで生成された MongoDB Atlas API キーを、キーと値のシークレットとして Secrets Manager に保存します。手順については、[Secrets Manager のドキュメント](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)を参照してください。 | DevOps エンジニア | 
| Atlas クラスター層を選択 | Atlas クラスター層を適切に選択するには、[MongoDB のドキュメント](https://www.mongodb.com/docs/atlas/sizing-tier-selection/)の指示に従ってください。 | DBA | 

### AWS 環境のセットアップ
<a name="set-up-the-aws-environments"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Terraform スクリプトを変更 | GitHub リポジトリのローカルコピーで、[Modules/mongodb-atlas/main.tf](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone/blob/3748350730ec2ac7ab64662d536b67b4840c667c/modules/mongodb-atlas/main.tf#L12) ファイルのシークレット名 (12 行目) を更新し、Terraform がデプロイ中に Secrets Manager から認証情報を取得できるようにします。 | DevOps エンジニア | 
|  AWS アクセスキー ID とシークレットキーを作成します。 |  AWS アクセスキー ID とシークレットキーを作成するには、 AWS 「re:Post」の記事[AWS 「アクセスキーの作成方法」の手順に従います。](https://repost.aws/knowledge-center/create-access-key)必要な最小特権でポリシーを割り当てるのがベストプラクティスですが、この場合は `AdministratorAccess` ポリシーを選択します。アクセスキーを作成したら、「[IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を読み、アクセスキーを管理するためのベストプラクティスを確認してください。 | DevOps エンジニア | 
| Elastic IP アドレスの割り当て | 少なくとも 2 つの Elastic IP アドレス ID を割り当てます。手順については、[Amazon Virtual Private Cloud (Amazon VPC) のドキュメント](https://docs.aws.amazon.com/vpc/latest/userguide/WorkWithEIPs.html)を参照してください。 | DevOps エンジニア | 
| S3 バケットを作成する | [Amazon Simple Storage Service (Amazon S3) ドキュメント](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)の手順に従って、Terraform デプロイの状態を保存する S3 バケットを作成します。 | DevOps エンジニア | 
| ストレージ用に S3 バケットを更新する | 前のステップで作成したバケットの名前とリージョンと一致するように、ローカルバージョンの [environments/development/main.tf](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone/blob/83e0b52cc4a8c12b24b54edeecbae496880d3615/environments/development/main.tf#L16) の S3 バケット情報を更新し、キープレフィックスを指定します。例えば、次のようになります。<pre>terraform {<br />       ...<br />  backend "s3" {<br />    bucket = "startup-name-product-terraform"<br />    key    = "network/dev"<br />    region = "ap-southeast-1"<br />  }<br />}</pre>この例では、キープレフィックス `network/dev` を使用して Terraform 状態ファイルを整理するように Terraform を設定できます。値は、作成する環境に合わせて `prod` または `staging` に変更できます。複数の環境を使用する方法については、このセクションの最後のステップを参照してください。Amazon S3 キープレフィックスの詳細は、Amazon S3 ドキュメントの「[プレフィックスを使用してオブジェクトを整理する](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-prefixes.html)」を参照してください。 | DevOps エンジニア | 
| Terraform 変数を設定 | このサンプルランディングゾーンは、[Terraform 変数定義ファイル](https://www.terraform.io/docs/language/values/variables.html#variable-definitions-tfvars-files)を使用して入力変数値を定義します。変数ファイルは [environments/development/variables.tf](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone/blob/main/environments/development/variables.tf) にあります。変数値は [environments/development/terraform.tfvars](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone/blob/main/environments/development/terraform.tfvars) ファイル内で設定できます。GitHub リポジトリの [Readme ファイル](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone/blob/main/README.md#terraform-variables)の説明に従って、これらの変数を設定します。 | DevOps エンジニア | 
| 環境変数の設定 | ローカルマシンで Terraform スクリプトを実行する予定がある場合は、次の環境変数を設定します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/build-aws-landing-zone-that-includes-mongodb-atlas.html)環境変数の設定の詳細は、[AWS Command Line Interface (AWS CLI) ドキュメント](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html#envvars-set)を参照してください。 | DevOps エンジニア | 
| VPC 設定の確認 | が推奨するベストプラクティスに従うには AWS、組織のニーズに合わせて Terraform スクリプトで VPC とサブネット CIDRs、NAT ゲートウェイ、ルート、ルートテーブルを設定します。詳細は、GitHub リポジトリの [Readme ファイル](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone/blob/main/README.md#vpc-configurations)を参照してください。 | DevOps エンジニア | 
| リソースのタグ付け |  AWS リソースにタグを付けて、Terraform スクリプトによってデプロイされたときにモニタリングできます。例については、GitHub リポジトリの [Readme ファイル](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone/blob/main/README.md#resource-taggings)を参照してください。コスト、使用状況などのタグによるリソースのモニタリングについては、 AWS Billing ドキュメントの[「ユーザー定義のコスト配分タグのアクティブ化](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/activating-tags.html)」を参照してください。 | DevOps エンジニア | 
| 複数の環境の使用 | GitHub リポジトリは `development` 環境フォルダを提供します。環境フォルダに独自の環境を追加することもできます。環境を追加するには、`development` フォルダを、`environments` の下位の新しいフォルダ (`prod` や `staging` など) にコピーします。その後、`terraform.tfvars` ファイルを新しい値で更新できます。 | DevOps エンジニア | 

### ランディングゾーンをデプロイする
<a name="deploy-the-landing-zone"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Terraform 作業ディレクトリの初期化 | 作業ディレクトリを初期化し、必要なパッケージをダウンロードするには、次のコマンドを実行します。<pre>terraform init</pre> | DevOps エンジニア | 
| 実行プランの作成 | 実行プランを作成し、Terraform がインフラストラクチャに加える変更を視覚化するには、次のコマンドを実行します。<pre>terraform plan</pre> | DevOps エンジニア | 
| 変更のデプロイ | コードの説明に従ってインフラストラクチャに変更を実装するには、次のコマンドを実行します。<pre>terraform apply</pre> | DevOps エンジニア | 
| デプロイの検証 | Terraform がインフラストラクチャで作成または変更したコンポーネントを検証します。セットアップをテストするには、 または VPC にアタッチされたコンピューティングリソース (Amazon EC2 インスタンスや AWS Lambda 関数など) をプロビジョニングします。 | DevOps エンジニア、アプリケーションデベロッパー | 

### リソースを削除する
<a name="remove-resources"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| クリーンアップ | テストが完了したら、次のコマンドを実行して、Terraform がインフラストラクチャにデプロイしたリソースを破棄します。<pre>terraform destroy</pre> | DevOps エンジニア | 

## 関連リソース
<a name="build-aws-landing-zone-that-includes-mongodb-atlas-resources"></a>

発見と評価
+ [ランディングゾーンのセットアップに関する管理上のヒント](https://docs.aws.amazon.com/controltower/latest/userguide/tips-for-admin-setup.html) (AWS Control Tower ドキュメント)
+ [ランディングゾーン設定の期待](https://docs.aws.amazon.com/controltower/latest/userguide/getting-started-configure.html) (AWS Control Tower ドキュメント)
+ [ランディングゾーンの更新に関するベストプラクティス](https://docs.aws.amazon.com/controltower/latest/userguide/lz-update-best-practices.html) (AWS Control Tower ドキュメント)

**MongoDB Atlas と AWS 環境のセットアップ**
+ [Getting MongoDB Atlas](https://aws.amazon.com/marketplace/pp/prodview-pp445qepfdy34) (AWS Marketplace)
+ [メモリ](https://docs.atlas.mongodb.com/sizing-tier-selection/#memory) (MongoDB Atlas ドキュメント)
+ [Atlas サンプルデータセットを使用したサイズ設定の例](https://www.mongodb.com/docs/atlas/sizing-tier-selection/#example--the-service-sample-data-sets) (MongoDB Atlas ドキュメント)
+ [モバイルアプリケーションのサイズ設定の例](https://www.mongodb.com/docs/atlas/sizing-tier-selection/#example--mobile-app) (MongoDB Atlas ドキュメント)
+ [ネットワークトラフィック](https://docs.atlas.mongodb.com/sizing-tier-selection/#network-traffic) (MongoDB Atlas ドキュメント)
+ [クラスターの自動スケーリング](https://www.mongodb.com/docs/atlas/sizing-tier-selection/#cluster-auto-scaling) (MongoDB Atlas ドキュメント)
+ [Atlas クラスターのサイズ設定と階層の選択](https://www.mongodb.com/docs/atlas/sizing-tier-selection/) (MongoDB Atlas ドキュメント)
+ [ネットワークピアリング接続のセットアップ](https://docs.atlas.mongodb.com/security-vpc-peering/) (MongoDB Atlas ドキュメント)
+ [Atlas のプライベートエンドポイントについて学ぶ](https://docs.atlas.mongodb.com/security-private-endpoint/) (MongoDB Atlas ドキュメント)
+ [クライアントサイドのフィールドレベル暗号化](https://docs.mongodb.com/manual/core/security-client-side-encryption) (MongoDB データベースドキュメント)
+ [自動暗号化](https://docs.mongodb.com/manual/core/security-automatic-client-side-encryption) (MongoDB データベースドキュメント)
+ [クラスター階層を選択](https://www.mongodb.com/docs/atlas/manage-clusters/#select-cluster-tier) (MongoDB Atlas ドキュメント)

**ランディングゾーンのデプロイ**
+ [AWSの Terraform](https://docs.aws.amazon.com/whitepapers/latest/cicd_for_5g_networks_on_aws/terraform.html) ( AWSでの *5G ネットワーク対応 CI/CD* についてのホワイトペーパー)
+ [MongoDB Atlas with Terraform](https://www.mongodb.com/developer/products/atlas/mongodb-atlas-with-terraform/) (MongoDB ドキュメント)

# 全体の一元化のために VPC フローログを設定する AWS アカウント
<a name="configure-vpc-flow-logs-for-centralization-across-aws-accounts"></a>

*Benjamin Morris、Aman Kaur Gandhi (Amazon Web Services)*

## 概要
<a name="configure-vpc-flow-logs-for-centralization-across-aws-accounts-summary"></a>

 AWS 仮想プライベートクラウド (VPC) では、VPC フローログ機能は運用およびセキュリティのトラブルシューティングに役立つデータを提供します。ただし、マルチアカウント環境での VPC フローログの使用には制限があります。具体的には、Amazon CloudWatch Logs からのクロスアカウントフローログがサポートされません。代わりに、Amazon Simple Storage Service (Amazon S3) バケットに適切なバケットポリシーを設定して、ログを一元化できます。

**注記**  
このパターンでは、一元管理する場所にフローログを送信するための要件について説明しています。ただし、メンバーアカウントでローカルにもログを利用できるようにする場合、各VPC ごとに複数のフローログを作成できます。ログアーカイブアカウントにアクセスできないユーザーは、トラブルシューティングの目的でトラフィックログを参照できます。また、VPC ごとに１つのフローログを設定して、CloudWatch ログにログを送信することもできます。その後、Amazon Data Firehose サブスクリプションフィルタを使用して、ログを S3 バケットに転送できます。詳細については、「[関連リソース](#configure-vpc-flow-logs-for-centralization-across-aws-accounts-resources)」セクションを参照してください。

## 前提条件と制限事項
<a name="configure-vpc-flow-logs-for-centralization-across-aws-accounts-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント
+ ログを一元化するために使用されるアカウントを持つ AWS Organizations 組織 (ログアーカイブなど)

**制限事項**

 AWS Key Management Service (AWS KMS) マネージドキーを使用して中央バケットを`aws/s3`暗号化する場合、別のアカウントからログを受信しません。代わりに、特定の `ResourceId` の `"LogDestination: <bucketName> is undeliverable"` などのメッセージを含む、`Unsuccessful` エラーコード 400 が表示されます。これは、アカウントの AWS マネージドキーをアカウント間で共有できないためです。解決策は、Amazon S3 マネージド暗号化 (SSE-S3) またはメンバーアカウントと共有できる AWS KMS カスタマーマネージドキーのいずれかを使用することです。

## アーキテクチャ
<a name="configure-vpc-flow-logs-for-centralization-across-aws-accounts-architecture"></a>

**ターゲットアーキテクチャ**

以下の図では、VPC ごとに 2 つのフローログがデプロイされています。1 つは、ローカルの CloudWatch ロググループにログを送信します。もう 1 つは、一元化されたロギングアカウントの S3 バケットにログを送信します。バケットポリシーにより、ログ配信サービスによるバケットへのログの書き込みが許可されます。

**注記**  
2023 年 11 月 AWS 現在、 は [aws:SourceOrgID 条件キー](https://aws.amazon.com/about-aws/whats-new/2023/11/organization-wide-iam-condition-keys-restrict-aws-service-to-service-requests/)をサポートしています。この条件により、 AWS Organizations 組織外のアカウントの一元化されたバケットへの書き込みを拒否できます。

![\[各 VPC から、1 つのフローログが CloudWatch にログを送信し、別のフローログは S3 バケットにログを送信します。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/718c29f4-a035-47ab-9c58-bd7d5c1ca77e/images/0b502d82-a6ce-4832-b854-99181d2ed834.png)


**自動化とスケール**

各 VPC は、セントラルロギングアカウントの S3 バケットにログを送信するように設定されます。フローログが適切に設定されるように、以下の自動化ソリューションのいずれかを使用します。
+ [CloudFormation スタックセット](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html)
+ [AWS Control Tower Account Factory for Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/taf-account-provisioning.html)
+ [修復を含む AWS Config ルール](https://aws.amazon.com/blogs/mt/how-to-enable-vpc-flow-logs-automatically-using-aws-config-rules/)

## ツール
<a name="configure-vpc-flow-logs-for-centralization-across-aws-accounts-tools"></a>

**ツール**
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) を使用すると、すべてのシステム、アプリケーション、および からのログを一元化 AWS のサービス できるため、ログをモニタリングして安全にアーカイブできます。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) は、定義した仮想ネットワークに AWS リソースを起動するのに役立ちます。この仮想ネットワークは、ユーザー自身のデータセンターで運用されていた従来のネットワークと似ていますが、 AWSのスケーラブルなインフラストラクチャを使用できるという利点があります。このパターンでは、「[VPC フローログ](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)」特徴量 を使用して、 VPC のネットワークインターフェイスとの間で行き来する IP トラフィック情報をキャプチャします。

## ベストプラクティス
<a name="configure-vpc-flow-logs-for-centralization-across-aws-accounts-best-practices"></a>

Infrastructure as Code (IaC)を使用して、VPC フローログのデプロイプロセスを大幅に簡素化できます。VPC デプロイ定義を抽象化してフローログリソース構造を含める場合、フローログを含む VPC が自動的にデプロイされます。これについては、次のセクションで説明します。

**一元化されたフローログ**

次に、一元化されたフローログを、HashiCorp Terraform の VPC モジュールに追加する構文の例を示します。このコードは、一元化された S3 バケットに VPC からログを送信するフローログを作成します。このパターンでは、S3 バケットの作成は扱っていないことに注意してください。推奨されるバケットポリシーステートメントについては、「[追加情報](#configure-vpc-flow-logs-for-centralization-across-aws-accounts-additional)」セクションを参照してください。

```
variable "vpc_id" { type = string }
locals { custom_log_format_v5 = "$${version} $${account-id} $${interface-id} $${srcaddr} $${dstaddr} $${srcport} $${dstport} $${protocol} $${packets} $${bytes} $${start} $${end} $${action} $${log-status} $${vpc-id} $${subnet-id} $${instance-id} $${tcp-flags} $${type} $${pkt-srcaddr} $${pkt-dstaddr} $${region} $${az-id} $${sublocation-type} $${sublocation-id} $${pkt-src-aws-service} $${pkt-dst-aws-service} $${flow-direction} $${traffic-path}" }
resource "aws_flow_log" "centralized_flow_log" {
  log_destination      = "arn:aws:s3:::centralized-vpc-flow-logs-<log_archive_account_id>" # Optionally, a prefix can be added after the ARN.
  log_destination_type = "s3"
  traffic_type         = "ALL"
  vpc_id               = var.vpc_id
  log_format           = local.custom_log_format_v5 # If you want fields from VPC Flow Logs v3+, you will need to create a custom log format.
}
```

カスタムログ形式の詳細については、[Amazon VPC ドキュメント](https://docs.aws.amazon.com/vpc/latest/userguide/flow-log-records.html#flow-logs-custom)を参照してください。

**ローカルフローログ**

次に、必要なアクセス許可を使用して、ローカルフローログを Terraform の VPC モジュールに追加する構文の例を示します。このコードは、VPC からローカル CloudWatch Logs グループにログを送信するフローログを作成します。

```
data "aws_region" "current" {}
variable "vpc_id" { type = string }
resource "aws_iam_role" "local_flow_log_role" {
  name = "flow-logs-policy-${var.vpc_id}"
  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [{
      "Effect": "Allow",
      "Principal": {"Service": "vpc-flow-logs.amazonaws.com"},
      "Action": "sts:AssumeRole"
  }]
}
EOF
}
resource "aws_iam_role_policy" "logs_permissions" {
  name = "flow-logs-policy-${var.vpc_id}"
  role = aws_iam_role.local_flow_log_role.id
  policy = <<EOF
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [{
      "Action": ["logs:CreateLog*", "logs:PutLogEvents", "logs:DescribeLog*", "logs:DeleteLogDelivery"],
      "Effect": "Allow",
      "Resource": "arn:aws:logs:${data.aws_region.current.name}:*:log-group:vpc-flow-logs*"
  }]
}
EOF
}
resource "aws_cloudwatch_log_group" "local_flow_logs" {
  name              = "vpc-flow-logs/${var.vpc_id}"
  retention_in_days = 30
}
resource "aws_flow_log" "local_flow_log" {
  iam_role_arn    = aws_iam_role.local_flow_log_role.arn
  log_destination = aws_cloudwatch_log_group.local_flow_logs.arn
  traffic_type    = "ALL"
  vpc_id          = var.vpc_id
}
```

## エピック
<a name="configure-vpc-flow-logs-for-centralization-across-aws-accounts-epics"></a>

### VPC フローログインフラストラクチャのデプロイ
<a name="deploy-vpc-flow-logs-infrastructure"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 暗号化戦略を決定し、中央の S3 バケットのポリシーを作成する | 中央バケットはキー AWS KMS `aws/s3`をサポートしていないため、SSE-S3 または AWS KMS カスタマーマネージドキーを使用する必要があります。 AWS KMS キーを使用する場合、キーポリシーはメンバーアカウントにキーの使用を許可する必要があります。 | コンプライアンス | 
| 中央のフローログバケットを作成する | フローログの送信先となる中央バケットを作成し、前のステップで選択した暗号化戦略を適用します。このバケットは、ログアーカイブ、または同様の目的のアカウントに作成する必要があります。「[追加情報](#configure-vpc-flow-logs-for-centralization-across-aws-accounts-additional)」セクションからバケットポリシーを取得し、環境固有の値でプレースホルダーを更新してから、中央バケットに適用します。 | AWS 全般 | 
| VPC フローログを設定して、中央のフローログバケットにログが送信されるようにする | データを収集しようとする各 VPC に、フローログを追加します。これを行う最もスケーラブルな方法は、AFT や などの IaC ツールを使用することです AWS Cloud Development Kit (AWS CDK)。たとえば、フローログと一緒に VPC をデプロイする Terraform モジュールを作成できます。必要に応じて、フローログを手動で追加します。 | ネットワーク管理者 | 
| VPC フローログをローカル CloudWatch ログに送信するように設定します。 | (オプション) ログが生成されているアカウントでフローログを表示する場合、別のフローログを作成して、ローカルアカウントの CloudWatch Logs にデータを送信します。あるいは、ローカルアカウントのアカウント固有の S3 バケットにデータを送信することもできます。 | AWS 全般 | 

## 関連リソース
<a name="configure-vpc-flow-logs-for-centralization-across-aws-accounts-resources"></a>
+ [一元化されたフローログデータを使用してデータ分析を促進し、セキュリティ要件を満たす方法](https://aws.amazon.com/blogs/security/how-to-facilitate-data-analysis-and-fulfill-security-requirements-by-using-centralized-flow-log-data/) (AWS ブログ記事)
+ [AWS Config ルールを使用して VPC フローログを自動的に有効にする方法](https://aws.amazon.com/blogs/mt/how-to-enable-vpc-flow-logs-automatically-using-aws-config-rules/) (AWS ブログ記事)

## 追加情報
<a name="configure-vpc-flow-logs-for-centralization-across-aws-accounts-additional"></a>

**バケットポリシー**

このバケットポリシーの例は、プレースホルダー名の値を追加した後に、フローログ用のセントラル S3 バケットに適用できます。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AWSLogDeliveryWrite",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::<BUCKET_NAME>/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control",
                    "aws:SourceOrgID": "<ORG_ID>"
                }
            }
        },
        {
            "Sid": "AWSLogDeliveryCheck",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::<BUCKET_NAME>",
            "Condition": {
                "StringEquals": {
                    "aws:SourceOrgID": "<ORG_ID>"
                }
            }
        },
        {
            "Sid": "DenyUnencryptedTraffic",
            "Effect": "Deny",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::<BUCKET_NAME>/*",
                "arn:aws:s3:::<BUCKET_NAME>"
            ],
            "Condition": {
                "Bool": {
                    "aws:SecureTransport": "false"
                }
            }
        }
    ]
}
```

# Terraform を使用して AWS アクセス許可セットを動的に管理する
<a name="manage-aws-permission-sets-dynamically-by-using-terraform"></a>

*Amazon Web Services、Vinicius Elias および Marcos Vinicius Pinto Jordao*

## 概要
<a name="manage-aws-permission-sets-dynamically-by-using-terraform-summary"></a>

AWS IAM アイデンティティセンター は、 AWS アカウント およびクラウドアプリケーションへのシングルサインオンアクセスを管理するための一元化されたハブを提供することで AWS Identity and Access Management (IAM) を強化します。ただし、組織の拡大に伴って、IAM アイデンティティセンターの[許可セット](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetsconcept.html)を手動で管理することはますます複雑になり、エラーが発生しやすくなる可能性があります。この複雑さにより、潜在的なセキュリティギャップや管理オーバーヘッドにつながる可能性があります。

このソリューションを使用すると、ネイティブ AWS のサービスで構築された継続的インテグレーションおよび継続的デリバリー (CI/CD) パイプラインを使用して、Infrastructure as Code (IaC) を通じて許可セットを管理できます。これにより、アクセス許可セットの割り当てメカニズムを AWS Control Tower ライフサイクルイベントまたは [Account Factory for Terraform (AFT) ](https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html)環境とシームレスに統合できます。このアプローチでは、新規と既存の ID の両方に動的な ID 設定を提供します AWS アカウント。

Amazon EventBridge ルールは AWS アカウント 作成と更新をモニタリングし、ID 設定を組織構造と同期させるのに役立ちます。または AFT でアカウントを作成 AWS Control Tower または更新すると、パイプラインがトリガーされます。許可セットの定義と割り当てルールを含む一連の JSON ファイルを評価します。次に、パイプラインはすべてのアカウントに設定を適用し、同期します。

このアプローチには以下の利点があります。
+ **整合性** — AWS 組織全体の手動設定ドリフトを排除
+ **監査性** – すべての ID 管理の変更の完全な履歴を維持します
+ **スケーラビリティ** – AWS 環境の拡大に応じて設定を自動的に適用します。
+ **セキュリティ** – アクセス許可の割り当てにおける人為的ミスを削減します
+ **コンプライアンス** – 文書化された変更と割り当てルールを通じて、規制要件の遵守を促進します

## 前提条件と制限事項
<a name="manage-aws-permission-sets-dynamically-by-using-terraform-prereqs"></a>
+  AWS Control Tower と AWS Organizations がセットアップされたマルチアカウント環境。必要に応じて、 で AFT を使用できます AWS Control Tower。
+ ソリューションを受け取る AWS アカウント IAM アイデンティティセンターの委任管理者。詳細については、IAM アイデンティティセンタードキュメントの「[委任管理](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html)」を参照してください。
+ メインコードを処理するバージョン管理システム (VCS) リポジトリ。サンプルについては、ソリューションの GitHub [リポジトリ](https://github.com/aws-samples/sample-terraform-aws-permission-sets-pipeline/tree/main/samples/basic)を参照してください。
+ Amazon Simple Storage Service (Amazon S3) バケットや Amazon DynamoDB テーブルなど、Terraform バックエンド管理に必要な AWS リソース。

**制限事項**
+ パイプラインは AWS ネイティブリソースとオープンソースの Terraform を使用します。パイプラインは、サードパーティーのエコシステムへの呼び出しを行う準備ができていません。
+ 一部の AWS のサービス は では使用できません AWS リージョン。利用可能なリージョンについては、「[AWS サービス (リージョン別)](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)」を参照してください。特定のエンドポイントについては、「[サービスエンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)」を参照して、サービスのリンクを選択してください。

## アーキテクチャ
<a name="manage-aws-permission-sets-dynamically-by-using-terraform-architecture"></a>

次の図は、このパターンのコンポーネントとワークフローを示しています。

![\[Terraform を使用して AWS 許可セットを管理するためのコンポーネントとワークフロー。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/69dc79c7-b4cd-4ad0-b0d2-d58cf0c7adaa/images/649e299c-1142-405a-8982-4a6b2e595d53.png)


**AWS Control Tower イベントフロー**

このソリューションは、 AWS Control Tower または AFT からのイベントの統合から始まります。どのサービスを選択するかは、変数定義を通じて実装時に決まります。使用される方法に関係なく、アカウントが作成または更新されるたびにパイプラインがトリガーされます。パイプラインは、許可セット管理リポジトリに保存されているポリシーを調整します。

 AWS Control Tower ライフサイクルイベントは次のとおりです。
+ `CreateManagedAccount` – 新しいアカウントが作成された場合
+ `UpdateManagedAccount` – 既存のアカウントが更新された場合

**イベントルーティング**

EventBridge は中央イベント処理サービスとして機能し、 AWS Control Tower アカウントで生成されたイベントをキャプチャします。イベントが発生すると、EventBridge はそれらをソリューションアカウントの一元化されたイベントバスにインテリジェントにルーティングします。 AWS Control Tower ライフサイクルイベントは、個別のルーティングパターンに従います。AFT がイベントソースとして定義されている場合、AFT 管理アカウントは AWS Control Tower アカウントではなくイベントを処理します。このイベント駆動型アーキテクチャにより、手動による介入なしに組織の変更に自動的に対応できるようになります。

**AFT 統合プロセス**

 AWS Control Tower ライフサイクルイベントが AFT 管理アカウントに到達すると、AFT に組み込まれている複数のダウンストリームプロセスが自動的にトリガーされます。AFT アカウントカスタマイズワークフローが完了すると、専用の `aft-notifications` Amazon Simple Notification Service (Amazon SNS) トピックにメッセージが発行されます。このトピックは、このソリューションで実装されている `aft-new-account-forward-event` AWS Lambda 関数をトリガーします。Lambda 関数は、パイプラインの開始に使用される、ソリューションアカウントイベントバスにイベントを送信します。

**Infrastructure as Code パイプライン**

ソリューションパイプラインは、完全に自動化されたデプロイメカニズムとして動作します。 AWS CodePipeline サービスはリポジトリの変更を継続的にモニタリングします。新しいコミットを検出すると、デプロイワークフローが自動的に開始され、検証フェーズと実行フェーズを含むシーケンシャル処理が開始されます。システムは Terraform `plan`オペレーションを実行して提案された変更を特定し、次に Terraform `apply` コマンドを実行してそれらの変更を AWS 環境に実装します。注目すべきは、パイプラインが手動承認ゲートなしで実行実行されることです。このアプローチにより、パイプラインログと Terraform 状態ファイルを通じて監査性を維持しながら、インフラストラクチャの変更を迅速にデプロイできるようになります。

パイプラインは を活用して AWS CodeBuild 、適切なアクセス許可を持つ制御された環境で Terraform オペレーションを実行します。この IaC アプローチにより、パイプラインは次のような包括的なアクセス許可管理オペレーションを実行できます。
+ 新しい許可セットを作成します。
+ 既存の許可セットを更新します。
+ 不要な許可セットを削除します。
+  AWS 組織内のアカウントとグループ間でこれらのアクセス許可の割り当てを管理します。

インフラストラクチャの一貫性を維持し、競合する変更を防ぐために、このソリューションでは、Amazon S3 バケットと専用の Amazon DynamoDB テーブルを使用して Terraform バックエンド状態管理システムを実装します。このアプローチは、Terraform 状態ファイルの永続的なストレージの場所と状態のロックメカニズムを提供し、同じリソースに同時に変更を加えるのを防ぎます。

メインの Terraform コードは、公式 AWS `permission-sets`の Terraform モジュールを使用します。このモジュールでは、許可セットテンプレートに基づいて、IAM アイデンティティセンター内の許可セットを動的に管理できます。

**ソースコントロール管理**

許可セットテンプレート (JSON ファイル) は、ID 管理設定の一元化されたリポジトリを提供する、GitHub などの外部バージョン管理システムにあります。このアプローチにより、許可セット定義の信頼できる唯一の情報源が確立され、標準的なコードレビュー手法を通じて共同開発が可能になります。認可されたユーザーは、組織の変更管理プロセスに従って、これらのテンプレートに変更をコミットできます。これらのコミットは、自動デプロイパイプラインの主要なトリガーとして機能し、インフラストラクチャ更新プロセスを開始します。

リポジトリ内の JSON ファイルを使用して許可セットを設定する方法の例については、「[追加情報](#manage-aws-permission-sets-dynamically-by-using-terraform-additional)」を参照してください。

## ツール
<a name="manage-aws-permission-sets-dynamically-by-using-terraform-tools"></a>

**AWS のサービス**
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) は完全マネージド型の構築サービスです。ソースコードのコンパイル、ユニットテストの実行、すぐにデプロイできるアーティファクトの生成を行います。
+ [AWS CodeConnections](https://docs.aws.amazon.com/dtconsole/latest/userguide/welcome-connections.html) では、CodePipeline などの AWS リソースとサービスが GitHub などの外部コードリポジトリに接続できます。
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) は、ソフトウェアリリースのさまざまな段階を迅速にモデル化および設定し、ソフトウェアの変更を継続的にリリースするために必要なステップを自動化するのに役立ちます。
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) は、コマンドラインシェルのコマンド AWS のサービス を使用して を操作するのに役立つオープンソースツールです。
+ [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html) は、規範的なベストプラクティスに従って、 AWS マルチアカウント環境のセットアップと管理に役立ちます。
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) は、フルマネージド NoSQL データベースサービスです。高速かつ予測可能でスケーラブルなパフォーマンスを提供します。
+ 「[Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html)」 は、アプリケーションをさまざまなソースのデータに接続するために支援するサーバーレスイベントバスサービスです。例えば、 AWS Lambda 関数、API 送信先を使用する HTTP 呼び出しエンドポイント、その他のイベントバスなどです AWS アカウント。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) は、誰を認証し、誰に使用を認可するかを制御することで、 AWS リソースへのアクセスを安全に管理できます。
+ [AWS IAM アイデンティティセンター](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html) を使用すると、すべての AWS アカウント およびクラウドアプリケーションへのシングルサインオン (SSO) アクセスを一元管理できます。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) は、作成して一元管理する AWS アカウント 組織に複数の を統合するのに役立つアカウント管理サービスです。
+ [Amazon Simple Notiﬁcation Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) は、ウェブサーバーやメールアドレスなど、パブリッシャーとクライアント間のメッセージの交換を調整および管理するのに役立ちます。アカウント管理イベントのプッシュ通知を有効にし、システム内の重要な変更やアクションが関係者に確実に通知されるようにします。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。

**その他のツール**
+ 「[Terraform](https://www.terraform.io/)」は、HashiCorp の infrastructure as code (IaC) ツールで、クラウドとオンプレミスのリソースの作成と管理を支援します。

**コードリポジトリ**

このパターンのコードは、 AWS sample-terraform-aws-permission-sets-pipeline リポジトリの GitHub の Samples 組織で入手できます。 [sample-terraform-aws-permission-sets-pipeline ](https://github.com/aws-samples/sample-terraform-aws-permission-sets-pipeline)

## ベストプラクティス
<a name="manage-aws-permission-sets-dynamically-by-using-terraform-best-practices"></a>
+ 本番稼働でコードを実行するために使用される Terraform モジュールとプロバイダーのバージョンを常に固定します。
+ [Checkov](https://www.checkov.io/) などの静的コード分析ツールを使用して、コードをスキャンし、セキュリティの問題を解決します。
+ 最小特権の原則に従い、タスク実行に必要最小限の権限を付与します。詳細については、IAM ドキュメントの「[最小限の特権を認める。](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv)」と「[IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を参照してください。

## エピック
<a name="manage-aws-permission-sets-dynamically-by-using-terraform-epics"></a>

### 前提条件を作成する (オプション)
<a name="create-the-prerequisites-optional"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Terraform バックエンドリソースを作成します。 | Terraform バックエンド AWS リソースをまだ作成していない場合は、次の手順を使用して Amazon S3 バケット (`s3-tf-backend-{ACCOUNT_ID}`) と DynamoDB テーブル () を作成します`ddb-tf-backend`。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/manage-aws-permission-sets-dynamically-by-using-terraform.html)<pre>aws s3api create-bucket --bucket s3-tf-backend-{ACCOUNT_ID}<br />aws s3api put-bucket-versioning --bucket s3-tf-backend-{ACCOUNT_ID} --versioning-configuration Status=Enabled<br />aws dynamodb create-table --table-name ddb-tf-backend --attribute-definitions AttributeName=LockID,AttributeType=S --key-schema AttributeName=LockID,KeyType=HASH --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1</pre> | AWS 管理者 | 
| クロスアカウントロールを作成します。 | Terraform AWS プロバイダー設定でクロスアカウント IAM `event-source-account` ロールを指定する必要があります。このロールをまだ作成していない場合は、次のステップを使用して作成します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/manage-aws-permission-sets-dynamically-by-using-terraform.html)<pre>aws iam create-role \<br />    --role-name CrossAccountRole \<br />    --assume-role-policy-document '{<br />        "Version": "2012-10-17",		 	 	 <br />        "Statement": [<br />            {<br />                "Effect": "Allow",<br />                "Principal": {<br />                    "AWS": "arn:aws:iam::{ACCOUNT_ID}:root"<br />                },<br />                "Action": "sts:AssumeRole"<br />            }<br />        ]<br />    }'</pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/manage-aws-permission-sets-dynamically-by-using-terraform.html)<pre>aws iam attach-role-policy \<br />    --role-name CrossAccountRole \<br />    --policy-arn arn:aws:iam::aws:policy/AdministratorAccess</pre>この例では、 AWS マネージド IAM ポリシー [AdministratorAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AdministratorAccess.html) を使用します。必要に応じて、より具体的なポリシーを使用することもできます。 | AWS 管理者 | 

### 許可セットリポジトリを準備する
<a name="prepare-the-permission-set-repository"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 専用リポジトリを作成します。 | このタスクでは、GitHub を使用していることを前提としています。メインの Terraform コードと許可セットテンプレート JSON ファイルを保存するための専用リポジトリを作成します。 | DevOps エンジニア | 
| 許可セットコードを準備します。 | 次のファイルをどのように構造化できるかの詳細については、ソリューションリポジトリの[サンプルコード](https://github.com/aws-samples/sample-terraform-aws-permission-sets-pipeline/tree/main/samples/basic)を参照してください。├── main.tf├── outputs.tf├── providers.jinja└── templates内容をコピーし、`providers.jinja` 値を保持して、他のファイルに必要な調整を加えます。例えば、許可セットテンプレートファイルを `templates` に追加したり、`main.tf` ファイル内の `aws-ia/permission-sets/aws` モジュールバージョンを固定したりします。 | DevOps エンジニア | 
| 変更をコミットします。 | 先ほど作成したリポジトリに変更をコミットしてプッシュします。リポジトリ名とその GitHub 組織 (例: `myorg/aws-ps-pipeline`) を保存します。 | DevOps エンジニア | 

### デプロイコードを準備する
<a name="prepare-the-deployment-code"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| コンテンツをダウンロードします。 | ソリューション[リポジトリ](https://github.com/aws-samples/sample-terraform-aws-permission-sets-pipeline)からコンテンツをダウンロード (クローン) します。 | DevOps エンジニア | 
| 変数を処理します。 | `terraform.tfvars` ファイルを作成し、次の必要な変数を追加します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/manage-aws-permission-sets-dynamically-by-using-terraform.html)<pre>repository_name                 = "myorg/aws-ps-pipeline"<br />branch_name                     = "main"<br />vcs_provider                    = "github"<br />account_lifecycle_events_source = "CT"</pre>追加の変数オプションの詳細については、このパターンの GitHub リポジトリにある [variables.tf](https://github.com/aws-samples/sample-terraform-aws-permission-sets-pipeline/blob/main/variables.tf) ファイルを参照してください。 | DevOps エンジニア | 
| Terraform バックエンド設定を調整します。 | `backend.tf` ファイル内のプレースホルダーを独自の値に置き換えます。 AWS Control Tower ホームを使用し AWS リージョン、以前に作成した Amazon S3 バケットと DynamoDB テーブルの名前を指定します。<pre>terraform {<br />  required_version = ">=1.6"<br />  backend "s3" {<br />    region         = "{region}"<br />    bucket         = "{bucket_name}"<br />    key            = "terraform.tfstate"<br />    dynamodb_table = "{table_name}"<br />    encrypt        = "true"<br />  }<br />}</pre>必要に応じて、独自の Terraform バックエンド設定を使用することもできます。 | DevOps エンジニア | 
| Terraform プロバイダー設定を調整します。 | `providers.tf` ファイル内のプレースホルダーを独自の情報に置き換えます。 AWS Control Tower ホームリージョンを使用して、以前に作成した`event-source-account`プロバイダーのクロスアカウント IAM ロールの ARN を指定します。<pre>provider "aws" {<br />  region = "{region}"<br />}<br /><br />provider "aws" {<br />  alias  = "event-source-account"<br />  region = "{region}"<br />  assume_role {<br />    role_arn = "{role_arn}"<br />  }<br />}<br /></pre> | DevOps エンジニア | 

### ソリューションを手動でデプロイする
<a name="deploy-the-solution-manually"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| を選択します AWS アカウント。 | IAM アイデンティティセンターの委任管理者アカウントにソリューションをデプロイすることをお勧めします。ただし、 AWS Organizations 管理アカウントにデプロイすることもできます。IAM アイデンティティセンターインスタンスと同じリージョンで、選択したアカウントにサインインするには、 AWS CLIを使用します。使用している IAM ロールに、前のステップで `event-source-account` プロバイダーに指定されたロールを引き受けるアクセス許可があることを確認します。また、このロールは Terraform バックエンド設定で使用される AWS リソースにアクセスできる必要があります。 | AWS 管理者 | 
| Terraform を手動で実行します。 | 設定を初期化、計画、適用するには、次の Terraform コマンドを示されている順序で実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/manage-aws-permission-sets-dynamically-by-using-terraform.html) | DevOps エンジニア | 
| デプロイの結果を確認します。 | IAM アイデンティティセンターの委任管理者アカウントで、`aws-ps-pipeline` パイプラインが作成されていることをチェックします。また、**保留中**のステータス AWS CodeConnections の接続があることを確認します。 | AWS DevOps | 
| CodeConnections 設定を完了します。 | CodeConnections 設定を完了するには、次のステップを実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/manage-aws-permission-sets-dynamically-by-using-terraform.html)これで、パイプラインは許可セットリポジトリにアクセスできるようになります。詳細な手順については、デベロッパーツールコンソールのドキュメントの「[保留中の接続の更新](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-update.html)」を参照してください。 | AWS DevOps | 

### ソリューションをテストするパイプライン実行フローを選択する
<a name="choose-a-pipeline-execution-flow-to-test-the-solution"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| パイプラインを AWS Control Tower または AFT 更新で実行します。 |  AWS Control Tower または AFT を使用してアカウントを作成または変更すると (選択したライフサイクルイベントのタイプに応じて）、パイプラインが開始されます。 | AWS 管理者 | 
| コードを変更してパイプラインを実行します。 | コードを変更して `main` ブランチにコミットすると、パイプラインが開始されます。 | AWS DevOps | 
| パイプラインを手動で実行します。 | パイプラインを手動で開始するには、 の[リリース変更](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-rerun-manually.html)機能を使用します AWS CodePipeline。 | AWS DevOps | 

## トラブルシューティング
<a name="manage-aws-permission-sets-dynamically-by-using-terraform-troubleshooting"></a>


| 問題 | ソリューション | 
| --- | --- | 
| アクセスが拒否されました | ソリューションをデプロイするために必要なアクセス許可があることを確認します。 | 
| CodeConnections の問題 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/manage-aws-permission-sets-dynamically-by-using-terraform.html) | 
| パイプライン実行の問題 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/manage-aws-permission-sets-dynamically-by-using-terraform.html) | 
| 許可セットのデプロイの問題 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/manage-aws-permission-sets-dynamically-by-using-terraform.html) | 

## 関連リソース
<a name="manage-aws-permission-sets-dynamically-by-using-terraform-resources"></a>

**AWS のサービス ドキュメント**
+ [AWS IAM アイデンティティセンター ユーザーガイド](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)
+ アクセス[許可セット AWS アカウント を使用して を管理する](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetsconcept.html) (IAM Identity Center ドキュメント)

**その他のリソース**
+ アクセス[AWS 許可セットモジュール](https://registry.terraform.io/modules/aws-ia/permission-sets/aws/latest) (Terraform)

## 追加情報
<a name="manage-aws-permission-sets-dynamically-by-using-terraform-additional"></a>

**サンプル許可セットを含む JSON ファイル**

次の例は、リポジトリ内の JSON ファイルを使用して許可セットを設定する方法を示しています。

```
{
  "Name": "ps-billing", // Permission set identifier
  "Comment": "Sample permission set for billing access", // Comment to document the purpose of the permission set
  "Description": "Billing access in AWS", // Detailed description
  "SessionDuration": "PT4H", // Session duration = 4 hours (ISO 8601 format)
  "ManagedPolicies": [ // List of AWS IAM managed policies
    "arn:aws:iam::aws:policy/job-function/Billing",
    "arn:aws:iam::aws:policy/job-function/SupportUser",
    "arn:aws:iam::aws:policy/AWSSupportAccess",
    "arn:aws:iam::aws:policy/job-function/ViewOnlyAccess"
  ],
  "CustomerPolicies": [], // References to IAM policies previously created
  "CustomPolicy": {}, // Inline IAM policy defined directly in the permission set
  "PermissionBoundary": {  // AWS or customer managed IAM policy to be used as boundary
    "ManagedPolicy": "",
    "CustomerPolicy": ""
  },
  "Assignments": [ // Define the assignment rules
    {
      "all_accounts": true, // Apply to ALL active AWS accounts in organization
      "principal": "G_BILLING_USERS", // Group/user name in Identity Center
      "type": "GROUP", // Can be "GROUP" or "USER"
      "account_id": [], // List of AWS account ID (empty since all_accounts=true)
      "account_ou": [], // List of AWS Organizational Unit IDs with target AWS accounts
      "account_tag": [] // List of tags (key:value) to match AWS Organization accounts tags
    }
  ]
}
```

詳細については、Terraform ウェブサイトで「[AWS Permission Sets module](https://registry.terraform.io/modules/aws-ia/permission-sets/aws/latest#json-file-templates)」ドキュメントの JSON スキーマを参照してください。

**ヒント**
+ Terraform [インポートブロック](https://developer.hashicorp.com/terraform/language/import)を使用して、既存の許可セットをソリューションにインポートできます。
+ AFT を使用して、委任アカウントに AWS 権限セットパイプラインを実装できます。詳細については、「[AFT Blueprints](https://awslabs.github.io/aft-blueprints/index.html)」を参照してください。

# AWS Organizations を使用して Transit Gateway アタッチメントに自動的にタグを付ける
<a name="tag-transit-gateway-attachments-automatically-using-aws-organizations"></a>

*Amazon Web Services、Richard Milner-Watts、Haris Bin Ayub、John Capps*

## 概要
<a name="tag-transit-gateway-attachments-automatically-using-aws-organizations-summary"></a>

アマゾン ウェブ サービス (AWS) では[AWS Resource Access Manager](https://aws.amazon.com/ram/)、 を使用して AWS アカウント 境界[AWS Transit Gateway](https://aws.amazon.com/transit-gateway/)を越えて共有できます。ただし、アカウントの境界を越えて Transit Gateway アタッチメントを作成すると、アタッチメントは名前タグなしで作成されます。そのため、アタッチメントの識別に時間がかかることがあります。 

このソリューションは、[AWS Organizations](https://aws.amazon.com/organizations/) によって管理されている組織内のアカウントについて、各 Transit Gateway アタッチメントに関する情報を収集する自動メカニズムを提供します。このプロセスには、Transit Gateway のルートテーブルから「[Classless Inter-Domain Routing (CIDR)](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing)」範囲を検索することが含まれます。次に、このソリューションでは、トランジットゲートウェイを保有するアカウント内の添付ファイルに、`<CIDR-range>-<AccountName>` という形式の名前タグを適用します。

このソリューションは、 ソリューションライブラリの[サーバーレストランジットネットワークオーケストレーター](https://aws.amazon.com/solutions/implementations/serverless-transit-network-orchestrator/)などの AWS ソリューションと一緒に使用できます。サーバーレストランジットネットワークオーケストレーターを使用すると、Transit Gateway ゲートウェイアタッチメントを大規模に自動的に作成できます。

## 前提条件と制限事項
<a name="tag-transit-gateway-attachments-automatically-using-aws-organizations-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント
+ すべての関連アカウントを含む AWS Organizations 組織
+ 組織のルートにある組織管理アカウントにアクセスして、必要な AWS Identity and Access Management (IAM) ロールを作成する
+ 組織と共有され、添付ファイルがある 1 つ以上のトランジットゲートウェイを含む共有ネットワーキングメンバーアカウント

## アーキテクチャ
<a name="tag-transit-gateway-attachments-automatically-using-aws-organizations-architecture"></a>

次の のスクリーンショット AWS マネジメントコンソール は、関連付けられた Name タグがない Transit Gateway アタッチメントと、このソリューションによって生成された Name タグがある 2 つの Transit Gateway アタッチメントの例を示しています。生成された名前タグの構造は `<CIDR-range>-<AccountName>` です。

![\[コンソールには、名前タグのない添付ファイルと名前タグの付いた 2 つの添付ファイルが表示されます。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/4b10dfec-43be-4337-9945-c64df921934a/images/7e7d4a47-f07a-4708-8022-a1d22855bb5d.png)


 

このソリューションでは[AWS CloudFormation](https://aws.amazon.com/cloudformation/)、 を使用して、設定されたすべての で Transit Gateway Name タグの作成を管理する[AWS Step Functions](https://aws.amazon.com/step-functions/)ワークフローをデプロイします AWS リージョン。ワークフローは、基礎となるタスクを実行する [AWS Lambda](https://aws.amazon.com/lambda/) 関数を呼び出します。

ソリューションが からアカウント名を取得すると AWS Organizations、Step Functions ステートマシンはすべての Transit Gateway アタッチメント IDsを取得します。これらはリージョンごとに並行処理されます。この処理には、各添付ファイルの CIDR 範囲の検索が含まれます。CIDR 範囲は、リージョン内の Transit Gateway ルートテーブルで一致するTransit Gateway アタッチメント ID を検索することで取得されます。必要な情報がすべて揃うと、ソリューションは添付ファイルに名前タグを適用します。ソリューションは既存の名前タグを上書きしません。

このソリューションは、「[Amazon EventBridge](https://aws.amazon.com/eventbridge/)」イベントによって制御されるスケジュールで実行されます。このイベントは、毎日午前 6 時 (UTC) にソリューションを開始します。

**ターゲットテクノロジースタック**
+ Amazon EventBridge
+ AWS Lambda
+ AWS Organizations
+ AWS Transit Gateway
+ Amazon Virtual Private Cloud (Amazon VPC)
+ AWS X-Ray

ターゲット アーキテクチャ

ソリューションのアーキテクチャとワークフローを次の図表に示しています。

![\[共有ネットワークアカウントと組織管理アカウントにわたる 9 ステップのプロセス。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/4b10dfec-43be-4337-9945-c64df921934a/images/873cc89f-c6e3-43cd-94ed-59b6ea2b8d49.png)


1. スケジュールされたイベントによってルールが開始されます。

1. EventBridge ルールは Step Functions ステートマシンを起動します。

1. ステートマシンは `tgw-tagger-organizations-account-query` Lambda 関数を呼び出します。

1. `tgw-tagger-organizations-account-query` Lambda 関数は組織管理アカウントでの役割を引き受けます。

1. `tgw-tagger-organizations-account-query` Lambda 関数は Organizations API を呼び出して AWS アカウント メタデータを返します。

1. ステートマシンは `tgw-tagger-attachment-query` Lambda 関数を呼び出します。

1. 各リージョンについて、ステートマシンは並行に `tgw-tagger-rtb-query` Lambda 関数を呼び出して、各アタッチメントの CIDR 範囲を読み取ります。

1. 各リージョンについて、ステートマシンは並行に `tgw-tagger-attachment-tagger`** **Lambda 関数を呼び出します。

1. 名前タグは、共有ネットワークアカウントの Transit Gateway アタッチメントファイルに作成されます。

**自動化とスケール**

ソリューションは各リージョンを並行処理し、実行にかかる合計時間を短縮します。

## ツール
<a name="tag-transit-gateway-attachments-automatically-using-aws-organizations-tools"></a>

**AWS サービス**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) は、インフラストラクチャをコードとして扱うことで、関連リソース AWS とサードパーティーリソースのコレクションをモデル化し、迅速かつ一貫してプロビジョニングし、ライフサイクル全体で管理する方法を提供します。
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) は、AWS リソースと で実行しているアプリケーションのメトリクスを AWS リアルタイムでモニタリングするのに役立ちます。
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) は、アプリケーションをさまざまなソースからのデータに接続するために使用できるサーバーレスのイベントバスサービスです。EventBridge は、環境の変化の指標であるイベントを受信し、イベントをターゲットにルーティングするルールを適用します。ルールは、イベントパターンと呼ばれるイベントの構造、またはスケジュールのいずれかに基づいて、イベントをターゲットにマッチングさせます。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行わずにコードの実行を支援できるコンピューティングサービスです。Lambda は必要に応じてコードを実行し、1 日あたり数個のリクエストから 1 秒あたり数千のリクエストまで自動的にスケールします。支払いは、使用したコンピューティング時間に対する料金のみになります。コードが実行されていないときに料金は発生しません。
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) は、 AWS リソースの拡大とスケーリングに合わせて環境を一元的に管理および管理するのに役立ちます。Organizations を使用すると、プログラムで新しい を作成し、リソース AWS アカウント を割り当て、アカウントをグループ化してワークフローを整理し、ガバナンスのためにポリシーをアカウントまたはグループに適用し、すべてのアカウントに単一の支払い方法を使用して請求を簡素化できます。
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) は、ビジネスプロセスのオーケストレーション AWS のサービス、自動化、サーバーレスアプリケーションの構築に使用されるローコードのビジュアルワークフローサービスです。ワークフローは障害、再試行、並列化、サービス統合、可観測性を管理するため、開発者はより価値の高いビジネスロジックに集中できます。
+ [AWS Transit Gateway](https://aws.amazon.com/transit-gateway/) は、中央のハブを介して VPC とオンプレミスネットワークを接続します。これにより、ネットワークが簡素化され、複雑なピアリング関係が終了します。クラウドルーターとして機能し、新しい接続は 1 回だけ行われます。
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) は、定義した論理的に分離された仮想ネットワークで AWS リソースを起動するためのサービスです。
+ [AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html) は、アプリケーションで処理するリクエストに関するデータを収集するとともに、データの表示、フィルタリング、インサイトによって問題や機会を特定して最適化するために使用できるツールを提供します。

**コード**

このソリューションのソースコードは、「[Transit Gateway アタッチメントタガー](https://github.com/aws-samples/tgw-attachment-tagger)」GitHub リポジトリにあります。リポジトリには以下のファイルが含まれています。
+ `tgw-attachment-tagger-main-stack.yaml` は、このソリューションをサポートするすべてのリソースを共有ネットワーキングアカウント内に作成します。
+ `tgw-attachment-tagger-organizations-stack.yaml` は、組織の管理アカウントにロールを作成します。

## エピック
<a name="tag-transit-gateway-attachments-automatically-using-aws-organizations-epics"></a>

### メインソリューションスタックをデプロイ
<a name="deploy-the-main-solution-stack"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 必要な前提情報を収集する。 | Lambda 関数から AWS Organizations API へのクロスアカウントアクセスを設定するには、組織の管理アカウントのアカウント ID が必要です。****2 つの CloudFormation スタックが作成される順序が重要です。最初に共有ネットワークアカウントにリソースをデプロイする必要があります。リソースを組織の管理アカウントに展開する前に、共有ネットワークアカウントのロールがすでに存在している必要があります。詳細については、[AWS のドキュメント](https://docs.amazonaws.cn/en_us/IAM/latest/UserGuide/id_roles_create_for-user.html)を参照してください。 | DevOps エンジニア | 
| メインソリューションスタックの CloudFormation テンプレートを起動します。 | メインソリューションスタックのテンプレートは、IAM ロール、Step Functions ワークフロー、Lambda 関数、および Amazon CloudWatch イベントをデプロイします。 AWS マネジメントコンソール 共有ネットワーキングアカウントの を開き、:&CFN コンソールを開きます。 `tgw-attachment-tagger-main-stack.yaml` テンプレートと以下の値を使用してスタックを作成します。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/tag-transit-gateway-attachments-automatically-using-aws-organizations.html) CloudFormation スタックの起動の詳細については、 [AWS ドキュメント](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html)を参照してください。 | DevOps エンジニア | 
| ソリューションが正常に起動したことを確認します。 | CloudFormation スタックが **CREATE\$1COMPLETE** ステータスになるまで待ちます。この所要時間は 1 分以内となります。Step Functions コンソールを開き、**tgw-attachment-tagger-state-machine** という名前で新しいステートマシンが作成されていることを確認します。 | DevOps エンジニア | 

### AWS Organizations スタックをデプロイ
<a name="deploy-the-aws-organizations-stack"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 必要な前提情報を収集する。 | Lambda 関数から AWS Organizations API へのクロスアカウントアクセスを設定するには、共有ネットワーキングアカウントのアカウント ID が必要です。 | DevOps エンジニア | 
| Organizations スタック用の CloudFormation テンプレートを起動します。 | AWS Organizations スタックのテンプレートは、組織の管理アカウントにIAMロールをデプロイします。 組織の管理アカウントの AWS コンソールにアクセスし、CloudFormation コンソールを開きます。 `tgw-attachment-tagger-organizations-stack.yaml` テンプレートと以下の値を使用してスタックを作成します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/tag-transit-gateway-attachments-automatically-using-aws-organizations.html)その他のスタック作成オプションには、デフォルトを使用してください。 | DevOps エンジニア | 
| ソリューションが正常に起動したことを確認します。 |  CloudFormation スタックのステータスが **CREATE\$1COMPLETE** になるまで待ちます。この所要時間は 1 分以内となります。 AWS Identity and Access Management (IAM) コンソールを開き、**tgw-attachment-tagger-organization-query-role** という名前の新しいロールが作成されていることを確認します。 | DevOps エンジニア | 

### ソリューションを検証する
<a name="verify-the-solution"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ステートマシンを実行します。 | 共有ネットワークアカウントの Step Functions コンソールを開き、ナビゲーションペインで **[ステートマシン]** を選択します。ステートマシン **[tgw-attachment-tagger-state-machine]** を選択し、**[実行開始]** を選択します。 このステートマシンへの入力はソリューションでは使用されないため、既定値を使用できます。<pre>{<br />    "Comment": "Insert your JSON here"<br />}</pre>**[実行のスタート]** を選択します。 | DevOps エンジニア | 
| ステートマシンが完了するまで監視してください。 | 開いた新しいページでは、ステートマシンの実行を確認できます。所要時間は、処理する Transit Gateway アタッチメントの数によって異なります。このページでは、ステートマシンの各ステップを確認できます。ステートマシン内のさまざまなタスクを表示したり、Lambda 関数の CloudWatch ログへのリンクをたどったりできます。マップ内で並行して実行されるタスクについては、**[インデックス]** ドロップダウンリストを使用して、各リージョンの特定の実装を表示できます。 | DevOps エンジニア | 
| Transit Gateway アタッチメントタグを確認します。 | 共有ネットワークアカウントの VPC コンソールを開き、**[Transit Gateway アタッチメント]** を選択します。 コンソールでは、条件を満たす添付ファイルの名前タグが表示されます (添付ファイルは Transit Gateway のルートテーブルに伝達され、リソース所有者は組織のメンバーです)。 | DevOps エンジニア | 
| CloudWatch イベントの開始を確認します。 | CloudWatch イベントが開始されるのを待ちます。これは 06:00 UTC に予定されています。 次に、共有ネットワークアカウントの Step Functions コンソールを開き、ナビゲーションペインで **[ステートマシン]** を選択します。ステートマシン **[tgw-attachment-tagger-state-machine]** を選択します。ソリューションが 06:00 UTC に実行されたことを確認します。 | DevOps エンジニア | 

## 関連リソース
<a name="tag-transit-gateway-attachments-automatically-using-aws-organizations-resources"></a>
+ [AWS Organizations](https://aws.amazon.com/organizations/)
+ [AWS Resource Access Manager](https://aws.amazon.com/ram/)
+ 「[サーバーレストランジットネットワークオーケストレーター](https://aws.amazon.com/solutions/implementations/serverless-transit-network-orchestrator/)」
+ 「[IAM ロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)」
+ [AWS CloudFormation コンソールでのスタックの作成](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html)

# その他のパターン
<a name="cloudfoundations-more-patterns-pattern-list"></a>

**Topics**
+ [AFT AWS アカウント を使用して新しい の Amazon VPC IPAM IPv4 CIDR 割り当てを自動化する](automate-amazon-vpc-ipam-ipv4-cidr-allocations-for-new-aws-accounts-by-using-aft.md)
+ [Account Factory for Terraform を使用して複数のアカウントのアクセス許可セットを管理する](govern-permission-sets-aft.md)
+ [GitHub Actions を使用して AWS CloudFormation テンプレートに基づいて AWS Service Catalog 製品をプロビジョニングする](provision-aws-service-catalog-products-using-github-actions.md)
+ [ロールベンディングマシンソリューションをデプロイして最小特権の IAM ロールをプロビジョニングする](provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.md)