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

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

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

作成者: Keshav Ganesh (AWS) と Sudhanshu Saurav (AWS)

概要

複数のチームが共有 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 エージェントは Virtual Private Cloud (VPC) 内で実行され、Lambda 関数をトリガーします。

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

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

ツール

AWS のサービス

  • Amazon Bedrock は、主要な AI スタートアップと Amazon からの高性能な基盤モデル (FMs) を統合 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 は、 で OpenSearch クラスターをデプロイ、運用、スケーリングするのに役立つマネージドサービスです AWS クラウド。そのコレクション機能は、データを整理し、Amazon Bedrock エージェントなどの AI アシスタントが使用できる包括的なナレッジベースを構築するのに役立ちます。

  • Amazon Simple Storage Service (Amazon S3) は、どのようなデータ量であっても、データを保存、保護、取得することを支援するクラウドベースのオブジェクトストレージサービスです。

その他のツール

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

コードリポジトリ

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

ベストプラクティス

  • このパターンを実装するときは、可能な限り高いセキュリティを維持します。Amazon EKS クラスターがプライベートであり、アクセス許可が制限されており、すべてのリソースが Virtual Private Cloud (VPC) 内にあることを確認します。詳細については、Amazon EKS ドキュメントの「セキュリティのベストプラクティス」を参照してください。

  • 可能な限り AWS KMS カスタマーマネージドキーを使用し、制限付きアクセス許可を付与します。

  • 最小特権の原則に従い、タスクの実行に必要な最小限のアクセス許可を付与します。詳細については、IAM ドキュメントの「最小特権の付与」と「セキュリティのベストプラクティス」を参照してください。

エピック

タスク説明必要なスキル

リポジトリをクローン作成します。

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

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 バケットを作成する必要があります。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 スタックをデプロイするには、前にeks-access-controls-template.yaml作成した CloudFormation テンプレートファイルを使用します。詳細については、CloudFormation ドキュメントの「CloudFormation コンソールからスタックを作成するCloudFormation 」を参照してください。

注記

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

スタックを作成したら、 VPC_IDと を書き留めPRIVATE_SUBNET IDます。

AWS DevOps

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

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

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

  2. テキストエディタで eks-deploy.yaml を開きます。次に、次のプレースホルダー値をデプロイされたスタックの値に置き換えます: VPC_IDPRIVATE_SUBNET1、および PRIVATE_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 Management Console を見つけますbedrock-agent-eks-access-control。IAM ロールの Amazon リソースネーム (ARN) を書き留めます。

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

    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」を参照してください。 AmazonEKSClusterAdminPolicy

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

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

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

Amazon Bedrock エージェントをテストします。

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

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

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

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

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

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

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

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

  • 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 Management Console か、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 Management Console か、Amazon EKS API を使用して次のコマンドを実行します。 aws eks list-access-entries --cluster-name ekscluster

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

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

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

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

警告

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

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

    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 クラスターへの接続が正しく設定されていることを確認します。

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

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

スタックの削除に失敗しました。

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

関連リソース

AWS ブログ

Amazon Bedrock ドキュメント

Amazon EKS ドキュメント