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

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

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

ポッド内のコンテナに付与するアクセス許可を指定する IAM ポリシーを作成する必要があります。IAM の新しい権限ポリシーを作成する方法は複数あります。目的の操作のいくつかをすでに実行できる完全な AWS 管理ポリシーをコピーし、特定の要件に応じてカスタマイズできます。詳細については、次のガイドの「新しいポリシーの作成」を参照してください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

を使用してサービスアカウントを作成するにはeksctl

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

注記

このコマンドは、 で作成されたクラスターでのみ使用できますeksctl。 でクラスターを作成していない場合は、 eksctl AWS マネジメントコンソールまたは タブの手順を使用します。AWS CLI

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

IAM ロールを作成し、IAM ポリシーをアタッチした AWS CloudFormation テンプレートがデプロイされました。ロールは Kubernetes サービスアカウントに関連付けられました。

でサービスアカウントを作成するにはAWS マネジメントコンソール

  1. クラスターの Amazon EKS コンソールの説明から OIDC 発行者 URL を取得するか、次の AWS CLI コマンドを使用します。

    重要

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

    aws eks describe-cluster --name <cluster_name> --query "cluster.identity.oidc.issuer" --output text
  2. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

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

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

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

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

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

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

  7. [Attach Policy (ポリシーをアタッチする)] セクションで、サービスアカウントに使用するポリシーを選択します。[Next (次へ)] を選択します。タグ.

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

  9. [Role Name (ロール名)] にロール名を入力し、[Create Role (ロールの作成)] を選択します。

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

  11. [信頼関係] タブを選択してから、[信頼関係の編集] を選択します。

    1. OIDC プロバイダーのサフィックスを編集し、:aud から :sub に変更します。

    2. sts.amazonaws.com をサービスアカウント ID に置き換えます。

    3. 必要に応じて、<region-code>ステップ 1 の出力で返されたリージョンコードに変更します。

    結果の行は次のようになります。

    "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B716D3041E>:sub": "system:serviceaccount:<SERVICE_ACCOUNT_NAMESPACE>:<SERVICE_ACCOUNT_NAME>"
  12. [Update Trust Policy (信頼ポリシーの更新)] を選択して終了します。

  13. IAM ロールを Kubernetes サービスアカウントに関連付けます。詳細については、を参照してください サービスアカウントの IAM ロールの指定

を使用してサービスアカウントを作成するにはAWS CLI

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

    AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query "Account" --output text)
  2. 次のコマンドを使用して、OIDC ID プロバイダーを環境変数に設定します。クラスター名を置き換えます。

    重要

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

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

    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:<namespace>:<service-account-name>" } } } ] } EOF echo "${TRUST_RELATIONSHIP}" > trust.json
  4. 前のステップで変更したコードブロックを実行して、trust.json という名前のファイルを作成します。

  5. 次の AWS CLI コマンドを実行してロールを作成し、IAM ロール名と説明を置き換えます。

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

    aws iam attach-role-policy --role-name <IAM_ROLE_NAME> --policy-arn=<IAM_POLICY_ARN>
  7. IAM ロールを Kubernetes サービスアカウントに関連付けます。詳細については、を参照してください サービスアカウントの IAM ロールの指定