クラスターのユーザーまたは IAM ロールの管理 - Amazon EKS

クラスターのユーザーまたは IAM ロールの管理

Amazon EKS クラスターを作成すると、このクラスターを作成した IAM エンティティユーザーまたはロール (フェデレーティッドユーザーなど) は、コントロールプレーンのクラスター RBAC 設定で、system:masters アクセス許可が自動的に付与されます。この IAM エンティティは ConfigMap やその他の表示可能な設定の中には表示されません。したがって、どの IAM エンティティが最初にクラスターを作成したのかは追跡する必要があります。クラスターを操作する権限を他の AWS ユーザーやロールに付与するには、Kubernetes 内の aws-auth ConfigMap を編集する必要があります。

注記

さまざまな IAM アイデンティティの詳細については、IAM ユーザーガイドの「アイデンティティ (ユーザー、グループ、ロール)」を参照してください。Kubernetes の RBAC 設定の詳細については、RBAC 認可の使用を参照してください。すべての ConfigMap 設定については、GitHub の「Full Configuration Format」を参照してください。

aws-auth ConfigMap は、Amazon EKS の使用開始 ガイドの一部として適用されます。このガイドは、Amazon EKS クラスターの作成からサンプル Kubernetes アプリケーションのデプロイまで、完全なエンドツーエンドのチュートリアルを提供します。ConfigMap は、ノードをクラスターに追加するために当初作成されたものですが、RBAC アクセスを IAM ユーザーとロールに追加するために使用することもできます。ノードを起動して aws-authConfigMap を適用していない場合は、次の手順に従って適用できます。

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

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

    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://s3.us-west-2.amazonaws.com/amazon-eks/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::<123456789012>: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 スタック出力を検査し、次の値を探すことができます。

      • InstanceRoleARN (eksctl で作成されたノードグループ用)

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

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

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

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

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

    kubectl get nodes --watch

IAM ユーザーまたはロールを Amazon EKS クラスターに追加するには

  1. AWS が使用している kubectl 認証情報が、クラスターですでに認証されていることを確認します。クラスターを作成した IAM ユーザーには、デフォルトでこれらのアクセス許可が付与されています。

  2. aws-auth ConfigMap を開きます。

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

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

    ConfigMap の例:

    apiVersion: v1 data: mapRoles: | - groups: - system:bootstrappers - system:nodes rolearn: arn:aws:iam::111122223333:role/eksctl-my-cluster-nodegroup-standard-wo-NodeInstanceRole-1WP3NUE3O6UCF username: system:node:{{EC2PrivateDNSName}} kind: ConfigMap metadata: creationTimestamp: "2020-09-30T21:09:18Z" name: aws-auth namespace: kube-system resourceVersion: "1021" selfLink: /api/v1/namespaces/kube-system/configmaps/aws-auth uid: dcc31de5-3838-11e8-af26-02e00430057c
  3. IAM ユーザー、ロール、または AWS アカウントを configMap に追加します。IAM グループを configMap に追加することはできません。

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

      • rolearn: 追加する IAM ロールの ARN。

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

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

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

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

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

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

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

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

    • mapUsers セクションには、デフォルトの AWS アカウントの AWS ユーザー admin と、別の AWS アカウントのops-user ユーザーが含まれます。いずれのユーザーも system:masters グループに追加されます。

    すべての <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::111122223333:user/ops-user> username: <ops-user> groups: - <system:masters>
  4. ファイルを保存し、テキストエディタを終了します。

  5. IAM ユーザーまたはロールをマッピングした Kubernetes ユーザーまたはグループが、RoleBinding または ClusterRoleBinding で Kubernetes ロールにバインドされていることを確認します。詳細については、Kubernetes ドキュメントの「RBAC 認証の使用」を参照してください。clusterrole および clusterrolebinding、または role および rolebinding を作成する、以下のマニフェスト例をダウンロードできます。

    • すべての名前空間の Kubernetes リソースを表示する — ファイル内のグループ名は eks-console-dashboard-full-access-group です。このグループに IAM ユーザーまたはロールを aws-auth configmap でマッピングする必要があります。必要に応じて、クラスターに適用する前にグループ名を変更し、configmap でそのグループに IAM ユーザーまたはロールをマッピングできます。以下からファイルをダウンロードする:

      https://s3.us-west-2.amazonaws.com/amazon-eks/docs/eks-console-full-access.yaml
    • 特定の名前空間内の Kubernetes リソースを表示する – このファイルの名前空間は default です。別の名前空間を指定する場合は、クラスターに適用する前にファイルを編集します。ファイル内のグループ名は eks-console-dashboard-restricted-access-group です。このグループに IAM ユーザーまたはロールを aws-auth configmap でマッピングする必要があります。必要に応じて、クラスターに適用する前にグループ名を変更し、ConfigMap でそのグループに IAM ユーザーまたはロールをマッピングできます。以下からファイルをダウンロードする:

      https://s3.us-west-2.amazonaws.com/amazon-eks/docs/eks-console-restricted-access.yaml
  6. (オプション)configmap に追加したユーザーが AWS Management Console で ノードを表示する または ワークロードの表示 をできるようにするには、ユーザーまたはロールには次の両方のタイプのアクセス許可が必要です。