Amazon EKS クラスターで IAM ユーザーの名前空間全体でアクセス許可を管理する方法を教えてください。

所要時間3分
0

Amazon Elastic Kubernetes Service (Amazon EKS) クラスター内の名前空間全体で AWS Identity and Access Management (IAM) ユーザーのユーザーアクセス許可を管理したいと考えています。

簡単な説明

Amazon EKS クラスター内の名前空間全体でユーザーの権限を管理するには、次の手順を実行します。

  1. 組織のメンバーが引き受ける IAM ロールを作成します。
  2. クラスターの Kubernetes ロールベースのアクセス制御 (RBAC) ロール (Role) とロールバインディング (RoleBinding) を作成します。詳細については、Kubernetes ウェブサイトの「Using RBAC authorization」を参照してください。
  3. aws-auth ConfigMap を使用して、IAM ロールを RBAC ロールおよびグループにマッピングします。

**注:**IAM ユーザーまたはロールがクラスターを作成すると、この IAM アイデンティティの ARN のみが aws-auth ConfigMap に追加され、system: masters 権限が付与されます。つまり、aws-auth ConfigMap にユーザーまたはロールを追加できるのはクラスターの作成者のみです。

解決策

**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

組織のメンバーが引き受けられる IAM ロールを作成する

IAM ロールを作成して、組織のメンバーに名前空間へのアクセス権を付与します。

  1. IAM ユーザーにアクセス許可を委任するロールを作成します

  2. ユーザーに IAM ロールを引き受ける権限があることを確認するには、AWS CLI を設定します。次に、そのユーザーのワークステーションから次のコマンドを実行します。

    $ aws sts assume-role --role-arn arn:aws:iam::yourAccountID:role/yourIAMRoleName --role-session-name abcde{
        "Credentials": {
            "AccessKeyId": "yourAccessKeyId",
            "SecretAccessKey": "yourSecretAccessKey",
            "SessionToken": "yourSessionToken",
            "Expiration": "2020-01-30T01:57:17Z"
        },
        "AssumedRoleUser": {
            "AssumedRoleId": "yourAssumedRoleId",
            "Arn": "arn:aws:iam::yourAccountID:role/yourIAMRoleName"
        }
    }

    **注:**yourAccessKeyIdyourSecretAccessKeyyourSessionTokenyourAssumedRoleIdyourAccountIDyourIAMRoleName は、ご自身の値に置き換えてください。

  3. kubeconfig ファイルを更新して、IAM ユーザーの kubectl が Kubernetes API にアクセスするときに常にそのロールを使用するように設定します。

    $ aws eks update-kubeconfig --name yourClusterName --role-arn arn:aws:iam::yourAccountID:role/yourIAMRoleName

    **注:**yourClusterNameyourAccountIDyourIAMRoleName は、ご自身の値に置き換えてください。

クラスター用の Kubernetes RBAC ロールとロールバインディングを作成する

**重要:**Kubernetes にアクセスするように設定されたワークステーションから、次の手順を実行する必要があります。クラスターの作成者であるか、既に aws-authConfigMap を介してアクセスできる IAM ID である必要があります。IAM ロールにはまだクラスターへのアクセス権がありません。

クラスターロール (ClusterRole) をロールバインディングにバインドします。RBAC ロールとロールバインディングは Kubernetes の名前空間リソースです。ただし、ロールをクラスターロールバインディング (ClusterRoleBinding) にバインドすることはできません。

  1. 次のコマンドを実行してすべての組み込みクラスターロールを一覧表示し、クラスターロール管理者を名前空間のロールバインディングにバインドします。

    $ kubectl get clusterrole
  2. 次のコマンドを実行して、クラスターロール管理者に関連付けられている権限を確認します。

    $ kubectl describe clusterrole admin
  3. test という名前の名前空間を作成して、IAM グループの一部として IAM ユーザーにアクセス権を付与します。
    **注:**別の名前を選択した場合は、名前空間パラメータの値を置き換えてください。既存の名前空間を使用するには、手順 4 に進みます。

    $ kubectl create namespace test
  4. Kubernetes RBAC ロールを作成するには、次のコードを新しい YAML ファイル (role.yaml など) にコピーします。** **

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: k8s-test-role
      namespace: test
    rules:
      - apiGroups:
          - ""
          - "apps"
          - "batch"
          - "extensions"
        resources:
          - "configmaps"
          - "cronjobs"
          - "deployments"
          - "events"
          - "ingresses"
          - "jobs"
          - "pods"
          - "pods/attach"
          - "pods/exec"
          - "pods/log"
          - "pods/portforward"
          - "secrets"
          - "services"
        verbs:
          - "create"
          - "delete"
          - "describe"
          - "get"
          - "list"
          - "patch"
          - "update"

    **注:**Kubernetes RBAC ロールが付与されたユーザーは、verbs セクションのすべてのアクションを実行できます。

  5. 次のコマンドを実行して RBAC ロールを作成します。

    $ kubectl apply -f role.yaml
  6. Kubernetes ロールバインディングを作成します。次のコードを新しい YAML ファイル (rolebinding.yaml など) にコピーします。

    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: k8s-test-rolebinding
      namespace: test
    subjects:
    - kind: User
      name: k8s-test-user
    roleRef:
      kind: Role
      name: k8s-test-role
      apiGroup: rbac.authorization.k8s.io

    **注:**ロールバインディングは、roleRef セクションの RBAC ロールを subjects セクションのユーザーにバインドする名前空間付きリソースです。Kubernetes には user リソースタイプがないため、k8s-test-user ユーザーを作成する必要はありません。

  7. 次のコマンドを実行して RBAC ロールバインディングを作成します。

    $ kubectl apply -f rolebinding.yaml

aws-auth ConfigMAP を使用して IAM ロールを RBAC ロールおよびグループにマッピングします。

次のコマンドを実行して、yourIAMRoleName IAM ロールを k8s-test-user Kubernetes ユーザーに関連付けます。

$ eksctl create iamidentitymapping --cluster yourClusterName --arn arn:aws:iam::yourAccountID:role/yourIAMRoleName --username k8s-test-user

**注:**yourClusterNameyourAccountIDyourIAMRoleName は、ご自身の値に置き換えてください。

名前空間へのアクセスをテストする

  1. 次のコマンドを実行して、test 名前空間へのアクセスをテストします。
    $ kubectl create job hello -n test --image=busybox -- echo "Hello World"
    **注:**上記のコマンドは、作成した k8s-test-role RBAC ロールを使用するジョブを作成します。
  2. 次のコマンドを実行して、test 名前空間のポッドとジョブを確認します。
    $ kubectl get job -n testNAME    COMPLETIONS   DURATION   AGE
    hello   1/1           4s         15s
    
    $ kubectl get pods -n test
    NAME          READY   STATUS      RESTARTS   AGE
    hello-tpjmf   0/1     Completed   0          2m34s
AWS公式
AWS公式更新しました 3ヶ月前
コメントはありません

関連するコンテンツ