このページの改善にご協力ください
本ユーザーガイドの改善にご協力いただけませんか? すべてのページの右側のペインにある GitHub リンクで、このページの編集を選択してください。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。
ConfigMap を使用して Kubernetes へのアクセスを IAM ユーザーに許可する
重要
aws-auth ConfigMap
は非推奨になりました。Kubernetes API へのアクセスを管理する推奨手段については、「EKS アクセスエントリを使用して Kubernetes へのアクセスを IAM ユーザーに許可する」を参照してください。
IAM プリンシパルを使用してクラスターにアクセスします。プリンシパルは、Amazon EKS コントロールプレーンで実行される AWS IAM Authenticator for Kubernetesaws-auth
ConfigMap
から取得します。すべての aws-auth
ConfigMap
設定については、GitHub の「完全な設定形式
Amazon EKS クラスターに IAM プリンシパルを追加する
Amazon EKS クラスターを作成すると、このクラスターを作成する IAM プリンシパルには、Amazon EKS コントロールプレーンのクラスターロールベースアクセスコントロール (RBAC) 設定で、system:masters
許可が自動的に付与されます。このプリンシパルは表示可能な設定の中には表示されません。したがって、どのプリンシパルが最初にクラスターを作成したのかを追跡する必要があります。追加の IAM プリンシパルがクラスターとインタラクションできるようにするには、Kubernetes 内の aws-auth ConfigMap
を編集し、aws-auth ConfigMap
で指定したgroup
の名前を使用して、Kubernetes rolebinding
またはclusterrolebinding
を作成します。
注記
Kubernetes ロールベースのアクセスコントロール (RBAC) の設定の詳細については、Kubernetes ドキュメントの「RBAC 承認の使用
-
クラスターへのアクセスに
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 プリンシパルのクラスターへのアクセスを有効にする必要があります。IAM のベストプラクティスでは、ユーザーではなくロールに許可を付与することが推奨されています。次のコマンドを使用すると、現在クラスターへのアクセスが可能な、他のプリンシパルを確認できます。kubectl describe -n kube-system configmap/aws-auth
出力例は次のとおりです。
Name: aws-auth Namespace: kube-system Labels: <none> Annotations: <none> Data ==== mapRoles: ---- - groups: - system:bootstrappers - system:nodes rolearn: arn:aws:iam::111122223333:role/my-node-role username: system:node:{{EC2PrivateDNSName}} BinaryData ==== Events: <none>
前の例は、デフォルトの
aws-auth
ConfigMap
です。ノードインスタンスのロールだけがクラスターにアクセスできます。 -
IAM プリンシパルをマッピングできる既存の Kubernetes
roles
とrolebindings
またはclusterroles
とclusterrolebindings
があることを確認してください。これらのリソースの詳細については、Kubernetes ドキュメント の「RBAC 認可の使用」を参照してください。 -
既存の Kubernetes
roles
またはclusterroles
を表示します。Roles
はnamespace
にスコープされますが、clusterroles
はクラスターにスコープされます。kubectl get roles -A
kubectl get clusterroles
-
前の出力で返された
role
またはclusterrole
の詳細を表示します。クラスター内で IAM プリンシパルに必要となる許可 (rules
) があることを確認します。前のコマンド出力で返された
role-name
を、role
の名前に置き換えます。kube-system
を、role
の名前空間に置き換えます。kubectl describe role role-name -n kube-system
cluster-role-name
を、前のコマンドの出力で返されたclusterrole
名に置き換えます。kubectl describe clusterrole cluster-role-name
-
既存の Kubernetes
rolebindings
またはclusterrolebindings
を表示します。Rolebindings
はnamespace
にスコープされますが、clusterrolebindings
はクラスターにスコープされます。kubectl get rolebindings -A
kubectl get clusterrolebindings
-
rolebinding
またはclusterrolebinding
の詳細を表示して、前のステップでroleRef
としてリストされたrole
またはclusterrole
、そしてsubjects
にリストされたグループ名があることを確認します。role-binding-name
を、前のコマンドの出力で返されたrolebinding
の名前に置き換えます。kube-system
は、rolebinding
のnamespace
で置き換えます。kubectl describe rolebinding role-binding-name -n kube-system
出力例は次のとおりです。
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: eks-console-dashboard-restricted-access-role-binding namespace: default subjects: - kind: Group name: eks-console-dashboard-restricted-access-group apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: eks-console-dashboard-restricted-access-role apiGroup: rbac.authorization.k8s.io
cluster-role-binding-name
は、前のコマンドの出力で返されたclusterrolebinding
の名前で置き換えます。kubectl describe clusterrolebinding cluster-role-binding-name
出力例は次のとおりです。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: eks-console-dashboard-full-access-binding subjects: - kind: Group name: eks-console-dashboard-full-access-group apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: eks-console-dashboard-full-access-clusterrole apiGroup: rbac.authorization.k8s.io
-
-
aws-auth
ConfigMap
を編集します。eksctl
のようなツールによりConfigMap
を更新することができます。あるいは、手動で編集しての更新も可能です。重要
ConfigMap
の編集には、eksctl
や、その他のツールを使用することをお勧めします。使用できる他のツールについては、Amazon EKS ベストプラクティスガイドの「ツールを使用して aws-authConfigMap を変更する」を参照してください。 aws-auth
ConfigMap
の形式が不適切な場合、クラスターへのアクセスが失われる場合があります。-
eksctl で configmap を編集するステップを表示します。
-
configmap を手動で編集するステップを表示します。
-
Eksctl で Configmap を編集する
-
デバイスまたは AWS CloudShell にインストールされている
eksctl
コマンドラインツールのバージョン0.199.0
以降が必要です。eksctl
をインストールまたはアップグレードするには、eksctl
ドキュメントの「インストール」を参照してください。 -
ConfigMap
に現在のマッピングを表示します。my-cluster
の部分は、自分のクラスター名に置き換えます。region-code
を、クラスターのある AWS リージョンに置き換えます。eksctl get iamidentitymapping --cluster my-cluster --region=region-code
出力例は次のとおりです。
ARN USERNAME GROUPS ACCOUNT arn:aws:iam::111122223333:role/eksctl-my-cluster-my-nodegroup-NodeInstanceRole-1XLS7754U3ZPA system:node:{{EC2PrivateDNSName}} system:bootstrappers,system:nodes
-
ロールのマッピングを追加します。
my-role
を実際のロールの名前に置き換えます。eks-console-dashboard-full-access-group
を、KubernetesRoleBinding
またはClusterRoleBinding
で指定されたグループの名前に置き換えます。111122223333
は、ご自分のアカウント ID に置き換えます。管理者
を任意の名前に置き換えることができます。eksctl create iamidentitymapping --cluster my-cluster --region=region-code \ --arn arn:aws:iam::111122223333:role/my-role --username admin --group eks-console-dashboard-full-access-group \ --no-duplicate-arns
重要
ロールの ARN には、
role/my-team/developers/my-role
などのパスを含めることはできません。ロールの ARN は、arn:aws:iam::
のような形式にする必要があります。この例では、111122223333
:role/my-role
my-team/developers/
を削除する必要があります。出力例は次のとおりです。
[...] 2022-05-09 14:51:20 [ℹ] adding identity "{arn-aws}iam::111122223333:role/my-role" to auth ConfigMap
-
ユーザーのマッピングを追加します。IAM のベストプラクティスでは、ユーザーではなくロールに許可を付与することが推奨されています。
my-user
を、ご自身のユーザー名に置き換えます。eks-console-dashboard-restricted-access-group
を、KubernetesRoleBinding
またはClusterRoleBinding
オブジェクトで指定されたグループの名前に置き換えます。111122223333
は、ご自分のアカウント ID に置き換えます。my-user
を任意の名前に置き換えることができます。eksctl create iamidentitymapping --cluster my-cluster --region=region-code \ --arn arn:aws:iam::111122223333:user/my-user --username my-user --group eks-console-dashboard-restricted-access-group \ --no-duplicate-arns
出力例は次のとおりです。
[...] 2022-05-09 14:53:48 [ℹ] adding identity "arn:aws:iam::111122223333:user/my-user" to auth ConfigMap
-
ConfigMap
のマッピングを再度表示します。eksctl get iamidentitymapping --cluster my-cluster --region=region-code
出力例は次のとおりです。
ARN USERNAME GROUPS ACCOUNT arn:aws:iam::111122223333:role/eksctl-my-cluster-my-nodegroup-NodeInstanceRole-1XLS7754U3ZPA system:node:{{EC2PrivateDNSName}} system:bootstrappers,system:nodes arn:aws:iam::111122223333:role/admin my-role eks-console-dashboard-full-access-group arn:aws:iam::111122223333:user/my-user my-user eks-console-dashboard-restricted-access-group
Configmap を手動で編集する
-
編集する
ConfigMap
を開きます。kubectl edit -n kube-system configmap/aws-auth
注記
「
Error from server (NotFound): configmaps "aws-auth" not found
」というエラーが表示された場合は、「aws-auth ConfigMap をクラスターに適用する」の手順を使用して、ストックConfigMap
を適用します。 -
IAM プリンシパルを
ConfigMap
に追加します。IAM グループは IAM プリンシパルではないため、ConfigMap
に追加できません。-
IAM ロールを (たとえば、フェデレーティッドユーザーに) 追加するには、
ConfigMap
のmapRoles
セクションのdata
の下にロールの詳細を追加します。ファイルに存在しない場合は、このセクションを追加します。各エントリは、次のパラメータをサポートしています。-
rolearn: 追加する IAM ロールの ARN。この値にパスを含めることはできません。例えば、
arn:aws:iam::
のような ARN を指定することはできません。ARN は、111122223333
:role/my-team/developers/role-name
arn:aws:iam::
のようにする必要があります。111122223333
:role/role-name
-
ユーザー名: IAM ロールにマッピングする Kubernetes 内のユーザー名。
-
グループ: ロールをマップするグループまたは Kubernetes グループのリスト。グループには、デフォルトグループか、
clusterrolebinding
またはrolebinding
で指定されたグループを使用します。詳細については、Kubernetes ドキュメントの「デフォルトのロールとロールのバインディング」を参照してください。
-
-
IAM ユーザーを追加するには: IAM のベストプラクティスでは、ユーザーではなくロールに許可を付与することが推奨されています。
ConfigMap
のmapUsers
セクション (data
の下) にユーザーの詳細を追加します。ファイルに存在しない場合は、このセクションを追加します。各エントリは、次のパラメータをサポートしています。-
userarn: 追加する IAM ユーザーの ARN。
-
ユーザー名: IAM ユーザーにマッピングする Kubernetes 内のユーザー名。
-
グループ: ユーザーをマップするグループまたは Kubernetes グループのリスト。グループには、デフォルトグループか、
clusterrolebinding
またはrolebinding
で指定されたグループを使用します。詳細については、Kubernetes ドキュメントの「デフォルトのロールとロールのバインディング」を参照してください。
-
-
-
例えば、次の YAML ブロックには次が含まれます。
-
ノードがそれ自体をクラスター、およびすべてのクラスターですべての Kubernetes リソースを表示することが可能な Kubernetes グループにマッピングされた
my-console-viewer-role
IAM ロールに登録できるように、IAM ノードインスタンスを Kubernetes グループにマッピングするmapRoles
セクション。my-console-viewer-role
IAM ロールに必要な IAM と Kubernetes グループのアクセス許可のリストについては、「必要なアクセス許可」を参照してください。 -
system:masters
Kubernetes グループ、および特定の名前空間で Kubernetes リソースを表示することが可能な、Kubernetes グループにマッピングされた他の AWS アカウントからのmy-user
ユーザーに、デフォルトの AWS アカウントからのadmin
IAM ユーザーをマッピングするmapUsers
セクション。my-user
IAM ユーザーに必要な IAM と Kubernetes グループのアクセス許可のリストについては、「必要なアクセス許可」を参照してください。必要に応じて行を追加または削除し、すべての
値の例
を、実際の値で置き換えます。# 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: | - groups: - system:bootstrappers - system:nodes rolearn: arn:aws:iam::111122223333:role/my-role username: system:node:{{EC2PrivateDNSName}} - groups: - eks-console-dashboard-full-access-group rolearn: arn:aws:iam::111122223333:role/my-console-viewer-role username: my-console-viewer-role mapUsers: | - groups: - system:masters userarn: arn:aws:iam::111122223333:user/admin username: admin - groups: - eks-console-dashboard-restricted-access-group userarn: arn:aws:iam::444455556666:user/my-user username: my-user
-
-
ファイルを保存し、テキストエディタを終了します。
aws-auth
ConfigMap
をクラスターに適用する
マネージド型ノードグループを作成するとき、または aws-auth
を使用してノードグループを作成するときに、ConfigMap
eksctl
が自動的に作成され、クラスターに適用されます。これはノードをクラスターに追加するために当初作成されたものですが、この ConfigMap
を使用して、ロールベースアクセスコントロール (RBAC) アクセスを IAM プリンシパルに追加することもできます。セルフマネージド型ノードが起動済みで、クラスターに 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 https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/aws-auth-cm.yaml
-
aws-auth-cm.yaml
ファイルで、ノードに関連付けられている IAM ロールの Amazon リソースネーム (ARN) にrolearn
を設定します。これを行うには、テキストエディタを使用するか、my-node-instance-role
を置き換えて次のコマンドを実行します。sed -i.bak -e 's|<ARN of instance role (not instance profile)>|my-node-instance-role|' aws-auth-cm.yaml
このファイルの他の行は変更しないでください。
重要
ロールの ARN には、
role/my-team/developers/my-role
などのパスを含めることはできません。ロールの ARN は、arn:aws:iam::
のような形式にする必要があります。この例では、111122223333
:role/my-role
my-team/developers/
を削除する必要があります。ノードグループの 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
Ctrl
+C
を入力して、シェルプロンプトに戻ります。