Amazon Web Services ブログ

Amazon Bedrock と AWS Control Tower による AWS アカウント管理のモダナイズ

はじめに

クラウドガバナンスに生成 AI を組み込むことで、AWS アカウントの管理をより自動化された効率的なプロセスに変えることができます。Amazon Bedrock の生成 AI 機能と、AWS Control Tower や Account Factory for Terraform (AFT) などのツールを活用することで、お客様は AWS アカウントのセットアップと管理プロセスを迅速化し、ベストプラクティスを守りながら開発工数を最小限に抑えることができます。

お客様は、AWS アカウントをプロビジョニングする際に、様々な組織の要件と AWS のベストプラクティスを考慮して設定を行う必要があります。そのため、AWS アカウントのカスタマイズに少なからず開発工数を費やすこととなります。

本ブログでは、AWS アカウント作成プロセスのオーケストレーションにおける Agents for Amazon Bedrock の優秀性について解説します。Agents for Amazon Bedrock は、新しい AWS アカウントの作成リクエストやアカウントカスタマイズ用コードの作成など、お客様から要求されたタスクのオーケストレーションを自動化し、そのためのプロンプトを自動的に作成します。さらに、エージェントが Knowledge Bases for Amazon Bedrock で作成されたナレッジベースに接続されている場合は、ナレッジベースから取得した情報(例: お客様固有の情報)をプロンプトに追加し、お客様に自然言語で応答するための API を呼び出します。また、AWS アカウントをプロビジョニングする際には AFT も利用します。AFT は Terraform パイプラインを設定し、AWS Control Tower 内で AWS アカウント作成とカスタマイズを行います。AFT を使用するには、お客様は Terraform 設定ファイルに AWS アカウントの作成で必要となる情報を記載し、リポジトリにコミットする必要があります。リポジトリにコミットされると Account Factory ワークフローが自動的に実行され AWS アカウントが作成されます。Account Factory ワークフローの完了後に追加のカスタマイズのステップを自動的に実行します。

次のセクションでは、Agents for Amazon Bedrock と基盤モデル (Claude 2.1) を使用し、AWS セキュリティリファレンスアーキテクチャ (SRA) における「セキュリティツールアカウント」をプロビジョニングするユースケースにおいて IaC を加速させる方法について詳しく説明します。最後に、Amazon Bedrock から生成された IaC コードをデプロイする方法と、AFT を通じてインフラストラクチャのデプロイをスケールする方法を学びます。

ソリューションの概要

訳者注: 本ソリューションは、非 IT 技術者がチャットインタフェースを通して AWS アカウントを作成するような Agents for Amazon Bedrock の社内利用におけるユースケースのサンプルとして捉えていただければと思います。本ブログではセキュリティツールアカウントのプロビジョニングに焦点を当てておりますが、AWS のセキュリティサービスは Organizations と連携することで、個々の AWS アカウントでセキュリティサービスを有効化することなく複数のメンバーアカウントに対して一括で有効化することも可能です。

ソリューションのデプロイ方法について詳しく説明する前に、本ブログで構築する図 1 のアーキテクチャにおける各処理について見ていきましょう。

図1:AFT と Amazon Bedrock を利用した「セキュリティツールアカウント」作成の例

  1. ユーザーは Agents for Amazon Bedrock のマネジメントコンソールにあるチャットを利用して、作成する AWS アカウントの要件を入力します。例えば、「セキュリティツール用の AWS アカウントを作成する」と入力します。エージェントには、AFT を利用して AWS アカウントを作成・カスタマイズするためのプロンプトと Knowledge Bases for Amazon Bedrock の設定が行われています。
  2. 上記例のような入力を受け取ると、エージェントは、セキュリティツール用の AWS アカウントに推奨される AWS セキュリティサービスをナレッジベースから取得します。エージェントは、推奨される AWS サービスをユーザーに提示します。ユーザーは提示された AWS サービスから、AWS アカウント作成時に有効化しておきたい AWS サービスの名前を入力します。
  3. 次に、エージェントはアカウント作成に必要な情報をユーザーの入力から収集します。ユーザーが選択した AWS サービスに基づき、エージェントは AWS サービスの情報をアクショングループに渡し、AWS Lambda 関数を呼び出します。Lambda 関数は、Terraform モジュールとパラメータをナレッジベースから取得し Terraform 設定ファイルを作成します。作成したコードを AFT アカウントカスタマイズリポジトリ (learn-terraform-aft-account-customizations からクローンした自身のリポジトリ) にプッシュします。次のアカウント作成のステップに進む前に、エージェントはユーザーに AFT アカウントカスタマイズリポジトリにプッシュした Terraform 設定ファイルで問題ないかを確認します。
  4. ユーザーから「確認」の入力を受け取ると、エージェントは AFT による AWS アカウント作成用の Terraform 設定ファイルを作成し、AFT アカウントリクエストリポジトリ (learn-terraform-aft-account-request からクローンした自身のリポジトリ) にプッシュする Lambda 関数を呼び出します。リポジトリにプッシュされると AWS Control Tower Account Factory for Terraform (AFT) パイプラインがトリガーされます。
  5. 次に、AFT パイプラインはサービスカタログ製品を呼び出します。この製品により、特定の OU に AWS アカウントが登録され、AWS Control TowerAWS Organizations を利用したガードレールが適用されます。
  6. 最後に、セキュリティツール用の新しい AWS アカウントがプロビジョニングされ、Security OU に登録されます。プロビジョニングされた AWS アカウントでは、ユーザが入力した AWS セキュリティサービスが有効化されています。

前提条件

1. このワークフローを使用して AWS アカウントを管理するには、Organizations 管理アカウントの Admin 権限、AWS アカウント設定を行うための Terraform の知識、および適切な AWS Identity and Access Management (IAM) の権限が必要です。また、AWS Control Tower と AFT が設定されており、AFT リポジトリと AWS Control Tower のマルチアカウント環境における役割を理解している必要があります。

2. 以下の理解も必要になります。

デプロイ手順

このソリューションは、AWS セキュリティリファレンスアーキテクチャ (SRA) に従い、セキュリティツール用、インフラストラクチャ用、ワークロード用などの各種 AWS アカウントを作成し、それぞれに対応する AWS サービスをデプロイするのに活用できます。本ブログでは、セキュリティツール用アカウントの作成と、推奨される AWS セキュリティサービスのデプロイにフォーカスして説明します。このソリューションをデプロイするには、以下の 4 つのステップを実施します。

ステップ 1 : ナレッジベースを設定する: ナレッジベースを設定することで、エージェントが AWS アカウントのプロビジョニングに必要な情報にアクセスできるようになります。ナレッジベースを設定するには、次の手順に従います。

  • Amazon Bedrock コンソールを開き、左側のナビゲーションパネルで [ナレッジベース] を選択し、[ナレッジベースを作成] を選択します。
  • [ナレッジベース名] にナレッジベースの名前を入力します。「AWS-Account-Setup-Knowledge-Base」のように、ナレッジベースの目的を明確に表す名前にすることを推奨します。
  • [IAM 許可] では IAM ロールを選択します。[既存のサービスロールを使用] から必要な権限を有する既存の IAM ロールを選択することもできますが、[新しいサービスロールを作成して使用] を選択し、適切な権限を有する IAM ロールを作成するのが推奨されます。
  • [データソースを設定] では、データソースを定義します。セキュリティのため、暗号化を有効にした Amazon Simple Storage Service (Amazon S3) バケットを作成し、[S3 URI] に指定します。Amazon S3 バケットには、AWS サービスと対応する Terraform モジュールのリストが記載されている JSON ファイルをアップロードします。JSON ファイルの構造については、リポジトリで提供されているサンプルを参照してください。
    訳者注:利用する際は、ModuleSource などをお客様が利用している実際のモジュールにあわせて変更してください
  • [埋め込みモデル] では、埋め込みモデルとして [Titan  Embeddings G1 – Text] を選択します。
  • [ベクトルデータベース] では、ベクトルストアを選択します。ここでは、[新しいベクトルストアをクイック作成 – 推奨] を選択し、Amazon Bedrock に Amazon OpenSearch Service を利用したベクトルストアの作成と管理を任せます。
  • レビューして最終確認をします。入力した全ての情報を正確性の観点から確認します。特に Amazon S3 バケット URI と IAM ロールを注意深く確認してください。問題なければ [ナレッジベースを作成] を選択します。
  • 以下のバナーが表示されたら、[同期] を選択します。 

ステップ 2 : エージェントを設定する:

  • Amazon Bedrock コンソールを開き、左側のナビゲーションパネルで [エージェント] を選択し、[エージェントを作成] を選択します。
  • [エージェント名][エージェントの説明 – オプション] などのエージェントの詳細を入力します。
  • [IAM 許可] では IAM ロールを選択します。[既存のサービスロールを使用] から必要な権限を有する既存の IAM ロールを選択することもできますが、[新しいサービスロールを作成して使用] を選択し、適切な権限を有する IAM ロールを作成するのが推奨されます。これにより、エージェントに AWS Lambda などの必要なサービスへのアクセス権が与えられます。
  • [モデルの詳細] から [Anthropic][Claude V2.1] を選択します
  • エージェントを介して AFT を実行するために、以下のプロンプトを [エージェント向けの指示] に入力します

Assist users in creating AWS accounts based on account type. Ask user which AWS account type(customization name) they would like to create: Security or Infrastructure AWS account. Ask user which AWS services they would like to deploy for their chosen account type. DO NOT assume AWS services for account type, ask user. Query the knowledge base for the approved AWS services list for the selected AWS account type. Present the AWS services to the user for service selection. Collect required user details for the account creation, for e.g.; “Please provide first name, last name, organization unit, account email and name”. Upon AWS services selection, invoke the account customization Lambda to generate the appropriate Terraform code. After successful execution of account customization lambda provide users repository link and ask for user confirmation of terraform code before triggering the AWS account creation lambda. Ask user to update code if needed. DO NOT trigger account creation lambda unless you receive confirmation from user. After user confirmation, initiate the account creation Lambda. Let the user know the account has been created with the customization.

ステップ 3 : アクショングループを設定する: AFT による AWS アカウント作成とカスタマイズを可能にするために、エージェントに 2 つのアクションを追加します。

  • アカウントカスタマイズ用のアクショングループ: アカウントカスタマイズ用の Terraform 設定ファイルを生成する Lambda 関数(Lambda 関数を作成するにはこちらの手順を参照)にリンクされたアクショングループを作成します。このアクショングループは、AWS アカウントにプロビジョニングする必要がある AWS サービスをユーザーが入力した後、エージェントによって呼び出されます。Terraform 設定ファイルは「learn-terraform-aft-account-customizations」リポジトリにプッシュされます。AFT はこのリポジトリを使用して、新しく作成された AWS アカウントに特定の設定を適用します。Lambda 関数のコードは、こちらのリポジトリを参照してください。
  • アカウント作成用のアクショングループ: AFT を使用して AWS アカウントを作成する Lambda 関数にリンクされたアクショングループを作成します。このアクショングループは、ユーザーが Terraform 設定ファイルを確認し、「確認」と入力した後に呼び出されます。Lambda 関数のコードは、こちらのリポジトリを参照してください。

ステップ 4 : アクショングループをエージェントに追加する:

  • [アクショングループ名を入力] にアクショングループ名を入力し、[説明 – オプション] に各アクションの動作の説明を記述します。
  • [Lambda 関数を選択] では、適切な Lambda 関数を選択します。Lambda 関数は、アクションの呼び出し時に実行されるビジネスロジックを提供します。[関数のバージョン] から使用する関数のバージョンを選択します。詳細については、「Amazon Bedrock でエージェントのアクショングループの Lambda 関数を定義する」をご覧ください。
  • [API スキーマを選択] では、アクショングループの API の説明、構造とパラメータが定義された OpenAPI スキーマの Amazon S3 URI へのリンクを定義します。API はユーザーの入力を受け取り、アカウント作成とカスタマイズの Lambda 関数を呼び出すロジックを管理します。API は、ユーザー入力値の検証、Terraform 設定ファイルの作成プロセスの開始、アカウントプロビジョニングのステータス監視など、さまざまなタスクを処理できるよう設計する必要があります。詳細については、「Amazon Bedrock でエージェントのアクショングループの OpenAPI スキーマを定義する」をご覧ください。
  • [別のアクショングループを追加] を選択して、もう 1 つのアクショングループを設定します。アカウントカスタマイズ用およびアカウント作成用のアクショングループを追加後、[次へ] を選択します。
  • [ナレッジベースを追加 – オプション] では、[エージェント向けのナレッジベースの指示] に「Retrieve AWS services for AWS Account type such as Security or Infrastructure」と入力します。
  • エージェントの作成完了後、[テスト] と表示されたウィンドウよりエージェントの動作確認を行うことができます。

図 2 は、Amazon Bedrock を使ってユーザーが「セキュリティツール用アカウント」を払い出すときの操作画面のスクリーンショットです。

図 2 : AFT を利用した「セキュリティツール用アカウント」作成における Amazon Bedrock とユーザの対話例

クリーンアップ

不必要な課金を避けるために、テスト中に作成したリソースを削除してください。リソースをクリーンアップするには、以下の順序どおりに手順を実行します。

  • ナレッジベースの削除
    エージェントから関連付けられているナレッジベースを削除するには、次の手順を実行します。
    • Amazon Bedrock コンソールを開きます。
    • 左側のナビゲーションペインから [エージェント] を選択します。
    • ナレッジベースを削除したいエージェントの [名前] を選択します。
    • [Edit in Agent Builder] を選択します。 
    • 削除するナレッジベースの横にあるラジオボタンを選択し、[Delete] を選択します。
    • 削除の確認画面が表示されるため、「delete」と入力し [Delete] を選択します。
    • 左側のナビゲーションペインから [ナレッジベース] を選択します。
    • 削除したいナレッジベースの [名前] を選択します。
    • データソースを削除するには、データソースの横にあるラジオボタンを選択して [削除] を選択します。
    • データソースの削除に関する警告を確認します。これらの条件に同意する場合は、入力欄に「削除」と入力し、[削除] を選択して確定します。
    • 削除するナレッジベースの横にあるラジオボタンを選択し、[削除] を選択します。
    • ナレッジベースの削除に関する警告を確認します。これらの条件に同意する場合は、入力欄に「削除」と入力し、[削除] を選択して確定します。
      訳者注: 翻訳時点では、警告に記載の「削除」ではなく「delete」と入力することで削除可能です。
    • Amazon OpenSearch Service コンソールより、Amazon OpenSearch Serverless のコレクションを削除します。
      訳者注: 原文にはございませんが、コレクションを削除しない限り料金が発生し続けてしまいますのでご注意ください。 

次の「エージェントの削除」手順を実行する前に、エージェントから関連付けられているナレッジベースを削除していることを改めて確認してください。

  • エージェントの削除
    • Amazon Bedrock コンソールを開きます。
    • 左側のナビゲーションペインから [エージェント] を選択します。
    • 削除するエージェントの横にあるラジオボタンを選択します。
    • エージェントの削除に関する警告を確認します。これらの条件に同意する場合は、入力欄に「delete」と入力し、[Delete] を選択して確定します。
    • エージェントが削除されていることを知らせる青色のバナーが表示されます。削除が完了すると、成功を知らせる緑色のバナーが表示されます。
  • その他すべてのリソースを削除
    • これには AWS Lambda 関数と AFT が利用している AWS サービスが含まれます。

まとめ

生成 AI の統合により、AWS アカウント管理がより自動化され、効率的なプロセスに変革します。Amazon Bedrock の生成 AI 機能と、AWS Control Tower や Account Factory for Terraform (AFT) などのツールを活用することで、組織は開発工数を最小限に抑えつつ、ベストプラクティスに沿った AWS アカウントのセットアップと管理を迅速に行えるようになります。このアプローチは、単に運用を効率化するだけでなく、AWS 環境の構築において、セキュリティとコンプライアンスを開発のあらゆるフェーズに埋め込むことができます。

本ブログのソリューションは、AWS のベストプラクティスに従ってクラウドリソースを効率的かつ安全にプロビジョニングするための Amazon Bedrock と AFT を組み合わせたアーキテクチャ、デプロイメントコード、プロンプトをお客様の組織に提供しています。

著者について

Shiva Vaidyanathan

Shiva Vaidyanathan は AWS のプリンシパルクラウドアーキテクトです。AWS での成功を確実にするため、技術ガイダンスを提供し、お客様への実装プロジェクトの設計と指導を行っています。クラウドネットワーキングを誰にとってもシンプルなものにするために尽力しています。AWS に入社する前は、パブリッククラウドインフラストラクチャにおける安全なコンピューティングの実行に関する NSF の資金提供を受けた複数の研究イニシアチブに携わってきました。ラトガーズ大学でコンピューターサイエンスの修士号を、ニューヨーク大学で電気工学の修士号を取得しています。

Ebbey Thomas

Ebbey Thomas は、生成 AI を活用してクラウドインフラストラクチャの自動化を強化することに重点を置いたカスタム AWS ランディングゾーンの戦略立案と開発を専門としています。AWS プロフェッショナルサービスでは、クラウドの導入を効率化し、AWS ユーザーに安全で効率的な運用フレームワークを提供するソリューションを設計する上で、Ebbey の専門知識が中心となっています。彼はクラウドの課題に対する革新的なアプローチと、クラウドサービスの機能をさらに発展させることへの取り組みで知られています。

翻訳は Solutions Architect 北川が担当しました。原文はこちらです。