「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」
サービスアカウントの 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 から有料コンテナイメージを許可するポリシー。
-
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
ナビゲーションパネルで、[ポリシー]、[ポリシーの作成] の順に選択します。
-
[JSON] タブを選択します。
-
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": "*" } ] }
-
[ポリシーの確認] を選択します。
-
ポリシーの名前と説明を入力し、[ポリシーの作成]を選択します。
-
後でロールを作成するときに使用するポリシーの Amazon リソースネーム (ARN) を記録します。
サービスアカウントの IAM ロールを作成する
サービスアカウントの IAM ロールを作成します。、eksctl、または AWS マネジメントコンソール を使用してロールを作成できます。AWS CLI
Prerequisites
-
既存の クラスター。ドメインがない場合は、Amazon EKS の開始方法 ガイドのいずれかを使用して作成できます。
-
または AWS マネジメントコンソール を使用してロールを作成する場合、クラスターに既存の AWS CLI OIDC プロバイダーが必要です。IAM詳細については、「クラスターの IAM OIDC プロバイダーの作成」を参照してください。
-
サービスアカウントがアクセスする必要のある IAM リソースのアクセス権限を含む既存の AWS ポリシー。詳細については、「IAM ポリシーを作成する」を参照してください。
を使用して IAM ロールを作成するには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
ロールを作成し、AWS CloudFormation ポリシーをアタッチする IAM テンプレートがデプロイされます。IAMロールは Kubernetes サービスアカウントに関連付けられています。クラスターに既存の
IAM OIDC プロバイダーがない場合は、作成されています。サービスアカウントが存在しない場合は、指定した名前空間に作成されます。サービスアカウントが存在する場合は、eks.amazonaws.com/role-arn:
arn:aws:iam::<your-account-id>:role/<iam-role-name-that-was-created>
によって注釈が付けられます。
を使用して IAM ロールを作成するにはAWS マネジメントコンソール
-
Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters
. -
クラスターの名前を選択し、[設定] タブを選択します。
-
[詳細] セクションで、[OpenID Connect provider URL (OpenID Connect プロバイダーの URL)] の値をメモします。
-
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
ナビゲーションペインで [ロール]、[ロールの作成] の順に選択します。
-
[Select type of trusted entity (信頼されたエンティティの種類を選択)] セクションで、[Web identity (ウェブ ID)] を選択します。
-
[Choose a web identity provider (ウェブ ID プロバイダーを選択)] セクションで、次の操作を行います。
-
[Identity provider (ID プロバイダー)] で、クラスターの URL を選択します。
-
[Audience (対象者)] で [
sts.amazonaws.com
] を選択します。
-
-
[Next: Permissions (次へ: アクセス許可)] を選択します。
-
[ポリシーのアタッチ] セクションで、 サービスアカウントで使用するアクセス許可のある IAM ポリシー。
-
[次へ: タグ] を選択します。
-
[Add tags (optional) (タグの追加 (オプション))] 画面で、アカウントのタグを追加できます。[次へ: 確認] を選択します。
-
[ロール名] に、ロールの名前を入力します。 続いて、[ロールの作成] を選択します。
-
ロールが作成されたら、コンソールでロールを選択して編集用に開きます。
-
[Trust relationships] タブを選択し、続いて [Edit trust relationship] を選択します。
-
次のような行を変更します。
"oidc.eks.us-west-2.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E:aud": "sts.amazonaws.com"
次のようにするには、
<example values>
(<>
を含む) を独自のものに変更します。"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 認証の使用を参照してください。たとえば、AWS VPC CNI プラグインがデプロイされると、デプロイマニフェストはサービスアカウント、クラスターロール、およびクラスターロールバインディングを作成します。マニフェストは で表示できます。 GitHub -
[Update Trust Policy (信頼ポリシーの更新)] を選択して終了します。
を使用して IAM ロールを作成するにはAWS CLI
-
次のコマンドを使用して、AWS アカウント ID を環境変数に設定します。
AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query "Account" --output text)
-
次のコマンドを使用して、OIDC ID プロバイダーを環境変数に設定します。(
<example values>
を含む) を独自の値に置き換えます。<>
重要 このコマンドで適切な出力を得るには、最低でも AWS CLI のバージョン 1.18.190 または 2.1.7 を使用する必要があります。詳細については、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:\/\///")
-
次のコードブロックをコンピュータにコピーし、
<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
-
前のステップで変更したコードブロックを実行して、
trust.json
という名前のファイルを作成します。 -
次の AWS CLI コマンドを実行して、ロールを作成します。
aws iam create-role --role-name <IAM_ROLE_NAME> --assume-role-policy-document file://trust.json --description "<IAM_ROLE_DESCRIPTION>"
-
次のコマンドを実行して、IAM ポリシーをロールにアタッチします。
aws iam attach-role-policy --role-name <IAM_ROLE_NAME> --policy-arn=<IAM_POLICY_ARN>