クラスターへの IAM ユーザーおよびロールアクセスを有効にする
AWS IAM エンティティ を使用したクラスターへのアクセスは、Amazon EKS コントロールプレーンで実行される AWS IAM Authenticator for Kubernetesaws-auth
ConfigMap
から取得します。すべての aws-auth
ConfigMap
設定については、GitHub の Full Configuration Format
IAM ユーザーまたはロールを Amazon EKS クラスターに追加する
Amazon EKS クラスターを作成すると、このクラスターを作成した AWS Identity and Access Management (IAM) エンティティユーザーまたはロール (フェデレーティッドユーザーなど) は、Amazon EKS コントロールプレーンのクラスターロールベースアクセスコントロール (RBAC) 設定で、system:masters
アクセス許可が自動的に付与されます。この IAM エンティティは表示可能な設定の中には表示されません。したがって、どの IAM エンティティが最初にクラスターを作成したのかを追跡する必要があります。追加の AWS ユーザーまたはロールがクラスターと対話できるようにするには、Kubernetes 内の aws-auth
ConfigMap
を編集し、aws-auth
ConfigMap
で指定した、名前が group
の Kubernetes rolebinding
または clusterrolebinding
を作成する必要があります。
さまざまな IAM アイデンティティの詳細については、IAM ユーザーガイドの「アイデンティティ (ユーザー、グループ、ロール)」を参照してください。Kubernetes のロールベースアクセスコントロール (RBAC) 設定の詳細については、RBAC 認可の使用
IAM ユーザーまたはロールを Amazon EKS クラスターに追加するには
-
クラスターへのアクセスに
kubectl
が使用している認証情報を判別します。使用中のコンピュータ上で、次のコマンドを使用して、kubectl
が使用する認証情報を判別できます。デフォルトのパスを使用しない場合は、
を~/.kube/config
kubeconfig
ファイルへのパスに置き換えます。cat
~/.kube/config
出力
... contexts: - context: cluster:
my-cluster.region-code.eksctl.io
user:admin@my-cluster.region-code.eksctl.io
name:admin@my-cluster.region-code.eksctl.io
current-context:admin@my-cluster.region-code.eksctl.io
...前述の出力例では、
admin
という名前のユーザーの認証情報がmy-cluster
という名前のクラスター用に設定されています。このユーザーがクラスターを作成したユーザーである場合は、すでにそのクラスターにアクセスできます。クラスターを作成したユーザーでない場合は、残りの手順を実行して、そのユーザーのクラスターへのアクセスを有効にする必要があります (まだ有効にしていない場合)。 -
クラスター内で IAM ユーザーがアクセスできるようにするアクセス許可 (
rules
) を持つ既存の Kubernetesrole
またはclusterrole
があり、Kubernetesgroup
をrole
またはclusterrole
にバインドする既存のKubernetesrolebinding
またはclusterrolebinding
があることを確認します。詳細については、Kubernetes ドキュメントの「RBAC 認証の使用」を参照してください。次のコマンドを使用して、既存の roles
、clusterroles
、rolebindings
、およびclusterrolebindings
をすべて表示できます。kubectl get roles --all-namespaces
kubectl get clusterroles
kubectl get rolebindings --all-namespaces
kubectl get clusterrolebindings
その後、次のコマンドを使用して、任意のリソースの詳細を表示できます。
role
をclusterrole
、rolebinding
、またはclusterrolebinding
に置き換え、role-name
を (前の出力の) リソース名に置き換え、kube-system
を (前の出力の) リソースの名前空間に置き換えることができます。kubectl describe
role
role-name
-nkube-system
-
(オプション)
clusterrole
とclusterrolebinding
またはrole
とrolebinding
を作成して、IAM ユーザーが AWS Management Console のノードとワークロードを表示できるようにします。-
ユーザーが次の Kubernetes リソースを表示できるようにすることができます。
-
クラスター — このマニフェストにより
clusterrole
およびclusterrolebinding
が作成されます。ファイル内のグループ名はeks-console-dashboard-full-access-group
です。このグループに IAM ユーザーまたはロールをaws-auth
ConfigMap
でマッピングする必要があります。必要に応じて、クラスターに適用する前にgroup
名を変更し、ConfigMap
でそのグループに IAM ユーザーまたはロールをマッピングできます。curl -o eks-console-full-access.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/docs/eks-console-full-access.yaml
-
特定の名前空間— このマニフェストにより
role
およびrolebinding
が作成されます。このファイルの名前空間はdefault
です。別の名前空間を指定する場合は、クラスターに適用する前にファイルを編集します。ファイル内のグループ名はeks-console-dashboard-restricted-access-group
です。このグループに IAM ユーザーまたはロールをaws-auth
ConfigMap
でマッピングする必要があります。必要に応じて、クラスターに適用する前にグループ名を変更し、ConfigMap
でそのグループに IAM ユーザーまたはロールをマッピングできます。curl -o eks-console-restricted-access.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/docs/eks-console-restricted-access.yaml
-
-
次のいずれかのコマンドを使用して、適切なマニフェストを適用します。
kubectl apply -f eks-console-full-access.yaml
kubectl apply -f eks-console-restricted-access.yaml
-
-
aws-auth
ConfigMap
を編集します。-
編集する
ConfigMap
を開きます。kubectl edit -n kube-system configmap/aws-auth
注記 「
Error from server (NotFound): configmaps "aws-auth" not found
」というエラーが表示された場合は、aws-auth ConfigMap をクラスターに適用する の手順を使用してストックConfigMap
を適用します。 -
IAM ユーザー、ロール、または AWS アカウントを
ConfigMap
に追加します。IAM グループをConfigMap
に追加することはできません。-
IAM ロールを (たとえば、フェデレーティッドユーザーに) 追加するには、
ConfigMap
のmapRoles
セクションのdata
の下にロールの詳細を追加します。ファイルに存在しない場合は、このセクションを追加します。各エントリは、次のパラメータをサポートしています。-
rolearn: 追加する IAM ロールの ARN。この値にパスを含めることはできません。指定する値の形式は
arn:aws:iam::
にする必要があります。詳細については、「aws-auth ConfigMap がクラスターへのアクセスを許可しない」を参照してください。111122223333
:role/role-name
-
username: IAM ロールにマッピングする Kubernetes 内のユーザー名。
-
groups: ロールがマッピングされている、Kubernetes 内のグループのリスト。詳細については、Kubernetes ドキュメントのデフォルトのロールとロールのバインディング
を参照してください。
-
-
IAM ユーザーを追加するには: ConfigMap の
mapUsers
セクション (data
の下) にユーザーの詳細を追加します。ファイルに存在しない場合は、このセクションを追加します。各エントリは、次のパラメータをサポートしています。-
userarn: 追加する IAM ユーザーの ARN。
-
username: IAM ユーザーにマッピングする Kubernetes 内のユーザー名。
-
groups: ユーザーがマッピングされている、Kubernetes 内のグループのリスト。詳細については、Kubernetes ドキュメントのデフォルトのロールとロールのバインディング
を参照してください。
-
例えば、次のブロックには以下が含まれます。
-
mapRoles
セクションには、ノードが自分をクラスターに登録できるように、ノードインスタンスロールを追加します。 -
mapUsers
セクションには、デフォルトの AWS アカウントの AWS ユーザーadmin
と、別の AWS アカウントの 2 つのオペレーションユーザーが含まれます。admin
ユーザーがsystem:masters
Kubernetes グループに追加されます。オペレーションユーザーは、前のステップのマニフェストによって作成された
role
、rolebinding
、clusterrole
、clusterrolebinding
で使用される Kubernetes グループに追加されますが、好みのグループに置き換えることができます。ユーザーが AWS Management Console の ノード と ワークロード を表示できるようにするには、次の例のマッピングと、前のステップのマニフェストによって作成されたrole
とrolebinding
またはclusterrole
とclusterrolebinding
が必要です。
すべての
を自分の値に置き換えてください。example-values
# Please edit the object below. Lines beginning with a '#' will be ignored, # and an empty file will abort the edit. If an error occurs while saving this file will be # reopened with the relevant failures. # apiVersion: v1 data: mapRoles: | - rolearn:
arn:aws:iam::111122223333:role/eksctl-my-cluster-nodegroup-standard-wo-NodeInstanceRole-1WP3NUE3O6UCF
username:system:node:{{EC2PrivateDNSName}}
groups: -system:bootstrappers
-system:nodes
mapUsers: | - userarn:arn:aws:iam::111122223333:user/admin
username:admin
groups: -system:masters
- userarn:arn:aws:iam::444455556666:user/ops-user
username:ops-user
groups: -eks-console-dashboard-full-access-group
- userarn:arn:aws:iam::444455556666:user/ops-user2
username:ops-user2
groups: -eks-console-dashboard-restricted-access-group
-
-
ファイルを保存し、テキストエディタを終了します。
-
aws-auth
ConfigMap をクラスターに適用する
マネージド型ノードグループを作成するとき、または aws-auth
を使用してノードグループを作成するときに、ConfigMap
eksctl
が自動的に作成され、クラスターに適用されます。これはノードをクラスターに追加するために当初作成されたものですが、この ConfigMap
を使用して、ロールベースアクセスコントロール (RBAC) アクセスを IAM ユーザーとロールに追加することもできます。セルフマネージド型ノードを起動しておらず、クラスターに aws-auth
ConfigMap
を適用していない場合は、次の手順に従って適用できます。
aws-auth
ConfigMap
をクラスターに適用するには
-
aws-auth
ConfigMap
が適用済みであるかどうかを確認します。kubectl describe configmap -n kube-system aws-auth
「
Error from server (NotFound): configmaps "aws-auth" not found
」というエラーが表示された場合は、以下のステップを実行してストックConfigMap
を適用します。 -
AWS オーセンティケーター設定マップをダウンロード、編集、適用します。
-
設定マップをダウンロードします。
curl -o aws-auth-cm.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-10-29/aws-auth-cm.yaml
-
テキストエディタで ファイルを開きます。
をノードに関連付けられている IAM ロールの Amazon Resource Name (ARN) に置き換え、ファイルを保存します。このファイルの他の行は変更しないでください。<ARN of instance role (not instance profile)>
重要 ロール ARN にパスを含めることはできません。ロール ARN の形式は
arn:aws:iam::
であることが必要です。詳細については、「aws-auth ConfigMap がクラスターへのアクセスを許可しない」を参照してください。111122223333
:role/role-name
apiVersion: v1 kind: ConfigMap metadata: name: aws-auth namespace: kube-system data: mapRoles: | - rolearn:
<ARN of instance role (not instance profile)>
username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodesノードグループの AWS CloudFormation スタック出力を検査し、次の値を探すことができます。
-
InstanceRoleARN –
eksctl
で作成されたノードグループ用 -
NodeInstanceRole – AWS Management Console で、Amazon EKS で発行された AWS CloudFormation テンプレートで作成されたノードグループ用
-
-
設定を適用します。このコマンドが完了するまで数分かかることがあります。
kubectl apply -f aws-auth-cm.yaml
注記 その他の認可またはリソースタイプのエラーが発生した場合は、トラブルシューティングセクションの「許可されていないか、アクセスが拒否されました (kubectl)」を参照してください。
-
-
ノードのステータスを監視し、
Ready
ステータスになるまで待機します。kubectl get nodes --watch