Amazon EKS
ユーザーガイド

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

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

注記

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

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://amazon-eks.s3-us-west-2.amazonaws.com/cloudformation/2019-10-08/aws-auth-cm.yaml
    2. 任意のテキストエディタでファイルを開きます。<インスタンスプロファイルではなく) インスタンスロールの ARN)> スニペットを、ワーカーノードに関連付けられた IAM ロールの Amazon リソースネーム (ARN) に置き換えて、ファイルを保存します。ワーカーノードグループの AWS CloudFormation スタック出力を検査し、次の値を探すことができます。

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

      • NodeInstanceRole (AWS マネジメントコンソール の Amazon EKS で発行された AWS CloudFormation テンプレートで作成されたワーカーノードグループ用)

      重要

      このファイルの他の行は変更しないでください。

      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
    3. 設定を適用します。このコマンドが完了するまで数分かかることがあります。

      kubectl apply -f aws-auth-cm.yaml

      注記

      "aws-iam-authenticator": executable file not found in $PATH エラーが発生した場合、kubectl は、Amazon EKS に設定されていません。詳細については、「aws-iam-authenticator のインストール」を参照してください。

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

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

    kubectl get nodes --watch

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

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

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

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

    注記

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

    ConfigMap の例:

    # 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/doc-test-worker-nodes-NodeInstanceRole-WDO5P42N3ETB username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes kind: ConfigMap metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"v1","data":{"mapRoles":"- rolearn: arn:aws:iam::111122223333:role/doc-test-worker-nodes-NodeInstanceRole-WDO5P42N3ETB\n username: system:node:{{EC2PrivateDNSName}}\n groups:\n - system:bootstrappers\n - system:nodes\n"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"aws-auth","namespace":"kube-system"}} creationTimestamp: 2018-04-04T18:49:10Z name: aws-auth namespace: kube-system resourceVersion: "780" selfLink: /api/v1/namespaces/kube-system/configmaps/aws-auth uid: dcc31de5-3838-11e8-af26-02e00430057c
  3. IAM ユーザー、ロール、または AWS アカウントを configMap に追加します。

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

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

      • username: IAM ユーザーにマッピングする Kubernetes 内のユーザー名。デフォルトのユーザー名は、 IAM ユーザーの ARN です。

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

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

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

      • username: IAM ロールにマッピングする Kubernetes 内のユーザー名。デフォルトのユーザー名は、 IAM ロールの ARN です。

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

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

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

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

    # 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::555555555555:role/devel-worker-nodes-NodeInstanceRole-74RF4UBDUKL6 username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes mapUsers: | - userarn: arn:aws:iam::555555555555:user/admin username: admin groups: - system:masters - userarn: arn:aws:iam::111122223333:user/ops-user username: ops-user groups: - system:masters
  4. ファイルを保存し、テキストエディタを終了します。