翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon EKS クラスターを設定し、Amazon EKS サービスアカウントから Amazon Keyspaces テーブルへの接続を許可するために必要な IAM リソースを作成する
-
Amazon EKS クラスターの OpenID Connect (OIDC) プロバイダーを作成します。これは、サービスアカウントで IAM ロールを使用するために必要です。OIDC プロバイダーの詳細とその作成方法については、「Amazon EKS ユーザーガイド」の「クラスターの IAM OIDC プロバイダーを作成する」を参照してください。
次のコマンドを使用して、クラスターの IAM OIDC ID プロバイダーを作成します。この例では、クラスター名を
my-eks-cluster
としています。クラスターの名前が異なる場合は、以降のすべてのコマンドで名前を変更してください。eksctl utils associate-iam-oidc-provider --cluster
my-eks-cluster
--approve次のコマンドを使用して、OIDC ID プロバイダーが IAM に登録されていることを確認します。
aws iam list-open-id-connect-providers --region
aws-region
出力は次のようになります。OIDC の Amazon リソースネーム (ARN) を書き留めておいてください。次の手順でサービスアカウントの信頼ポリシーを作成する際に必要になります。
{ "OpenIDConnectProviderList": [ .. { "Arn": "arn:aws:iam::
111122223333
:oidc-provider/oidc.eks.aws-region
.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
" } ] }
-
Amazon EKS クラスター用のサービスアカウントを作成します。サービスアカウントで、ポッドで実行されるプロセス用のアイデンティティを用意できます。ポッドは、最小かつ最もシンプルな Kubernetes オブジェクトであり、コンテナ化されたアプリケーションをデプロイするために使用できます。次に、リソースへのアクセス許可を取得するためにサービスアカウントが引き受けることができる IAM ロールを作成します。サービスアカウントが引き受け可能な IAM ロールで AWS サービスへのアクセスが許可されている場合、そのサービスアカウントを使用するように設定されたポッドからそのサービスにアクセスできます。
サービスアカウント用の新しい名前空間を作成します。名前空間を使用して、このチュートリアル用に作成したクラスターリソースを分離することができます。次のコマンドを使用して、新しい名前空間を作成できます。
kubectl create namespace
my-eks-namespace
カスタムの名前空間を使用するには、その名前空間を Fargate プロファイルに関連付ける必要があります。次のコードは、この例です。
eksctl create fargateprofile \ --cluster
my-eks-cluster
\ --namemy-fargate-profile
\ --namespacemy-eks-namespace
\ --labels*
=*
次のコマンドを使用して、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
次のコマンドを実行して、先ほど作成したサービスアカウントを信頼するように 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.aws-region
.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.aws-region
.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
:sub": "system:serviceaccount:my-eks-namespace
:my-eks-serviceaccount
", "oidc.eks.aws-region
.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
:aud": "sts.amazonaws.com" } } } ] } EOFオプション:
StringEquals
またはStringLike
の条件に複数のエントリを追加して、複数のサービスアカウントや名前空間にロールの引き受けを許可することができます。サービスアカウントが別の AWS アカウントで IAM ロールを引き受けることを許可するには、「Amazon EKS ユーザーガイド」の「クロスアカウントの IAM アクセス許可」を参照してください。
-
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" -
アクセスポリシーをアタッチして、IAM ロールのアクセス許可を Amazon Keyspaces に割り当てます。
アクセスポリシーをアタッチして、IAM ロールが特定の Amazon Keyspaces リソースに対して実行できるアクションを定義します。このチュートリアルでは、アプリケーションから Amazon Keyspaces テーブルにデータを書き込むため、AWS マネージドポリシーである
AmazonKeyspacesFullAccess
を使用します。ただし、ベストプラクティスとしては、最小特権の原則を実装したカスタムのアクセスポリシーを作成することをお勧めします。詳細については、「Amazon Keyspaces と の連携方法 IAM」を参照してください。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" } ] }
サービスアカウントに、引き受け可能な 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
IAM ロールとサービスアカウントが正しく設定されていることを確認します。
次のステートメントを使用して、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.
aws-region
.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.aws-region
/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com", "oidc.eks.aws-region
.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:my-eks-namespace:my-eks-serviceaccount" } } } ] }Amazon EKS サービスアカウントに IAM ロールの注釈が追加されていることを確認します。
kubectl describe serviceaccount
my-eks-serviceaccount
-nmy-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: アプリケーションを設定する に進んでください。