翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Beanstalk クラスターのアクセス許可
Beanstalk クラスター環境は、Beanstalk Standard の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスプロファイルを使用しません。Amazon EKS がクラスターとノードに必要とする IAM ロールと、Elastic Beanstalk が環境のメトリクス、ログ、トレースを発行するために使用するロールを提供します。オプションで、実行中のアプリケーションのアプリケーションロールを指定できます。Elastic Beanstalk は、環境の独自のオペレーションにサービスにリンクされたロールを使用します。
指定したロール
Beanstalk クラスター環境は、クラスターロール、ノードロール、およびオブザーバビリティロールを使用します。Elastic Beanstalk コンソールで環境を作成し、デフォルトのサービスアクセス設定を受け入れると、アカウント内にまだ存在しない場合、コンソールは に名前を付けて 各ロールの名前、信頼されたサービス、アクセス許可3 つすべてを作成します。
-
クラスターロール – Amazon EKS は、Elastic Beanstalk が作成するクラスターに対してこのロールを引き受けます。
aws:elasticbeanstalk:eks名前空間のcluster-role設定で ARN を渡します。 -
ノードロール – クラスターの Amazon EC2 ノードはこのロールを引き受けます。このロールでは、Amazon ECR からアプリケーションイメージをプルできる必要があります。
aws:elasticbeanstalk:eks名前空間のnode-role設定で ARN を渡します。 -
オブザーバビリティロール – 環境のメトリクス、ログ、トレースを発行するコンポーネントは、Amazon EKS Pod Identity を通じてこのロールを引き受けます。
aws:elasticbeanstalk:eks:environment名前空間のobservability-role設定で ARN を渡します。
これらのロールを Elastic Beanstalk コンソールの外部で作成する場合は、 で指定されているとおりに作成することを強くお勧めします各ロールの名前、信頼されたサービス、アクセス許可。次に、環境を作成するときに、設定オプションで各ロール ARN を渡します。実例については、「」を参照してくださいBeanstalk クラスターの開始方法。
Elastic Beanstalk のソースを指定してコンテナイメージに組み込む場合は、イメージビルドロールも指定します。 AWS CodeBuild はそれを引き受けてアカウントでビルドを実行します。このロールは、実行中の環境ではなく、アプリケーションバージョンビルドに属します。「Beanstalk クラスター環境のコンテナイメージの構築」を参照してください。
オプションのアプリケーションロールを指定することもできます。このロールは、実行中のアプリケーションが AWS サービスを呼び出すために使用されます。「アプリケーションのアクセス許可」を参照してください。
重要
次の表のロール名を使用します。コンソールは既存のロールを名前で選択するので、別の名前で作成したロールを選択せず、そのロールを自分で選択する必要があります。クラスターの再利用にも名前は重要です。Elastic Beanstalk は、クラスター、ノード、オブザーバビリティロールを、作成するクラスターに登録します。同じサブネットセット上のそれ以降の環境は、同じ 3 つのロールを提供する必要があります。Elastic Beanstalk は、別のクラスターに配置するのではなく、ロールが異なる環境を拒否します。「環境のグループ化」を参照してください。
各ロールは異なるサービスを信頼し、独自のアクセス許可を持ちます。
| ロール | ロール名 | 信頼できるサービス | AWS マネージドポリシー |
|---|---|---|---|
| クラスターの ロール | aws-elasticbeanstalk-eks-cluster-role |
eks.amazonaws.com |
AmazonEKSClusterPolicy, AmazonEKSNetworkingPolicy,
AmazonEKSComputePolicy, AmazonEKSBlockStoragePolicy,
AmazonEKSLoadBalancingPolicy, AWSElasticBeanstalkEKSTagging |
| ノードロール | aws-elasticbeanstalk-eks-node-role |
ec2.amazonaws.com |
AmazonEKSWorkerNodeMinimalPolicy,
AmazonEC2ContainerRegistryPullOnly,
AmazonSSMManagedInstanceCore |
| オブザーバビリティロール | aws-elasticbeanstalk-eks-observability-role |
pods.eks.amazonaws.com |
CloudWatchAgentServerPolicy,
AWSElasticBeanstalkEKSObservability |
| イメージビルドロール | aws-elasticbeanstalk-eks-image-build-role |
codebuild.amazonaws.com |
AWSElasticBeanstalkEKSImageBuild |
| アプリケーションロール (オプション) | 名前を選択する | pods.eks.amazonaws.com |
なし。アプリケーションに必要なアクセス許可のみを付与します。「アプリケーションロールを設定する」を参照してください。 |
クラスター、ノード、オブザーバビリティロールを提供するには
-
Elastic Beanstalk コンソールで環境を作成する場合、何も準備する必要はありません。コンソールは、前の表の名前を使用して 3 つのロールを名前で検索し、アカウント内に既に存在する場合は選択し、存在しない場合は作成します。完全な ARN ではなくロール名のみで一致し、IAM ロール名はアカウント内で一意であるため、ロールが置かれているパスは一致に影響しません。
-
AWS CLI または API を使用する場合は、まず 3 つのロールを作成します。どちらのクライアントも作成しません。各ロールに前の表の名前と信頼できるサービスを指定し、リストされているポリシーをアタッチします。ロールは環境と同じ AWS アカウントにある必要があります。
-
環境を作成するときに
node-role、cluster-role、、およびobservability-role設定で 3 つの ARNs をすべて指定します。サブネットセット上のすべての環境が同じロールを登録できるように、デフォルトに依存するのではなく、オブザーバビリティロールを明示的に指定します。 -
アプリケーションが AWS サービスを呼び出す場合は、「」の説明に従ってオプションのアプリケーションロールを設定しますアプリケーションロールを設定する。
サブネットセット単独でクラスターを選択するため、異なるインフラストラクチャロールを持つ別のクラスターが必要な場合は、別のサブネットセットを使用します。既存の Beanstalk クラスター環境のサブネット、クラスター、ノード、オブザーバビリティロールを変更することはできません。「環境のグループ化」を参照してください。オプションのアプリケーションロールは環境に固有であり、環境によって異なる場合があります。「」を参照してくださいアプリケーションロールを設定する。
環境を作成するアクセス許可
これらのロールを Elastic Beanstalk に渡すため、環境を作成するプリンシパルには、ロールを渡すアクセス許可が必要です。Elastic Beanstalk はこれをプロビジョニングする前に検証するため、そのプリンシパルに以下を付与します。
-
iam:GetRoleおよび は、クラスター、ノード、オブザーバビリティロール、およびそれらを使用する場合はアプリケーションロールとイメージビルドロールを渡すすべてのロールiam:PassRoleで使用します。iam:PassedToService条件キーiam:PassRoleを使用してスコープします。その値は、クラスターロールeks.amazonaws.com、ec2.amazonaws.comノードロール、pods.eks.amazonaws.comオブザーバビリティロール、アプリケーションロール、codebuild.amazonaws.comイメージビルドロール、および Elastic Beanstalk がユーザーに代わってこれらのロールを渡すelasticbeanstalk.amazonaws.comため、ロールを受け取るサービスです。 -
iam:CreateServiceLinkedRole。これは、Elastic Beanstalk と Amazon EKS がサービスにリンクされたロールを作成できるように、アカウント内の最初の Beanstalk クラスター環境が必要とするものです。値をelasticbeanstalk.amazonaws.comおよび とするiam:AWSServiceName条件キーでスコープしますeks.amazonaws.com。
次のポリシーは、これらすべてを許可します。アカウント ID を独自の に置き換え、アプリケーションロールの名前を使用し、渡さないロールを削除します。表示されるロール名は、コンソールが作成および選択する前の表のロール名です。
名前でロールを選択するコンソールとは異なり、ポリシーは完全な ARN でロールと一致するため、各Resourceエントリにはロールの IAM パスを含める必要があります。コンソールが作成するロールは/service-role/、次に示すように にあります。別の方法でロールを作成した場合、パスがない可能性があります。この場合、その ARN は ですarn:aws:iam::。ロールの ARN を読み取るには、 を実行します111122223333:role/role-nameaws iam get-role --role-name 。role-name --query Role.Arn --output text
{ "Version": "2012-10-17", "Statement": [ { "Sid": "InspectTheRoles", "Effect": "Allow", "Action": "iam:GetRole", "Resource": [ "arn:aws:iam::111122223333:role/service-role/aws-elasticbeanstalk-eks-cluster-role", "arn:aws:iam::111122223333:role/service-role/aws-elasticbeanstalk-eks-node-role", "arn:aws:iam::111122223333:role/service-role/aws-elasticbeanstalk-eks-observability-role", "arn:aws:iam::111122223333:role/service-role/aws-elasticbeanstalk-eks-image-build-role", "arn:aws:iam::111122223333:role/my-application-role" ] }, { "Sid": "PassTheRolesToBeanstalk", "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::111122223333:role/service-role/aws-elasticbeanstalk-eks-cluster-role", "arn:aws:iam::111122223333:role/service-role/aws-elasticbeanstalk-eks-node-role", "arn:aws:iam::111122223333:role/service-role/aws-elasticbeanstalk-eks-observability-role", "arn:aws:iam::111122223333:role/service-role/aws-elasticbeanstalk-eks-image-build-role", "arn:aws:iam::111122223333:role/my-application-role" ], "Condition": { "StringEquals": { "iam:PassedToService": [ "eks.amazonaws.com", "ec2.amazonaws.com", "pods.eks.amazonaws.com", "codebuild.amazonaws.com", "elasticbeanstalk.amazonaws.com" ] } } }, { "Sid": "CreateServiceLinkedRolesOnFirstEnvironment", "Effect": "Allow", "Action": "iam:CreateServiceLinkedRole", "Resource": "arn:aws:iam::111122223333:role/aws-service-role/*", "Condition": { "StringEquals": { "iam:AWSServiceName": [ "elasticbeanstalk.amazonaws.com", "eks.amazonaws.com" ] } } } ] }
iam:GetRole iam:PassedToService条件キーはPassRoleリクエストにのみ存在するため、 は独自のステートメントにあります。同じステートメントiam:GetRoleで に適用すると、そのアクセス許可はまったく付与されません。
このポリシーは、ロールの受け渡しのみを対象としています。アプリケーションと環境の作成に必要な Elastic Beanstalk アクションは付与されません。
これらのアクセス許可がないと、 は実行できなかったアクションAccessDeniedの命名エラーでCreateEnvironment失敗します。詳細については、「 AWS サービスにロールを渡すためのプリンシパルアクセス許可を付与する」および「」を参照してくださいCreateEnvironment。
Elastic Beanstalk が管理するロール
Elastic Beanstalk は、サービスAWSServiceRoleForElasticBeanstalkにリンクされたロールを介して Beanstalk クラスター環境を操作します。このロールは、アカウント内に作成されます。このロールを作成、設定、または渡しません。Amazon EKS は同様に、独自のサービスにリンクされたロール を使用しますAWSServiceRoleForAmazonEKS。Elastic Beanstalk がサービスにリンクされたロールを使用する方法については、「」を参照してくださいElastic Beanstalk でのサービスにリンクされたロールの使用。
環境が使用するロールを確認する
環境が Ready状態になったら、解決された設定を読み取ります。
$ aws elasticbeanstalk describe-configuration-settings \
--application-name my-app \
--environment-name my-cluster-env \
--query "ConfigurationSettings[0].OptionSettings[?OptionName=='cluster-role' || OptionName=='node-role' || OptionName=='observability-role'].[Namespace,OptionName,Value]" \
--output table
クラスター、ノード、オブザーバビリティロールのエントリに、作成時に指定された ARNs が含まれていることを確認します。環境がアプリケーションロールを使用している場合は、認証情報アイデンティティチェックインを実行しアプリケーションロールを設定する、返された ARN が選択したロールを識別していることを確認します。ソースベースのアプリケーションバージョンの場合、バージョンが を報告するのを待ちますPROCESSED。この状態は、 AWS CodeBuild がビルドロールを使用してイメージビルドを完了できることを確認します。「Beanstalk クラスター環境のコンテナイメージの構築」を参照してください。
アプリケーションのアクセス許可
実行中のアプリケーションが AWS サービスを呼び出す必要がある場合は、アプリケーションロールを使用します。環境を作成する前にロールを設定し、アプリケーションに必要なアクセス許可のみを付与します。アプリケーションは、Amazon EC2 インスタンスプロファイルではなく、Amazon EKS Pod Identity を介してロールを受け取ります。
aws:elasticbeanstalk:eks:environment 名前空間application-roleの設定でロールの ARN を渡すか、環境の作成時に Elastic Beanstalk コンソールでロールを選択します。
アプリケーションロールは、サードパーティーのオブザーバビリティバックエンドの認証情報を読み取るロールでもあります。オブザーバビリティバックエンドを に設定する場合はcustom、アプリケーションロール secretsmanager:GetSecretValue と を という名前の Secrets Manager シークレットsecretsmanager:DescribeSecretに付与しますcustom-credentials。「オブザーバビリティデータをサードパーティーのバックエンドに送信する」を参照してください。
アプリケーションロールを設定する
環境を作成する前に、アプリケーションロールを作成します。アプリケーションに必要なアクションとリソースのみをロールに付与します。pods.eks.amazonaws.com サービスプリンシパルの sts:AssumeRoleと を含む Amazon EKS Pod Identity sts:TagSessionの信頼ポリシーを設定します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }
-
前述の信頼ポリシーを使用してロールを作成します。
-
アプリケーションに必要なサービスアクションとリソースのみを付与するアイデンティティベースのポリシーをアタッチします。
-
Elastic Beanstalk コンソールで、環境作成ワークフローを開始し、サービスアクセスを展開します。
-
アプリケーションロール - オプションで ロールを選択します。残りの環境設定を完了し、環境を作成します。
AWS CLI または API で、代わりに
application-roleオプションをcreate-environmentリクエストに追加してロールを選択します。--option-settings \ Namespace=aws:elasticbeanstalk:eks:environment,OptionName=application-role,Value=arn:aws:iam::111122223333:role/my-application-role -
アプリケーションがデプロイされたら、アプリケーションから必要な AWS サービスを呼び出します。サービスポリシーとは無関係に認証情報 ID を検証するには、 を呼び出し AWS STS
GetCallerIdentity、返された ARN が選択したアプリケーションロールを識別していることを確認します。
アプリケーションが を受け取った場合はAccessDenied、環境の作成時に目的のロールを選択し、その信頼ポリシーが Amazon EKS Pod Identity を許可し、そのアイデンティティベースのポリシーがリクエストされたアクションとリソースを許可していることを確認します。信頼ポリシーまたはアクセス許可ポリシーを修正し、認証情報アイデンティティチェックとアプリケーションサービスの呼び出しの両方を繰り返します。間違ったロールを選択した場合は、間違ったロールにアプリケーションアクセス許可を追加する代わりに、目的のロールで置き換え環境を作成します。環境が異なるアクセスを必要とする場合は、個別のアプリケーションロールを使用します。クラスターまたはノードロールにアプリケーションアクセス許可を付与しないでください。
ロールの失敗を診断する
環境の Elastic Beanstalk イベントから始めます。失敗したリクエストの直前に記録されたタイムスタンプoperation_startに設定します。
$ operation_start='timestamp-recorded-before-the-request'
$ aws elasticbeanstalk describe-events \
--environment-name my-cluster-env \
--severity ERROR \
--start-time "$operation_start" \
--max-items 20
- 環境の作成がインフラストラクチャロールを拒否する
-
ロールが環境アカウントにあり、信頼ポリシーとアタッチされたポリシーが現在の Amazon EKS Auto Mode ガイダンスと一致し、ARN が完了していることを確認します。リクエストされたサブネットセットに既に登録済みクラスターがある場合は、その登録済みクラスターとノードロールを使用します。オペレーションエラーは、リクエストされた値と登録された値の競合を識別します。リクエストを修正し、環境を再度作成します。既存の環境では、これらのロールを置き換えることはできません。
- アプリケーションイメージを取得できない
-
ノードロールに文書化された Amazon ECR の取得許可と信頼ポリシーがあることを確認します。また、イメージ URI と、アクセスを制限するリポジトリポリシーを確認します。ロールまたはリポジトリポリシーを修正し、アプリケーションバージョンを再度デプロイします。
- ソースビルドレポート
FAILED -
application-version ビルド設定でビルドロールを確認し、ビルド診断を検査します。新しいアプリケーションバージョンを作成する前に、ロールの信頼ポリシーまたはアクセス許可ポリシーを修正します。「Beanstalk クラスター環境のコンテナイメージの構築」を参照してください。
- 実行中のアプリケーションは を受け取ります
AccessDenied -
でアプリケーションロールチェックを使用しますアプリケーションロールを設定する。まず認証情報 ID を確認し、アプリケーションログと CloudTrail イベントで拒否されたアクションとリソースをロールポリシーと比較します。