Amazon Elastic Kubernetes Service (Amazon EKS) クラスターへのアクセスを許可しようとする際に問題が発生しています。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
Amazon EKS アクセスエントリを使用して Kubernetes API へのアクセス許可を AWS Identity and Access Management (IAM) ユーザーとロールに付与します。
IAM プリンシパルのアクセス許可を設定する
IAM プリンシパルには、クラスターに対する次のアクセス許可が必要です。
- CreateAccessEntry
- ListAccessEntries
- DescribeAccessEntry
- DeleteAccessEntry
- UpdateAccessEntry
- ListAccessPolicies
- AssociateAccessPolicy
- DisassociateAccessPolicy
Amazon EKS のアクセス許可に関する詳細については、「Amazon Elastic Kubernetes サービスが定義するアクション」を参照してください。
アクセスポリシーのアクセス許可を設定する
アクセスポリシーにより、Kubernetes API へのユーザーアクセスを許可するアクセスレベルを設定します。次のポリシーを使用してアクセスエントリを作成します。
上記のポリシーを使用してアクセスエントリを作成すると、Kubernetes クラスターレベルのアクセス許可で名前空間へのアクセスが付与されます。
注: アクセスポリシーの内容は変更できず、独自のアクセスポリシーを作成することもできません。
IAM ユーザーに Amazon EKS クラスターへのアクセス許可を付与する
認証モードを変更する
重要: アクセスエントリのメソッドを有効にした後に、再び無効にすることはできません。
アクセスエントリを使用するには、Amazon EKS クラスターの認証モードを API または API_AND_CONFIG_MAP に更新します。次のAWS CLI コマンド update-cluster-config を実行します。
aws eks update-cluster-config \
--name my-cluster \
--access-config authenticationMode=API_AND_CONFIG_MAP
注: my-cluster は実際のクラスター名に置き換えます。ConfigMap メソッドを完全に無効化するには、API_AND_CONFIG_MAP を API に置き換えます。
IAM エンティティのアクセスエントリを作成し、アクセスポリシーをアタッチする
Amazon EKS クラスターへのクラスター管理者アクセスを付与します。まず、次の create-access-entry コマンドを実行して IAM ユーザーまたはロール用のアクセスエントリを作成します。
aws eks create-access-entry --cluster-name my-cluster \
--principal-arn arn:aws:iam::111122223333:user/example-user
注: 実際のものでそれぞれ、my-cluster をクラスター名に、arn:aws:iam::111122223333:user/example-user を IAM ロールまたはユーザーの ARN に置き換えます。
次に、以下の associate-access-policy コマンドを実行し、AmazonEKSClusterAdminPolicy を IAM ユーザーまたはロールに関連付けます。
aws eks associate-access-policy --cluster-name my-cluster\
--principal-arn arn:aws:iam::111122223333:user/example-user \
--policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
--access-scope type=cluster
注: 実際のものでそれぞれ、my-cluster をクラスター名に、arn:aws:iam::111122223333:user/example-user を IAM ロールまたはユーザーの ARN に置き換えます。
IAM ユーザーまたはロールに特定の名前空間への管理者アクセス許可sを付与するには、次の associate-access-policy コマンドを実行します。
aws eks associate-access-policy --cluster-name my-cluster\
--principal-arn arn:aws:iam::111122223333:role/example-role \
--policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSAdminPolicy \
--access-scope type=namespace,namespaces=test*
注: 実際のものでそれぞれ、my-cluster をクラスター名に、arn:aws:iam::111122223333:role/example-role を IAM ロールまたはユーザーの ARN に置き換えます。さらに、test を実際の名前空間名に置き換えます。
Kubernetes のロールベースアクセスコントロール (RBAC) でアクセスエントリを使用するには、次の create-access-entry コマンドを実行します。
aws eks create-access-entry --cluster-name my-cluster \
--principal-arn arn:aws:iam::111122223333:role/example-role-2 \
--kubernetes-groups viewers
注: 実際のものでそれぞれ、my-cluster をクラスター名に、arn:aws:iam::111122223333:user/example-role-2 を IAM ロールまたはユーザーの ARN に置き換えます。viewers は、実際のクラスターにある Kubernetes の RoleBinding または ClusterRoleBinding オブジェクトで指定したグループ名に置き換えます。
IAM エンティティの認証情報を確認する
AWS CLI で使用している IAM ユーザーまたはロールの認証情報を確認するには、次の get-caller-identity コマンドを実行します。
aws sts get-caller-identity
コマンド出力からは、アクセスエントリを作成した対象である IAM ユーザーまたはロールが返される必要があります。別の IAM ロールまたはユーザーが表示される場合は、ロールまたはユーザーの認証情報が正しく設定されていることを確認してください。
IAM エンティティ用の Kubeconfig を作成する
IAM ロールまたはユーザー用の Kubeconfig を作成するには、次の update-kubeconfig コマンドを実行します。
aws eks update-kubeconfig --name my-cluster --region aws-region
注: my-cluster を実際のクラスター名に置き換え、aws-region をお使いの AWS リージョンに置き換えます。
Kubernetes へのアクセスを確認する
IAM エンティティが認証されており、Amazon EKS クラスターリソースにアクセスできることを確認します。
任意の名前空間にポッドを作成できるかどうかを確認するには、次のコマンドを実行します。
kubectl auth can-i create pods --all-namespaces
特定の名前空間のデプロイを一覧表示できるかどうかを確認するには、次のコマンドを実行します。
kubectl auth can-i list deployments.apps -n test
注: test を実際の名前空間名に置き換えます。