クラスターへの IAM ユーザーおよびロールアクセスを有効にする - Amazon EKS

クラスターへの IAM ユーザーおよびロールアクセスを有効にする

AWS IAM エンティティ を使用したクラスターへのアクセスは、Amazon EKS コントロールプレーンで実行される AWS IAM Authenticator for Kubernetes によって有効になります。オーセンティケーターは、その設定情報を aws-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 クラスターに追加するには

  1. クラスターへのアクセスに kubectl が使用している認証情報を判別します。使用中のコンピュータ上で、次のコマンドを使用して、kubectl が使用する認証情報を判別できます。デフォルトのパスを使用しない場合は、~/.kube/configkubeconfig ファイルへのパスに置き換えます。

    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 という名前のクラスター用に設定されています。このユーザーがクラスターを作成したユーザーである場合は、すでにそのクラスターにアクセスできます。クラスターを作成したユーザーでない場合は、残りの手順を実行して、そのユーザーのクラスターへのアクセスを有効にする必要があります (まだ有効にしていない場合)。

  2. クラスター内で IAM ユーザーがアクセスできるようにするアクセス許可 (rules) を持つ既存の Kubernetes role または clusterrole があり、Kubernetes grouprole または clusterrole にバインドする既存のKubernetes rolebinding または clusterrolebinding があることを確認します。詳細については、Kubernetes ドキュメントの「RBAC 認証の使用」を参照してください。次のコマンドを使用して、既存の rolesclusterrolesrolebindings、および clusterrolebindings をすべて表示できます。

    kubectl get roles --all-namespaces
    kubectl get clusterroles
    kubectl get rolebindings --all-namespaces
    kubectl get clusterrolebindings

    その後、次のコマンドを使用して、任意のリソースの詳細を表示できます。roleclusterrolerolebinding、または clusterrolebinding に置き換え、role-name を (前の出力の) リソース名に置き換え、kube-system を (前の出力の) リソースの名前空間に置き換えることができます。

    kubectl describe role role-name -n kube-system
  3. (オプション) clusterroleclusterrolebinding または rolerolebinding を作成して、IAM ユーザーが AWS Management Console のノードワークロードを表示できるようにします。

    1. ユーザーが次の 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
    2. 次のいずれかのコマンドを使用して、適切なマニフェストを適用します。

      kubectl apply -f eks-console-full-access.yaml
      kubectl apply -f eks-console-restricted-access.yaml
  4. aws-auth ConfigMap を編集します。

    1. 編集する ConfigMap を開きます。

      kubectl edit -n kube-system configmap/aws-auth
      注記

      Error from server (NotFound): configmaps "aws-auth" not found」というエラーが表示された場合は、aws-auth ConfigMap をクラスターに適用する の手順を使用してストック ConfigMap を適用します。

    2. IAM ユーザー、ロール、または AWS アカウントを ConfigMap に追加します。IAM グループを ConfigMap に追加することはできません。

      • IAM ロールを (たとえば、フェデレーティッドユーザーに) 追加するにはConfigMapmapRoles セクションの data の下にロールの詳細を追加します。ファイルに存在しない場合は、このセクションを追加します。各エントリは、次のパラメータをサポートしています。

      • IAM ユーザーを追加するには: ConfigMap の mapUsers セクション (data の下) にユーザーの詳細を追加します。ファイルに存在しない場合は、このセクションを追加します。各エントリは、次のパラメータをサポートしています。

        • userarn: 追加する IAM ユーザーの ARN。

        • username: IAM ユーザーにマッピングする Kubernetes 内のユーザー名。

        • groups: ユーザーがマッピングされている、Kubernetes 内のグループのリスト。詳細については、Kubernetes ドキュメントのデフォルトのロールとロールのバインディングを参照してください。

      例えば、次のブロックには以下が含まれます。

      • mapRoles セクションには、ノードが自分をクラスターに登録できるように、ノードインスタンスロールを追加します。

      • mapUsers セクションには、デフォルトの AWS アカウントの AWS ユーザー admin と、別の AWS アカウントの 2 つのオペレーションユーザーが含まれます。admin ユーザーが system:masters Kubernetes グループに追加されます。

        オペレーションユーザーは、前のステップのマニフェストによって作成された rolerolebindingclusterroleclusterrolebinding で使用される Kubernetes グループに追加されますが、好みのグループに置き換えることができます。ユーザーが AWS Management Console の ノードワークロード を表示できるようにするには、次の例のマッピングと、前のステップのマニフェストによって作成された rolerolebindingまたは clusterroleclusterrolebinding が必要です。

      すべての 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
    3. ファイルを保存し、テキストエディタを終了します。

aws-auth ConfigMap をクラスターに適用する

マネージド型ノードグループを作成するとき、または aws-auth を使用してノードグループを作成するときに、ConfigMap eksctl が自動的に作成され、クラスターに適用されます。これはノードをクラスターに追加するために当初作成されたものですが、この ConfigMap を使用して、ロールベースアクセスコントロール (RBAC) アクセスを IAM ユーザーとロールに追加することもできます。セルフマネージド型ノードを起動しておらず、クラスターに aws-auth ConfigMap を適用していない場合は、次の手順に従って適用できます。

aws-authConfigMap をクラスターに適用するには

  1. aws-auth ConfigMap が適用済みであるかどうかを確認します。

    kubectl describe configmap -n kube-system aws-auth

    Error from server (NotFound): configmaps "aws-auth" not found」というエラーが表示された場合は、以下のステップを実行してストック ConfigMap を適用します。

  2. AWS オーセンティケーター設定マップをダウンロード、編集、適用します。

    1. 設定マップをダウンロードします。

      curl -o aws-auth-cm.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-10-29/aws-auth-cm.yaml
    2. テキストエディタで ファイルを開きます。<ARN of instance role (not instance profile)> をノードに関連付けられている IAM ロールの Amazon Resource Name (ARN) に置き換え、ファイルを保存します。このファイルの他の行は変更しないでください。

      重要

      ロール ARN にパスを含めることはできません。ロール ARN の形式は arn:aws:iam::111122223333:role/role-name であることが必要です。詳細については、「aws-auth ConfigMap がクラスターへのアクセスを許可しない」を参照してください。

      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 スタック出力を検査し、次の値を探すことができます。

      • InstanceRoleARNeksctl で作成されたノードグループ用

      • NodeInstanceRole – AWS Management Console で、Amazon EKS で発行された AWS CloudFormation テンプレートで作成されたノードグループ用

    3. 設定を適用します。このコマンドが完了するまで数分かかることがあります。

      kubectl apply -f aws-auth-cm.yaml
      注記

      その他の認可またはリソースタイプのエラーが発生した場合は、トラブルシューティングセクションの「許可されていないか、アクセスが拒否されました (kubectl)」を参照してください。

  3. ノードのステータスを監視し、Ready ステータスになるまで待機します。

    kubectl get nodes --watch