Global outage event
If you’re experiencing issues with your AWS services, then please refer to the AWS Health Dashboard. You can find the overall status of ongoing outages, the health of AWS services, and the latest updates from AWS engineers.
Amazon EKS クラスターで IAM ユーザーの名前空間全体でアクセス許可を管理する方法を教えてください。
Amazon Elastic Kubernetes Service (Amazon EKS) クラスター内の名前空間全体で AWS Identity and Access Management (IAM) ユーザーのユーザーアクセス許可を管理したいと考えています。
簡単な説明
Amazon EKS クラスター内の名前空間全体でユーザーの権限を管理するには、次の手順を実行します。
- 組織のメンバーが引き受ける IAM ロールを作成します。
- クラスターの Kubernetes ロールベースのアクセス制御 (RBAC) ロール (Role) とロールバインディング (RoleBinding) を作成します。詳細については、Kubernetes ウェブサイトの「Using RBAC authorization」を参照してください。
- aws-auth ConfigMap を使用して、IAM ロールを RBAC ロールおよびグループにマッピングします。
**注:**IAM ユーザーまたはロールがクラスターを作成すると、この IAM アイデンティティの ARN のみが aws-auth ConfigMap に追加され、system: masters 権限が付与されます。つまり、aws-auth ConfigMap にユーザーまたはロールを追加できるのはクラスターの作成者のみです。
解決策
**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
組織のメンバーが引き受けられる IAM ロールを作成する
IAM ロールを作成して、組織のメンバーに名前空間へのアクセス権を付与します。
-
ユーザーに IAM ロールを引き受ける権限があることを確認するには、AWS CLI を設定します。次に、そのユーザーのワークステーションから次のコマンドを実行します。
$ aws sts assume-role --role-arn arn:aws:iam::yourAccountID:role/yourIAMRoleName --role-session-name abcde{ "Credentials": { "AccessKeyId": "yourAccessKeyId", "SecretAccessKey": "yourSecretAccessKey", "SessionToken": "yourSessionToken", "Expiration": "2020-01-30T01:57:17Z" }, "AssumedRoleUser": { "AssumedRoleId": "yourAssumedRoleId", "Arn": "arn:aws:iam::yourAccountID:role/yourIAMRoleName" } }**注:**yourAccessKeyId、yourSecretAccessKey、yourSessionToken、yourAssumedRoleId、yourAccountID、yourIAMRoleName は、ご自身の値に置き換えてください。
-
kubeconfig ファイルを更新して、IAM ユーザーの kubectl が Kubernetes API にアクセスするときに常にそのロールを使用するように設定します。
$ aws eks update-kubeconfig --name yourClusterName --role-arn arn:aws:iam::yourAccountID:role/yourIAMRoleName**注:**yourClusterName、yourAccountID、yourIAMRoleName は、ご自身の値に置き換えてください。
クラスター用の Kubernetes RBAC ロールとロールバインディングを作成する
**重要:**Kubernetes にアクセスするように設定されたワークステーションから、次の手順を実行する必要があります。クラスターの作成者であるか、既に aws-authConfigMap を介してアクセスできる IAM ID である必要があります。IAM ロールにはまだクラスターへのアクセス権がありません。
クラスターロール (ClusterRole) をロールバインディングにバインドします。RBAC ロールとロールバインディングは Kubernetes の名前空間リソースです。ただし、ロールをクラスターロールバインディング (ClusterRoleBinding) にバインドすることはできません。
-
次のコマンドを実行してすべての組み込みクラスターロールを一覧表示し、クラスターロール管理者を名前空間のロールバインディングにバインドします。
$ kubectl get clusterrole -
次のコマンドを実行して、クラスターロール管理者に関連付けられている権限を確認します。
$ kubectl describe clusterrole admin -
test という名前の名前空間を作成して、IAM グループの一部として IAM ユーザーにアクセス権を付与します。
**注:**別の名前を選択した場合は、名前空間パラメータの値を置き換えてください。既存の名前空間を使用するには、手順 4 に進みます。$ kubectl create namespace test -
Kubernetes RBAC ロールを作成するには、次のコードを新しい YAML ファイル (role.yaml など) にコピーします。** **
kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: k8s-test-role namespace: test rules: - apiGroups: - "" - "apps" - "batch" - "extensions" resources: - "configmaps" - "cronjobs" - "deployments" - "events" - "ingresses" - "jobs" - "pods" - "pods/attach" - "pods/exec" - "pods/log" - "pods/portforward" - "secrets" - "services" verbs: - "create" - "delete" - "describe" - "get" - "list" - "patch" - "update"**注:**Kubernetes RBAC ロールが付与されたユーザーは、verbs セクションのすべてのアクションを実行できます。
-
次のコマンドを実行して RBAC ロールを作成します。
$ kubectl apply -f role.yaml -
Kubernetes ロールバインディングを作成します。次のコードを新しい YAML ファイル (rolebinding.yaml など) にコピーします。
kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: k8s-test-rolebinding namespace: test subjects: - kind: User name: k8s-test-user roleRef: kind: Role name: k8s-test-role apiGroup: rbac.authorization.k8s.io**注:**ロールバインディングは、roleRef セクションの RBAC ロールを subjects セクションのユーザーにバインドする名前空間付きリソースです。Kubernetes には user リソースタイプがないため、k8s-test-user ユーザーを作成する必要はありません。
-
次のコマンドを実行して RBAC ロールバインディングを作成します。
$ kubectl apply -f rolebinding.yaml
aws-auth ConfigMAP を使用して IAM ロールを RBAC ロールおよびグループにマッピングします。
次のコマンドを実行して、yourIAMRoleName IAM ロールを k8s-test-user Kubernetes ユーザーに関連付けます。
$ eksctl create iamidentitymapping --cluster yourClusterName --arn arn:aws:iam::yourAccountID:role/yourIAMRoleName --username k8s-test-user
**注:**yourClusterName、yourAccountID、yourIAMRoleName は、ご自身の値に置き換えてください。
名前空間へのアクセスをテストする
- 次のコマンドを実行して、test 名前空間へのアクセスをテストします。
**注:**上記のコマンドは、作成した k8s-test-role RBAC ロールを使用するジョブを作成します。$ kubectl create job hello -n test --image=busybox -- echo "Hello World" - 次のコマンドを実行して、test 名前空間のポッドとジョブを確認します。
$ kubectl get job -n testNAME COMPLETIONS DURATION AGE hello 1/1 4s 15s $ kubectl get pods -n test NAME READY STATUS RESTARTS AGE hello-tpjmf 0/1 Completed 0 2m34s
- トピック
- Containers
- 言語
- 日本語

