

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

# Beanstalk クラスターのアクセス許可
<a name="beanstalk-cluster-permissions"></a>

Beanstalk クラスター環境は、Beanstalk Standard の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスプロファイルを使用しません。Amazon EKS がクラスターとノードに必要とする IAM ロールと、Elastic Beanstalk が環境のメトリクス、ログ、トレースを発行するために使用するロールを提供します。オプションで、実行中のアプリケーションのアプリケーションロールを指定できます。Elastic Beanstalk は、環境の独自のオペレーションにサービスにリンクされたロールを使用します。

## 指定したロール
<a name="beanstalk-cluster-permissions-customer-roles"></a>

Beanstalk クラスター環境は、クラスターロール、ノードロール、およびオブザーバビリティロールを使用します。Elastic Beanstalk コンソールで環境を作成し、デフォルトのサービスアクセス設定を受け入れると、アカウント内にまだ存在しない場合、コンソールは に名前を付けて [各ロールの名前、信頼されたサービス、アクセス許可](#beanstalk-cluster-permissions-role-details)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 コンソールの外部で作成する場合は、 で指定されているとおりに作成することを強くお勧めします[各ロールの名前、信頼されたサービス、アクセス許可](#beanstalk-cluster-permissions-role-details)。次に、環境を作成するときに、設定オプションで各ロール ARN を渡します。実例については、「」を参照してください[Beanstalk クラスターの開始方法](beanstalk-cluster-getting-started.md)。

Elastic Beanstalk のソースを指定してコンテナイメージに組み込む場合は、**イメージビルドロール**も指定します。 AWS CodeBuild はそれを引き受けてアカウントでビルドを実行します。このロールは、実行中の環境ではなく、アプリケーションバージョンビルドに属します。「[Beanstalk クラスター環境のコンテナイメージの構築](beanstalk-cluster-app-versions.md)」を参照してください。

オプションの**アプリケーションロール**を指定することもできます。このロールは、実行中のアプリケーションが AWS サービスを呼び出すために使用されます。「[アプリケーションのアクセス許可](#beanstalk-cluster-permissions-application)」を参照してください。

**重要**  
次の表のロール名を使用します。コンソールは既存のロールを名前で選択するので、別の名前で作成したロールを選択せず、そのロールを自分で選択する必要があります。クラスターの再利用にも名前は重要です。Elastic Beanstalk は、クラスター、ノード、オブザーバビリティロールを、作成するクラスターに登録します。同じサブネットセット上のそれ以降の環境は、同じ 3 つのロールを提供する必要があります。Elastic Beanstalk は、別のクラスターに配置するのではなく、ロールが異なる環境を拒否します。「[環境のグループ化](beanstalk-cluster-concepts.md#beanstalk-cluster-clusters-sharing)」を参照してください。

各ロールは異なるサービスを信頼し、独自のアクセス許可を持ちます。


**各ロールの名前、信頼されたサービス、アクセス許可**  

| ロール  | ロール名 | 信頼できるサービス | 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 | なし。アプリケーションに必要なアクセス許可のみを付与します。「[アプリケーションロールを設定する](#beanstalk-cluster-permissions-application-role)」を参照してください。 | 

**クラスター、ノード、オブザーバビリティロールを提供するには**

1. Elastic Beanstalk コンソールで環境を作成する場合、何も準備する必要はありません。コンソールは、前の表の名前を使用して 3 つのロールを名前で検索し、アカウント内に既に存在する場合は選択し、存在しない場合は作成します。完全な ARN ではなくロール名のみで一致し、IAM ロール名はアカウント内で一意であるため、ロールが置かれているパスは一致に影響しません。

1.  AWS CLI または API を使用する場合は、まず 3 つのロールを作成します。どちらのクライアントも作成しません。各ロールに前の表の名前と信頼できるサービスを指定し、リストされているポリシーをアタッチします。ロールは環境と同じ AWS アカウントにある必要があります。

1. 環境を作成するときに`node-role`、`cluster-role`、、および `observability-role`設定で 3 つの ARNs をすべて指定します。サブネットセット上のすべての環境が同じロールを登録できるように、デフォルトに依存するのではなく、オブザーバビリティロールを明示的に指定します。

1. アプリケーションが AWS サービスを呼び出す場合は、「」の説明に従ってオプションのアプリケーションロールを設定します[アプリケーションロールを設定する](#beanstalk-cluster-permissions-application-role)。

サブネットセット単独でクラスターを選択するため、異なるインフラストラクチャロールを持つ別のクラスターが必要な場合は、別のサブネットセットを使用します。既存の Beanstalk クラスター環境のサブネット、クラスター、ノード、オブザーバビリティロールを変更することはできません。「[環境のグループ化](beanstalk-cluster-concepts.md#beanstalk-cluster-clusters-sharing)」を参照してください。オプションのアプリケーションロールは環境に固有であり、環境によって異なる場合があります。「」を参照してください[アプリケーションロールを設定する](#beanstalk-cluster-permissions-application-role)。

## 環境を作成するアクセス許可
<a name="beanstalk-cluster-permissions-caller"></a>

これらのロールを 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::{{111122223333}}:role/{{role-name}}`。ロールの ARN を読み取るには、 を実行します`aws 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 サービスにロールを渡すためのプリンシパルアクセス許可を付与する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)」および「」を参照してください[`CreateEnvironment`](https://docs.aws.amazon.com/elasticbeanstalk/latest/api/API_CreateEnvironment.html)。

## Elastic Beanstalk が管理するロール
<a name="beanstalk-cluster-permissions-service-roles"></a>

Elastic Beanstalk は、サービス`AWSServiceRoleForElasticBeanstalk`にリンクされたロールを介して Beanstalk クラスター環境を操作します。このロールは、アカウント内に作成されます。このロールを作成、設定、または渡しません。Amazon EKS は同様に、独自のサービスにリンクされたロール を使用します`AWSServiceRoleForAmazonEKS`。Elastic Beanstalk がサービスにリンクされたロールを使用する方法については、「」を参照してください[Elastic Beanstalk でのサービスにリンクされたロールの使用](using-service-linked-roles.md)。

## 環境が使用するロールを確認する
<a name="beanstalk-cluster-permissions-verify"></a>

環境が `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 が含まれていることを確認します。環境がアプリケーションロールを使用している場合は、認証情報アイデンティティチェックインを実行し[アプリケーションロールを設定する](#beanstalk-cluster-permissions-application-role)、返された ARN が選択したロールを識別していることを確認します。ソースベースのアプリケーションバージョンの場合、バージョンが を報告するのを待ちます`PROCESSED`。この状態は、 AWS CodeBuild がビルドロールを使用してイメージビルドを完了できることを確認します。「[Beanstalk クラスター環境のコンテナイメージの構築](beanstalk-cluster-app-versions.md)」を参照してください。

## アプリケーションのアクセス許可
<a name="beanstalk-cluster-permissions-application"></a>

実行中のアプリケーションが 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`。「[オブザーバビリティデータをサードパーティーのバックエンドに送信する](monitoring-cluster-environments.md#monitoring-cluster-environments-custom-backend)」を参照してください。

### アプリケーションロールを設定する
<a name="beanstalk-cluster-permissions-application-role"></a>

環境を作成する前に、アプリケーションロールを作成します。アプリケーションに必要なアクションとリソースのみをロールに付与します。`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"
      ]
    }
  ]
}
```

1. 前述の信頼ポリシーを使用してロールを作成します。

1. アプリケーションに必要なサービスアクションとリソースのみを付与するアイデンティティベースのポリシーをアタッチします。

1. Elastic Beanstalk コンソールで、環境作成ワークフローを開始し、**サービスアクセス**を展開します。

1. **アプリケーションロール - オプションで ロール**を選択します。残りの環境設定を完了し、環境を作成します。

    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}}
   ```

1. アプリケーションがデプロイされたら、アプリケーションから必要な AWS サービスを呼び出します。サービスポリシーとは無関係に認証情報 ID を検証するには、 を呼び出し AWS STS `GetCallerIdentity`、返された ARN が選択したアプリケーションロールを識別していることを確認します。

アプリケーションが を受け取った場合は`AccessDenied`、環境の作成時に目的のロールを選択し、その信頼ポリシーが Amazon EKS Pod Identity を許可し、そのアイデンティティベースのポリシーがリクエストされたアクションとリソースを許可していることを確認します。信頼ポリシーまたはアクセス許可ポリシーを修正し、認証情報アイデンティティチェックとアプリケーションサービスの呼び出しの両方を繰り返します。間違ったロールを選択した場合は、間違ったロールにアプリケーションアクセス許可を追加する代わりに、目的のロールで置き換え環境を作成します。環境が異なるアクセスを必要とする場合は、個別のアプリケーションロールを使用します。クラスターまたはノードロールにアプリケーションアクセス許可を付与しないでください。

## ロールの失敗を診断する
<a name="beanstalk-cluster-permissions-diagnosis"></a>

環境の 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 クラスター環境のコンテナイメージの構築](beanstalk-cluster-app-versions.md)」を参照してください。

実行中のアプリケーションは を受け取ります `AccessDenied`  
でアプリケーションロールチェックを使用します[アプリケーションロールを設定する](#beanstalk-cluster-permissions-application-role)。まず認証情報 ID を確認し、アプリケーションログと CloudTrail イベントで拒否されたアクションとリソースをロールポリシーと比較します。