

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

# ステップ 1: Amazon EKS クラスターを設定し、IAM アクセス許可を設定する
<a name="EKS-tutorial-step1"></a>

**Amazon EKS クラスターを設定し、Amazon EKS サービスアカウントから Amazon Keyspaces テーブルへの接続を許可するために必要な IAM リソースを作成する**

1. Amazon EKS クラスターの OpenID Connect (OIDC) プロバイダーを作成します。これは、サービスアカウントで IAM ロールを使用するために必要です。OIDC プロバイダーの詳細とその作成方法については、「Amazon EKS ユーザーガイド**」の「[クラスターの IAM OIDC プロバイダーを作成する](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)」を参照してください。

   1. 次のコマンドを使用して、クラスターの IAM OIDC ID プロバイダーを作成します。この例では、クラスター名を `my-eks-cluster` としています。クラスターの名前が異なる場合は、以降のすべてのコマンドで名前を変更してください。

      ```
      eksctl utils associate-iam-oidc-provider --cluster my-eks-cluster --approve 
      ```

   1. 次のコマンドを使用して、OIDC ID プロバイダーが IAM に登録されていることを確認します。

      ```
      aws iam list-open-id-connect-providers --region us-east-1
      ```

      出力は次のようになります。OIDC の Amazon リソースネーム (ARN) を書き留めておいてください。次の手順でサービスアカウントの信頼ポリシーを作成する際に必要になります。

      ```
      {
          "OpenIDConnectProviderList": [
              ..
              {
                  "Arn": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
              }
          ]
      }
      ```

1. Amazon EKS クラスター用のサービスアカウントを作成します。サービスアカウントで、ポッド**で実行されるプロセス用のアイデンティティを用意できます。ポッドは、最小かつ最もシンプルな Kubernetes オブジェクトであり、コンテナ化されたアプリケーションをデプロイするために使用できます。次に、リソースへのアクセス許可を取得するためにサービスアカウントが引き受けることができる IAM ロールを作成します。その AWS サービスへのアクセス許可を持つ IAM ロールを引き受けることができるサービスアカウントを使用するように設定された Pod から任意のサービスにアクセスできます。

   1. サービスアカウント用の新しい名前空間を作成します。名前空間を使用して、このチュートリアル用に作成したクラスターリソースを分離することができます。次のコマンドを使用して、新しい名前空間を作成できます。

      ```
      kubectl create namespace my-eks-namespace
      ```

   1. カスタムの名前空間を使用するには、その名前空間を Fargate プロファイルに関連付ける必要があります。次のコードは、この例です。

      ```
      eksctl create fargateprofile \
          --cluster my-eks-cluster \
          --name my-fargate-profile \
          --namespace my-eks-namespace \
          --labels *=*
      ```

   1. 次のコマンドを使用して、Amazon EKS クラスターの名前空間 `my-eks-namespace` に `my-eks-serviceaccount` という名前のサービスアカウントを作成します。

      ```
      cat >my-serviceaccount.yaml <<EOF
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: my-eks-serviceaccount
        namespace: my-eks-namespace
      EOF
      kubectl apply -f my-serviceaccount.yaml
      ```

   1. 次のコマンドを実行して、先ほど作成したサービスアカウントを信頼するように IAM ロールに指示する信頼ポリシーファイルを作成します。この信頼関係が確立されていないと、プリンシパルでロールを引き受けることができません。ファイルで以下の編集を行います。
      + `Principal` として、IAM が `list-open-id-connect-providers` コマンドに返した ARN を入力します。ARN には、アカウント番号とリージョンが含まれています。
      + `condition` ステートメントで、 AWS リージョン と OIDC ID を置き換えます。
      + サービスアカウントの名前と名前空間が正しいことを確認します。

      次の手順で IAM ロールを作成するときに、この信頼ポリシーファイルをアタッチする必要があります。

      ```
      cat >trust-relationship.json <<EOF
      {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
                  },
                  "Action": "sts:AssumeRoleWithWebIdentity",
                  "Condition": {
                      "StringEquals": {
                          "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:my-eks-namespace:my-eks-serviceaccount",
                          "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com"
                      }
                  }
              }
          ]
      }
      EOF
      ```

      オプション: `StringEquals` または `StringLike` の条件に複数のエントリを追加して、複数のサービスアカウントや名前空間にロールの引き受けを許可することができます。サービスアカウントが別の AWS アカウントで IAM ロールを引き受けることを許可するには、「Amazon EKS ユーザーガイド**」の「[クロスアカウントの IAM アクセス許可](https://docs.aws.amazon.com/eks/latest/userguide/cross-account-access.html)」を参照してください。

1. Amazon EKS サービスアカウントが引き受ける IAM ロールを `my-iam-role` という名前で作成します。直前の手順で作成した信頼ポリシーファイルをロールにアタッチします。信頼ポリシーには、IAM ロールが信頼できるサービスアカウントと OIDC プロバイダーが指定されています。

   ```
   aws iam create-role --role-name my-iam-role --assume-role-policy-document file://trust-relationship.json --description "EKS service account role"
   ```

1. アクセスポリシーをアタッチして、IAM ロールのアクセス許可を Amazon Keyspaces に割り当てます。

   1. アクセスポリシーをアタッチして、IAM ロールが特定の Amazon Keyspaces リソースに対して実行できるアクションを定義します。このチュートリアルでは、アプリケーションが Amazon Keyspaces テーブルにデータを書き込むため`AmazonKeyspacesFullAccess`、 AWS マネージドポリシー を使用します。ただし、ベストプラクティスとしては、最小特権の原則を実装したカスタムのアクセスポリシーを作成することをお勧めします。詳細については、「[Amazon Keyspaces で IAM が機能する仕組み](security_iam_service-with-iam.md)」を参照してください。

      ```
      aws iam attach-role-policy --role-name my-iam-role --policy-arn=arn:aws:iam::aws:policy/AmazonKeyspacesFullAccess
      ```

      次のステートメントを使用して、ポリシーが IAM ロールに正しくアタッチされたことを確認します。

      ```
      aws iam list-attached-role-policies --role-name my-iam-role
      ```

      出力は次のようになります。

      ```
      {
          "AttachedPolicies": [
              {
                  "PolicyName": "AmazonKeyspacesFullAccess",
                  "PolicyArn": "arn:aws:iam::aws:policy/AmazonKeyspacesFullAccess"
              }
          ]
      }
      ```

   1. サービスアカウントに、引き受け可能な IAM ロールの Amazon リソースネーム (ARN) を注釈として追加します。ロールの ARN にアカウント ID を反映してください。

      ```
      kubectl annotate serviceaccount -n my-eks-namespace my-eks-serviceaccount eks.amazonaws.com/role-arn=arn:aws:iam::111122223333:role/my-iam-role
      ```

1. IAM ロールとサービスアカウントが正しく設定されていることを確認します。

   1. 次のステートメントを使用して、IAM ロールの信頼ポリシーが正しく設定されていることを確認します。

      ```
      aws iam get-role --role-name my-iam-role --query Role.AssumeRolePolicyDocument
      ```

      出力は次のようになります。

      ```
      {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
                  },
                  "Action": "sts:AssumeRoleWithWebIdentity",
                  "Condition": {
                      "StringEquals": {
                          "oidc.eks.us-east-1/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com",
                          "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:my-eks-namespace:my-eks-serviceaccount"
                      }
                  }
              }
          ]
      }
      ```

   1. Amazon EKS サービスアカウントに IAM ロールの注釈が追加されていることを確認します。

      ```
      kubectl describe serviceaccount my-eks-serviceaccount -n my-eks-namespace
      ```

      出力は次のようになります。

      ```
      Name: my-eks-serviceaccount 
      Namespace:my-eks-namespace
      Labels: <none>
      Annotations: eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/my-iam-role 
      Image pull secrets: <none> 
      Mountable secrets: <none> 
      Tokens: <none> 
      [...]
      ```

Amazon EKS サービスアカウントと IAM ロールを作成し、必要な関係とアクセス許可を設定したら、[ステップ 2: アプリケーションを設定する](EKS-tutorial-step2.md) に進んでください。