Amazon Web Services ブログ
Amazon EKS Pod Identity を利用した Amazon Bedrock アプリケーションの実行
Amazon EKS Pod Identity を利用すると Amazon EKS の Pod 単位で簡単に IAM ロール権限を与えることができます。このブログでは Amazon EKS Pod Identity を利用して Amazon Bedrock アクセスするアプリケーションを実行する例をご紹介します。
Amazon EKS Pod Identity の開始方法や詳細につきましては以下のブログをご確認ください。
ブログ:Amazon EKS Pod Identity は、Amazon EKS クラスター上のアプリケーションの IAM 許可を簡素化します
前提条件
- このブログでは、既存の Amazon EKS クラスター を使用します。
- Amazon Bedrock は 東京リージョン ( ap-northeast-1 ) で anthropic.claude-instant-v1 のモデルが有効化している状態とします。
- Amazon EKS Pod Identity の Add-on が既存の Amazon EKS クラスター にインストールしている状態とします。
- 本手順で公開するアプリケーションは
0.0.0.0:80
でパブリックに公開されますので、必要に応じてセキュリティグループを利用してアクセス制限を行ってください。 - 特に本番環境で利用する上では Amazon EKS のセキュリティベストプラクティスをご確認の上デプロイを行ってください。
Amazon Bedrock アクセスするアプリケーションの実行
まずは IAM ロール権限がない状態で以下のソースコードで実行されるアプリケーションを build して Amazon EKS 上で実行し、Amazon Bedrock アクセスできないことを確認します。
コンテナイメージの作成
Amazon Bedrock アクセスするアプリケーションのコードの例 ( app.py )
Dockerfileの例
requirements.txtの例
Amazon EKS Pod Identity 使用する場合、 AWS SDK は 一定以上のバージョンが必要になります。
以下のようにディレクトリにソースコードを配置してコンテナ image を build し Amazon EKS から利用できる コンテナレジストリー に push を行います。
このブログでは Amazon ECR を利用した手順をご紹介します。
以下の手順では事前に Amazon ECR 上に llm-app
というプライベートレジストリが作成が必要です。
Amazon EKS 上での実行
以下の manifest ファイルのようにしてアプリケーションを実行します。
この手順では sample-app
という Namespace
を作成し、Service
は type: LoadBalancer
を利用してアプリケーションを公開します。
※Amazon EKS でロードバランサーを取り扱う場合は AWS Load Balancer Controller の利用を推奨します
Namespace の manifest ファイルの例
Deployment の manifest ファイルの例
※ Deployment のコンテナイメージはご自身のコンテナレジストリのイメージに変更してください。
Service の manifest ファイルの例
アプリケーションを実行すると以下のようなアプリケーションが実行されます。
しかしながら、 Amazon Bedrock への IAM ロール権限が無いため画面のように AccessDeniedException
となるはずです。
アプリケーション へ Amazon Bedrock へのアクセス権限を追加する
Amazon Bedrock へのアクセス権限を持つ IAM ロールを作成し、 Amazon EKS 上で実行されている Pod に IAM ロールの追加を行います。
Amazon Bedrock へのアクセス権限を持つ IAM ロールの作成
IAM ロールの作成からユースケースで EKS – Pod Identity を選択し、 AmazonBedrockFullAccess の許可ポリシーを追加したロールを作成します。
Amazon EKS Pod Identity を利用して IAM ロールと ServiceAccount のアソシエーションを行う
以下の manifest ファイルのようにして ServiceAccount を作成し、Amazon EKS Pod Identity を利用して IAM ロールと ServiceAccount のアソシエーションを行います。アソシエーションは AWS Management Console 、もしくは CLI を利用して行うことができます。
ServiceAccount の manifest ファイルの例
CLI を利用したアソシエーションの例
※ —role-arn ではご自身で作成した IAM ロールの arn を指定してください。
アプリケーションへ ServiceAccount を追加する
IAM ロールと ServiceAccount のアソシエーションが完了したら、あとはアプリケーションが定義されている Pod へ ServiceAccount の追加を行うだけです。 Deployment に serviceAccountName を追加し、 先程の手順でIAM ロール とアソシエーションした ServiceAccount を指定します。
Deployment の manifest ファイルの例
アプリケーションを更新すると以下の様に、Amazon Bedrock へのアクセス権限が追加されていることがわかります。
Amazon EKS Pod Identity の良さを感じて頂いたのではないでしょうか。
まとめ
- このブログでは、 Amazon EKS 上で動作するアプリケーションに対して、Amazon EKS Pod Identity を利用して Amazon Bedrock への IAM ロール 権限を追加する方法をご紹介しました
- Amazon EKS Pod Identity を利用して ServiceAccount との IAM ロールのアソシエーションを行うと、 ServiceAccount を Pod に指定するだけで、 IAM ロールベースのアクセス権限を簡単に付与することができます。
- サービスアカウントの IAM ロール (IRSA) と比較すると、 IAM ロールに Amazon EKS クラスター毎に信頼ポリシーを更新する必要がなく、複数のクラスターから IAM ロールを簡単に再利用できます。また ServiceAccount にアノテーションを付与する必要がないためよりシンプルな構成にすることができます。
このブログが皆様の Amazon EKS を利用したビジネスにお役立ちできれば幸いです。
作者情報
ソリューションアーキテクト 瀧田 直斗 (Takita Naoto)
中堅中小企業様を中心に技術的な側面からお客様のビジネスを支援させて頂いております。