View a markdown version of this page

Amazon Bedrock エージェントを使用してテキストベースのプロンプトで Amazon EKS でのアクセスエントリコントロールの作成を自動化する - AWS 規範ガイダンス

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

Amazon Bedrock エージェントを使用してテキストベースのプロンプトで Amazon EKS でのアクセスエントリコントロールの作成を自動化する

Amazon Web Services、Keshav Ganesh と Sudhanshu Saurav

概要

組織内で複数のチームが共有 Amazon Elastic Kubernetes Service (Amazon EKS) クラスターを操作する必要がある場合、アクセスコントロールとリソースプロビジョニングの管理が課題となります。Amazon EKS などのマネージド Kubernetes サービスにより、クラスターオペレーションは簡素化されました。ただし、チームのアクセスとリソースのアクセス許可を管理するための管理オーバーヘッドは、依然として複雑で時間がかかります。

このパターンでは、Amazon Bedrock エージェントを活用して Amazon EKS クラスターのアクセス管理を自動化する方法を示します。この自動化により、開発チームはアクセスコントロールの設定や管理ではなく、コアアプリケーションの開発に集中できます。Amazon Bedrock エージェントをカスタマイズして、シンプルな自然言語プロンプトを使用してさまざまなタスク用のアクションを実行できます。

AWS Lambda 関数をアクショングループとして使用することで、Amazon Bedrock エージェントはユーザーアクセスエントリの作成やアクセスポリシーの管理などのタスクを処理できます。さらに、Amazon Bedrock エージェントは、クラスターで実行されているポッドの AWS Identity and Access Management (IAM) リソースへのアクセスを許可するポッド ID の関連付けを設定できます。このソリューションを使用すると、組織はシンプルなテキストベースのプロンプトで Amazon EKS クラスターの管理を合理化し、手作業によるオーバーヘッドを削減し、全体的な開発効率を向上させることができます。

前提条件と制限

前提条件

  • アクティブ AWS アカウント。

  • デプロイプロセス用の確立された IAM ロールとアクセス許可。これには、Amazon Bedrock 基盤モデル (FM) へのアクセス、Lambda 関数の作成、およびターゲット全体のその他の必要なリソースに対するアクセス許可が含まれます AWS アカウント。

  • Amazon Bedrock FMs AWS アカウント に対してアクティブな で有効になっているアクセス: Amazon Titan Text Embeddings V2 および Anthropic Claude 3 Haiku。

  • AWS Command Line Interface (AWS CLI) バージョン 2.9.11 以降、インストールおよび設定済み。

  • インストール済の eksctl 0.194.0 以降。

制限事項

  • 上記の手法をスムーズに導入し、効果的に使用するために、トレーニングとドキュメントが必要になる場合があります。Amazon Bedrock、Amazon EKS、Lambda、Amazon OpenSearch Service、OpenAPI を使用するには、開発者と DevOps チームは大幅な学習が必要になります。

  • 一部の AWS のサービス は、すべてで利用できるわけではありません AWS リージョン。すべてのリージョンの可用性については、「リージョン別の AWS サービス」を参照してください。特定のエンドポイントについては、「サービスエンドポイントとクォータ」を参照して、サービスのリンクを選択してください。

アーキテクチャ

次の図表は、このパターンのアプリケーションのワークフローとアーキテクチャコンポーネントを示しています。

Amazon Bedrock エージェントを使用して Amazon EKS でアクセスコントロールを作成するためのワークフローとコンポーネント。

このソリューションでは、以下のステップを実行します。

  1. ユーザーは、エージェントが処理してアクションを実行するための入力となるプロンプトまたはクエリを送信することで、Amazon Bedrock エージェントとやり取りします。

  2. プロンプトに基づいて、Amazon Bedrock エージェントは OpenAPI スキーマをチェックし、ターゲットとする正しい API を特定します。Amazon Bedrock エージェントが正しい API コールを見つけた場合、これらのアクションを実装する Lambda 関数に関連付けられているアクショングループにリクエストが送信されます。

  3. 関連する API が見つからない場合、Amazon Bedrock エージェントは OpenSearch コレクションにクエリを実行します。OpenSearch コレクションは、Amazon EKS ユーザーガイドを含む Amazon S3 バケットから取得されたインデックス付きナレッジベースコンテンツを使用します。

  4. OpenSearch コレクションは、関連するコンテキスト情報を Amazon Bedrock エージェントに返します。

  5. 実行可能なリクエスト (API オペレーションに一致するリクエスト) の場合、Amazon Bedrock エージェントは仮想プライベートクラウド (VPC) 内で実行され、Lambda 関数をトリガーします。

  6. Lambda 関数は、Amazon EKS クラスター内のユーザーの入力に基づいてアクションを実行します。

  7. Lambda コードの Amazon S3 バケットには、Lambda 関数用に記述されたコードとロジックを持つアーティファクトが保存されます。

ツール

AWS のサービス

  • Amazon Bedrock は、主要な AI スタートアップや Amazon が提供する高パフォーマンスな基盤モデル (FM) を、統合 API を通じて利用できるようにするフルマネージド型サービスです。

  • AWS CloudFormation は、 AWS リソースをセットアップし、迅速かつ一貫してプロビジョニングし、 AWS アカウント および 全体のライフサイクルを通じてリソースを管理するのに役立ちます AWS リージョン。

  • Amazon Elastic Kubernetes Service (Amazon EKS) を使用すると、独自の Kubernetes コントロールプレーンやノードをインストールまたは維持 AWS することなく、 で Kubernetes を実行できます。

  • AWS Identity and Access Management (IAM) は、誰を認証し、誰に使用する権限を付与するかを制御することで、 AWS リソースへのアクセスを安全に管理するのに役立ちます。

  • AWS Lambda は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。

  • Amazon OpenSearch Service は、 AWS クラウドにおける OpenSearch クラスターのデプロイ、オペレーション、スケーリングを支援するマネージドサービスです。Amazon OpenSearch Service のコレクション機能は、データを整理し、Amazon Bedrock エージェントなどの AI アシスタントが使用できる包括的なナレッジベースを構築するのに役立ちます。

  • Amazon Simple Storage Service (Amazon S3) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。

その他のツール

  • eksctl – これは Amazon EKS で Kubernetes クラスターを作成および管理するコマンドラインユーティリティです。

コードリポジトリ

このパターンのコードは、GitHub 内の「eks-access-controls-bedrock-agent」リポジトリで入手できます。

ベストプラクティス

エピック

タスク説明必要なスキル

リポジトリのクローン作成

このパターンのリポジトリのクローンを作成するには、ローカルワークステーションで次のコマンドを実行します。

git clone https://github.com/aws-samples/eks-access-controls-bedrock-agent.git
AWS DevOps

AWS アカウント ID を取得します。

AWS アカウント ID を取得するには、次の手順を実行します。

  1. クローンが作成されたリポジトリのルートフォルダ (eks-access-controls-bedrock-agent) でシェルを開きます。

  2. AWS アカウント ID を取得するには、クローンされたディレクトリに移動し、次のコマンドを実行します。

    AWS_ACCOUNT=$(aws sts get-caller-identity --query "Account" --output text)

このコマンドは AWS アカウント 、ID を AWS_ACCOUNT変数に保存します。

AWS DevOps

Lambda コード用の S3 バケットを作成します。

このソリューションを実装するには、アーキテクチャ図に示されているように、さまざまな目的を果たす 3 つの Amazon S3 バケットを作成する必要があります。3 つの S3 バケットはそれぞれ、Lambda コード、ナレッジベース、OpenAPI スキーマ用です。

Lambda コード用バケットを作成するには、次の手順を実行します。

  1. Lambda コード用の S3 バケットを作成するには、次のコマンドを実行します。

    aws s3 mb s3://bedrock-agent-lambda-artifacts-${AWS_ACCOUNT} --region us-east-1
  2. Lambda コードの依存関係をインストールするには、次のコマンドを実行します。

    cd eks-lambda npm install tsc cd .. && cd opensearch-lambda npm install tsc cd ..
  3. コードをパッケージ化して Lambda 用の S3 バケットにアップロードするには、次のコマンドを実行します。

    aws cloudformation package \ --template-file eks-access-controls.yaml \ --s3-bucket bedrock-agent-lambda-artifacts-${AWS_ACCOUNT} \ --output-template-file eks-access-controls-template.yaml \ --region us-east-1

パッケージコマンドにより、以下を含む新しい CloudFormation テンプレート (eks-access-controls-template.yaml) が作成されます。

  • S3 バケットに保存されている Lambda 関数コードへの参照。

  • VPC、サブネット、Amazon Bedrock エージェント、OpenSearch コレクションなど、必要なすべての AWS インフラストラクチャの定義。このテンプレートを使用することで、CloudFormation を使用してソリューション全体をデプロイできます。

AWS DevOps

ナレッジベース用の S3 バケットを作成します。

ナレッジベース用の Amazon S3 バケットを作成するには、次の手順を実行します。

  1. ナレッジベース用の Amazon S3 バケットを作成するには、次のコマンドを実行します。

    aws s3 mb s3://eks-knowledge-base-${AWS_ACCOUNT} --region us-east-1
  2. Amazon EKS ユーザーガイドをダウンロードしてディレクトリに保存するには、次のコマンドを実行します。

    mkdir dataSource cd dataSource curl https://docs.aws.amazon.com/pdfs/eks/latest/userguide/eks-ug.pdf -o eks-user-guide.pdf
  3. ステップ 1 で作成した S3 バケットにユーザーガイドをアップロードするには、次のコマンドを実行します。

    aws s3 cp eks-user-guide.pdf s3://eks-knowledge-base-${AWS_ACCOUNT} \ --region us-east-1 \
  4. ルートディレクトリに戻るには、次のコマンドを実行します。

    cd ..
AWS DevOps

OpenAPI スキーマ用の S3 バケットを作成します。

OpenAPI スキーマ用の Amazon S3 バケットを作成するには、次の手順を実行します。

  1. S3 バケットを作成するには、次のコマンドを実行します。

    aws s3 mb s3://eks-openapi-schema-${AWS_ACCOUNT} --region us-east-1
  2. OpenAPI スキーマを S3 バケットにアップロードするには、次のコマンドを実行します。

    aws s3 cp openapi-schema.yaml s3://eks-openapi-schema-${AWS_ACCOUNT} --region us-east-1
AWS DevOps
タスク説明必要なスキル

CloudFormation スタックをデプロイします。

CloudFormation スタックをデプロイするには、前に作成した CloudFormation テンプレートファイル eks-access-controls-template.yaml を使用します。詳しい手順については、CloudFormation ドキュメントの「CloudFormation コンソールからスタックを作成する」を参照してください。

注記

CloudFormation テンプレートを使用して OpenSearch インデックスをプロビジョニングするには、約 10 分かかります。

スタックを作成したら、VPC_IDPRIVATE_SUBNET ID を書き留めておきます。

AWS DevOps

Amazon EKS クラスターを作成します。

VPC 内に Amazon EKS クラスターを作成するには、次の手順を実行します。

  1. eks-config.yaml 設定ファイルのコピーを作成し、コピーに eks-deploy.yaml という名前を付けます。

  2. テキストエディタで eks-deploy.yaml を開きます。次に、次のプレースホルダー値 (VPC_IDPRIVATE_SUBNET1PRIVATE_SUBNET2) をデプロイしたスタックの値に置き換えます。

  3. eksctl ユーティリティを使用してクラスターを作成するには、次のコマンドを実行します。

    eksctl create cluster -f eks-deploy.yaml
    注記

    クラスター作成プロセスには、最大 15~20 分かかる場合があります。

  4. クラスターが正常に作成されたことを確認するには、次のコマンドを実行します。

    aws eks describe-cluster --name --query "cluster.status" aws eks update-kubeconfig --name --region kubectl get nodes

期待される結果は次のとおりです。

  • クラスターのステータスが ACTIVE になっている。

  • コマンド kubectl get nodes は、すべてのノードが Ready 状態であることを示している。

AWS DevOps
タスク説明必要なスキル

Amazon EKS クラスターと Lambda 関数との間の接続を作成します。

Lambda 関数が Amazon EKS クラスターと通信できるようにするネットワークおよび IAM アクセス許可を設定するには、次の手順を実行します。

  1. Lambda 関数にアタッチされている IAM ロールを特定するには、 を開き、 という名前の Lambda 関数 AWS マネジメントコンソール を見つけますbedrock-agent-eks-access-control。IAM ロールの Amazon リソースネーム (ARN) をメモしておきます。

  2. Amazon EKS クラスターに Lambda 関数の IAM ロールのアクセスエントリを作成するには、次のコマンドを実行します。

    aws eks create-access-entry --cluster-name eks-testing-cluster --principal-arn <principal-Role-ARN>
  3. このロールに AmazonEKSClusterAdminPolicy アクセス許可を割り当てるには、次のコマンドを実行します。

    aws eks associate-access-policy --cluster-name eks-testing-cluster --principal-arn <principal-Role-ARN> --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy --access-scope type=cluster

    詳細については、Amazon EKS ドキュメントの「アクセスポリシーをアクセスエントリに関連付ける」と「AmazonEKSClusterAdminPolicy」を参照してください。

  4. Amazon EKS クラスターのセキュリティグループを見つけます。Lambda 関数から Amazon EKS クラスターへの受信ネットワークトラフィックを許可するインバウンドルールを追加します。

    インバウンドルールに、次の値を使用します。

AWS DevOps
タスク説明必要なスキル

Amazon Bedrock エージェントをテストする

Amazon Bedrock エージェントをテストする前に、以下を必ず実行してください。

  • 最初に非本番稼働用ロールでテストします。

  • クラスターアクセスに加えられた変更を文書化します。

  • 必要に応じて変更を元に戻す計画を立てます。

Amazon Bedrock エージェントにアクセスするには、次の手順を使用します。

  1. Amazon Bedrock アクセス許可を持つ IAM ロール AWS マネジメントコンソール を使用して にサインインし、https://console.aws.amazon.com/bedrock/ で Amazon Bedrock コンソールを開きます。

  2. 左側のナビゲーションペインで [エージェント] を選択します。次に、[エージェント] セクションで設定されているエージェントを選択します。

  3. エージェントをテストするには、Principal-ARN-OF-ROLE を実際の IAM ロール ARN に置き換える次のサンプルプロンプトを試してください。

  • EKS クラスターへのアクセスを許可する IAM ロールのアクセスエントリを作成するには、次のプロンプト (Create an access entry in cluster eks-testing-new for a role whose principal arn is <Principal-ARN-OF-ROLE> with access policy as AmazonEKSAdminPolicy) を使用します。

    予想される結果:

    • エージェントは、アクセスエントリの作成を確認します。

    • 確認するには、 を使用する AWS マネジメントコンソール か、Amazon EKS API を使用して次のコマンドを実行します。 aws eks list-access-entries --cluster-name ekscluster

  • 作成したアクセスエントリを記述するには、次のプロンプト (Describe an access entry in cluster eks-testing-new whose principal arn is <Principal-ARN-OF-ROLE>) を使用します。

    予想される結果:

    • エージェントは、アクセスエントリに関する詳細を返します。

    • この詳細は、アクセスエントリに対して以前に設定した内容と一致します。

  • 作成したエンドポイントを削除するには、次のプロンプト (Delete the access entry in cluster eks-testing-new whose principal arn is <Principal-ARN-OF-ROLE>) を使用します。

    予想される結果:

    • エージェントはアクセスエントリの削除を確認します。

    • 確認するには、 を使用する AWS マネジメントコンソール か、Amazon EKS API を使用して次のコマンドを実行します。 aws eks list-access-entries --cluster-name ekscluster

EKS Pod Identity の関連付けに対してアクションを実行するようにエージェントに依頼することもできます。詳細については、Amazon EKS ドキュメントの「EKS Pod Identity がポッドに AWS のサービスへのアクセス権を付与する仕組みを学ぶ」を参照してください。

AWS DevOps
タスク説明必要なスキル

リソースをクリーンアップします。

このパターンで作成されたリソースをクリーンアップするには、次の手順を使用します。各削除ステップが完了してから次のステップに進みます。

警告

この手順では、これらのスタックによって作成されたすべてのリソースを完全に削除します。先に進む前に、重要なデータをバックアップしていることを確認してください。

  1. Amazon ECS クラスターを削除するには、次のコマンドを実行します。

    eksctl delete cluster -f eks-deploy.yaml
    注記

    このオペレーションには、15~20 分かかります。

  2. Amazon S3 バケットを削除するには、次のコマンドを実行します。

    • Lambda バケットを空にするには:

      aws s3 rm s3://bedrock-agent-lambda-artifacts-${AWS_ACCOUNT} --recursive
    • ナレッジベースバケットを空にするには:

      aws s3 rm s3://eks-knowledge-base-${AWS_ACCOUNT} –recursive
    • OpenAPI スキーマバケットを空にするには:

      aws s3 rm s3://bedrock-agent-openapi-schema-${AWS_ACCOUNT} –recursive
    • 空のバケットを削除するには:

      aws s3 rb s3://bedrock-agent-lambda-artifacts-${AWS_ACCOUNT} aws s3 rb s3://eks-knowledge-base-${AWS_ACCOUNT} aws s3 rb s3://bedrock-agent-openapi-schema-${AWS_ACCOUNT}
  3. CloudFormation スタックを削除するには、次のコマンドを実行します。

    aws cloudformation delete-stack \ --stack-name
  4. Amazon EKS クラスターの削除を確認するには、次のコマンドを実行します。

    eksctl get clusters
  5. Amazon S3 バケットの削除を確認するには、次のコマンドを実行します。

    • Lambda バケットの削除を確認するには:

      aws s3 ls | grep "bedrock-agent-lambda-artifacts"
    • ナレッジベースバケットの削除を確認するには:

      aws s3 ls | grep "eks-knowledge-base"
    • OpenAPI スキーマバケットの削除を確認するには:

      aws s3 ls | grep "bedrock-agent-openapi-schema"
  6. スタックの削除を確認するには、次のコマンドを実行します。

    aws cloudformation list-stacks \--query 'StackSummaries[?StackName==``]'

    スタックの削除に失敗した場合は、「トラブルシューティング」を参照してください。

AWS DevOps

トラブルシューティング

問題ソリューション

環境のセットアップ中にゼロ以外のエラーコードが返されます。

コマンドを実行してこのソリューションをデプロイする際、正しいフォルダを使用していることを確認します。詳細については、このパターンのリポジトリにある FIRST_DEPLOY.md ファイルを参照してください。

Lambda 関数がタスクを実行できません。

Lambda 関数から Amazon EKS クラスターへの接続が正しく設定されていることを確認します。

エージェントプロンプトが API を認識しません。

ソリューションをデプロイする 詳細については、このパターンのリポジトリにある RE_DEPLOY.md ファイルを参照してください。

スタックが削除に失敗します。

スタックの削除を試行すると、1 度目は失敗する可能性があります。この障害は、ナレッジベースのインデックスを作成する OpenSearch コレクション用に作成されたカスタムリソースの依存関係の問題が原因で発生する場合があります。スタックを削除するには、カスタムリソースを保持して削除オペレーションを再試行します。

関連リソース

AWS ブログ

Amazon Bedrock ドキュメント

Amazon EKS ドキュメント