サービスアカウントの IAM ロールとポリシーの作成 - Amazon EKS

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

サービスアカウントの IAM ロールとポリシーの作成

ポッド内のコンテナに付与するアクセス許可を指定する IAM ポリシーを作成する必要があります。IAM の新しい権限ポリシーを作成する方法は複数あります。目的の操作のいくつかをすでに実行できる完全な AWS 管理ポリシーをコピーし、特定の要件に応じてカスタマイズできます。詳細については、の「新しいポリシーhttps://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.htmlの作成」を参照してくださいIAM ユーザーガイド

また、Kubernetes サービスアカウントに関連付ける前に、サービスアカウントで使用する IAM ロールを作成する必要があります。信頼関係の範囲はクラスターとサービスアカウントに限定されるため、各クラスターとサービスアカウントの組み合わせには独自のロールが必要です。それから、ポッドのコンテナに必要なアクセス許可を付与するロールに特定の IAM ポリシーをアタッチできます。以下の手順でこれを行う方法について説明します。

IAM ポリシーを作成する

この手順では、アプリケーションに使用できる 2 つのポリシーの例を示します。

  • Amazon S3 バケットへの読み取り専用アクセスを許可するポリシー。このバケットに設定情報またはブートストラップスクリプトを保存できます。ポッドのコンテナは、バケットからファイルを読み取り、アプリケーションにロードできます。

  • から有料コンテナイメージを許可するポリシー。AWS Marketplace.

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションパネルで、[ポリシー]、[ポリシーの作成] の順に選択します。

  3. [JSON] タブを選択します。

  4. [Policy Document] フィールドに、サービスアカウントに適用する次のいずれかのポリシーを貼り付けるか、独自のポリシードキュメントをフィールドに貼り付けます。ビジュアルエディタを使用して独自のポリシーを作成することもできます。

    次の例では、 へのアクセス許可を付与します。<my-pod-secrets-bucket> Amazon S3 バケット。ポリシードキュメントを特定のニーズに応じて変更できます。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::<my-pod-secrets-bucket>/*" ] } ] }

    次の例では、 から有料コンテナイメージを使用するために必要なアクセス許可を付与します。AWS Marketplace.

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "aws-marketplace:RegisterUsage" ], "Effect": "Allow", "Resource": "*" } ] }
  5. ポリシーの確認.] を選択します。

  6. ポリシーの名前と説明を入力し、[ポリシーの作成.]を選択します。

  7. 後でロールを作成するときに使用するポリシーの Amazon リソースネーム (ARN) を記録します。

サービスアカウントの IAM ロールを作成する

サービスアカウントの IAM ロールを作成します。eksctl、、AWS マネジメントコンソールまたは を使用してロールAWS CLIを作成できます。

Prerequisites

  • 既存の クラスター。ない場合は、 の使用を開始するAmazon EKS ガイドのいずれかを使用して作成できます。

  • AWS マネジメントコンソール または を使用してロールAWS CLIを作成する場合は、クラスターの既存の IAM OIDC プロバイダーが必要です。詳細については、「 」を参照してください。クラスターの IAM OIDC プロバイダーを作成する.

  • サービスアカウントがアクセスする必要のあるIAMリソースのアクセス許可を含む既存のAWSポリシー。詳細については、「 」を参照してください。IAM ポリシーを作成する.

ロールはIAM、、、eksctlまたは AWS マネジメントコンソール を使用して作成できますAWS CLI。ロールを作成するツールの名前が付いているタブを選択します。

eksctl

次のコマンドを使用して、サービスアカウントと IAM ロールを作成します。の置き換え <example values> ( を含む <>) を独自の値に置き換えます。

eksctl create iamserviceaccount \ --name <service_account_name> \ --namespace <service_account_namespace> \ --cluster <cluster_name> \ --attach-policy-arn <IAM_policy_ARN> \ --approve \ --override-existing-serviceaccounts

ロールを作成し、そのAWS CloudFormationロールにIAMポリシーをアタッチする IAM テンプレートがデプロイされます。ロールは Kubernetes サービスアカウントに関連付けられています。クラスターに既存の IAM OIDC プロバイダーがない場合、1 つのプロバイダーが作成されました。サービスアカウントが存在しない場合は、指定した名前空間に作成されます。サービスアカウントが存在する場合は、 で注釈が付けられますeks.amazonaws.com/role-arn: arn:aws:iam::<your-account-id>:role/<iam-role-name-that-was-created>

AWS マネジメントコンソール
  1. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.

  2. クラスターの名前を選択し、[設定] タブを選択します。

  3. [詳細] セクションで、[OpenID Connect provider URL (OpenID Connect プロバイダーの URL)] の値をメモします。

  4. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  5. ナビゲーションペインで [ロール]、[ロールの作成] の順に選択します。

  6. [Select type of trusted entity (信頼されたエンティティの種類を選択)] セクションで、[Web identity (ウェブ ID)] を選択します。

  7. [Choose a web identity provider (ウェブ ID プロバイダーの選択)] セクションで、以下の操作を行います。

    1. [ID プロバイダー] で、クラスターの URL を選択します。

    2. Audience (対象者)] で [sts.amazonaws.com.] を選択します。

  8. [Next: Permissions (次へ: アクセス許可)] を選択します。

  9. [ポリシーのアタッチ] セクションで、 IAM サービスアカウントで使用するアクセス許可を持つ ポリシー。

  10. [次へ: タグ] を選択します。

  11. [Add tags (optional) (タグの追加 (オプション))] 画面で、アカウントのタグを追加できます。[次へ: 確認] を選択します。

  12. [ロール名] に、ロールの名前を入力します。 続いて、[ロールの作成] を選択します。

  13. ロールが作成されたら、コンソールでロールを選択して編集用に開きます。

  14. [Trust relationships] タブを選択し、続いて [Edit trust relationship] を選択します。

  15. 次のような行を見つけます。

    "oidc.eks.us-west-2.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E:aud": "sts.amazonaws.com"

    行を次の行のように変更します。置換 <EXAMPLED539D4633E53DE1B716D3041E> ( を含む <>) をクラスターの OIDC プロバイダー ID に置き換え、 <region-code> をクラスターがあるリージョンコードに置き換えます。

    "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B716D3041E>:sub": "system:serviceaccount:<SERVICE_ACCOUNT_NAMESPACE>:<SERVICE_ACCOUNT_NAME>"
    注記

    既存のサービスアカウントがない場合は、作成する必要があります。詳細については、Kubernetes ドキュメントの「Configure Service Accounts for Pods」を参照してください。サービスアカウントで Kubernetes アクセス許可を使用するには、 または を作成しRole、ロールをサービスアカウントにClusterRoleバインドする必要があります。詳細については、Kubernetes ドキュメントの「RBAC 認証https://kubernetes.io/docs/reference/access-authn-authz/rbac/の使用」を参照してください。たとえばAWS、VPC CNI プラグインがデプロイされると、デプロイマニフェストはサービスアカウント、クラスターロール、クラスターロールバインディングを作成します。でマニフェストを表示できますGitHub。

  16. [Update Trust Policy (信頼ポリシーの更新)] を選択して終了します。

AWS CLI
  1. 次のコマンドを使用して、AWS アカウント ID を環境変数に設定します。

    AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query "Account" --output text)
  2. 次のコマンドを使用して、OIDC ID プロバイダーを環境変数に設定します。の置き換え <example values> ( を含む <>) を独自の値に置き換えます。

    重要

    このコマンドで適切な出力を得るには、最低でも 1.19.7 のバージョン 2.1.26 または AWS CLI を使用する必要があります。詳細については、AWS CLIの「AWS Command Line Interface ユーザーガイド のインストール.」を参照してください。

    OIDC_PROVIDER=$(aws eks describe-cluster --name <cluster-name> --query "cluster.identity.oidc.issuer" --output text | sed -e "s/^https:\/\///")
  3. 次のコードブロックをコンピュータにコピーし、 を置き換えます。<example values> ( を含む <>) を独自の値に置き換えます。

    read -r -d '' TRUST_RELATIONSHIP <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::${AWS_ACCOUNT_ID}:oidc-provider/${OIDC_PROVIDER}" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "${OIDC_PROVIDER}:sub": "system:serviceaccount:<my-namespace>:<my-service-account>" } } } ] } EOF echo "${TRUST_RELATIONSHIP}" > trust.json
  4. 前のステップで変更したコードブロックを実行し、 という名前のファイルを作成します。trust.json.

  5. AWS CLI 次のコマンドを実行して、ロールを作成します。

    aws iam create-role --role-name <IAM_ROLE_NAME> --assume-role-policy-document file://trust.json --description "<IAM_ROLE_DESCRIPTION>"
  6. ポリシーをロールにアタッチするにはIAM、次のコマンドを実行します。

    aws iam attach-role-policy --role-name <IAM_ROLE_NAME> --policy-arn=<IAM_POLICY_ARN>