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

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

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

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

注記

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

aws-auth ConfigMap は、 の使用を開始するAmazon EKSガイドの一部として適用されます。このガイドでは、Amazon EKS クラスターの作成からサンプル Kubernetes アプリケーションのデプロイまで、最初から終わりまでのウォークスルーを行います。最初はノードがクラスターに参加できるように作成されていますが、この ConfigMap を使用して IAM ユーザーとロールに RBAC アクセスを追加する必要もあります。ノードを起動しておらず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)>ロールAmazon リソースネーム (ARN)の IAM に置き換え、ファイルを保存します。このファイルの他の行は変更しないでください。

      重要

      ロール 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 ( でAmazon EKS発行されたAWS CloudFormationテンプレートで作成されたノードグループAWS マネジメントコンソール用)

    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 に追加します。configMap にIAMグループを追加することはできません。

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

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

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

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

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

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

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

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

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

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

    • mapUsers セクション。デフォルトの admin アカウントの AWS ユーザー AWS と、別の ops-user アカウントの AWS が含まれます。いずれのユーザーも 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. ユーザーまたはロールをマッピングした Kubernetes IAM ユーザーまたはグループが、 RoleBinding または を使用して Kubernetes ロールにバインドされていることを確認しますClusterRoleBinding。詳細については、Kubernetes ドキュメントの RBAC 認証の使用を参照してください。および clusterrole または clusterrolebinding と を作成する次のマニフェスト例をダウンロードできますrolerolebinding

    • [View Kubernetes resources in all namespaces– (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 に追加したユーザーが View ノード または を ワークロードの表示 で使用できるようにするにはAWS マネジメントコンソール、ユーザーまたはロールに Kubernetes のリソースを表示するための適切なアクセス許可が必要ですが、 でそれらのリソースを表示するための適切なIAMアクセス許可も必要ですAWS マネジメントコンソール。詳細については、「 」を参照してくださいですべてのクラスターのノードとワークロードを表示する AWS マネジメントコンソール