EKS 接続クラスタに接続する

このドキュメントでは、EKS 接続クラスタに接続する 3 つの方法について説明します。

登録済みクラスタに接続するこの 3 種類の方法は、Connect Gateway と呼ばれる Google サービスによって可能になります。Connect Gateway の詳細については、Connect Gateway による登録済みクラスタへの接続をご覧ください。

始める前に

いずれの方法を実行する場合でも、その前にクラスタが接続されていることを確認してください。 詳細については、EKS クラスタを接続するをご覧ください。

方法 #2 または方法 #3 に進む前に、追加の前提条件を満たす必要があります。詳しくは、以降のセクションをご覧ください。

方法 #2 を始める前に

方法 #2 で接続クラスタに接続する前に、次の前提条件を満たしていることをご確認ください。

  • Google Cloud CLI が最新バージョンである。gcloud CLI の更新の詳細については、gcloud components update をご覧ください。
  • 接続クラスタのバージョンが 1.26.0-gke.8、1.27.0-gke.5、1.28.0-gke.2 以降になっている。

方法 #3 を始める前に

方法 #3 で接続クラスタに接続する前に、次の前提条件を満たしていることをご確認ください。

  1. Google Cloud CLI が最新バージョンである。gcloud CLI の更新の詳細については、gcloud components update をご覧ください。

  2. 接続クラスタ バージョン 1.27.0-gke.5、1.28.0-gke.2 以降を使用している。

  3. Workforce Identity 連携を構成します(外部のユーザーやグループが GKE 接続クラスタ API を使用できるようにするため)。

  4. 省略可: 外部ユーザーまたはグループに適切な Identity and Access Management(IAM)のロールを割り当てます。このステップは、ユーザーまたはグループにクラスタを作成または更新する権限を付与する場合にのみ必要です。単にクラスタにアクセスする場合は必要ありません

    ロールは権限の集合体です。ロールをエンティティ(ユーザー、グループ、またはサービス アカウント)に割り当てると、そのロールに含まれるすべての権限がそのエンティティに付与されます。

    ユーザー

    個別のユーザーには、gkemulticloud.admin ロールを割り当てる必要があります。

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --role="roles/gkemulticloud.admin" \
      --member="principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject SUBJECT_VALUE"
    

    次のように置き換えます。

    • PROJECT_ID: Google Cloud プロジェクトの ID。
    • WORKFORCE_POOL_ID: Google Cloud の Workforce Identity プールを一意に識別する ID。ID の形式を設定する場合は、IAM ドキュメントのクエリ パラメータに記載の推奨ガイドラインに従ってください。
    • SUBJECT_VALUE: 外部ユーザーを一意に識別する ID。たとえば、ID にはメールアドレス(alex@cymbalgroup.com など)を使用できます。

    グループ

    グループには、gkemulticloud.admin ロールを割り当てる必要があります。

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --role="roles/gkemulticloud.admin" \
      --member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID"
    

    次のように置き換えます。

    • PROJECT_ID: Google Cloud プロジェクトの ID。
    • WORKFORCE_POOL_ID: Google Cloud の Workforce Identity プールを一意に識別する ID。ID の形式を設定する場合は、IAM ドキュメントのクエリ パラメータに記載の推奨ガイドラインに従ってください。
    • GROUP_ID: 外部グループを一意に識別する ID。

    GKE 接続クラスタに必要な API のロールと権限の詳細については、API のロールと権限をご覧ください。

方法 #1: 接続クラスタに Google ユーザーとして接続する

接続クラスタに Google ユーザーとして接続するには、次の操作を行います。

  1. 次のコマンドを使用して connectgateway API と cloudresourcemanager API を有効にします。

     gcloud services enable --project=PROJECT_ID \
         connectgateway.googleapis.com \
         cloudresourcemanager.googleapis.com
    

    PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。

  2. RBAC ルールを自動と手動のいずれかで設定して適用します。

    • 自動方式: クラスタを接続するときに、gcloud container attached clusters register コマンドの --admin-users フィールドに Google ユーザーを指定した場合、これらのユーザーにはクラスタに対する管理者権限が自動的に付与されています。したがって、このステップはスキップできます。

    • 手動方式: Kubernetes YAML マニフェストを作成して、個々の Google ユーザーの RBAC ルールを手動で設定します。詳細については、RBAC 認可を使用するをご覧ください。

  3. 次のコマンドを使用して Kubernetes kubeconfig 構成ファイルを取得します。

    gcloud container fleet memberships get-credentials CLUSTER_NAME
    

    CLUSTER_NAME は、接続認証情報が必要なクラスタの名前に置き換えます。

これらの操作を行うと、接続クラスタに Google ユーザーとして接続できるようになります。

方法 #2: 接続クラスタに Google グループを使用して接続する

この方法では、Google グループのメンバーとして接続クラスタに接続できます。つまり、Google グループにクラスタへのアクセス権を付与します。これにより、その Google グループに属するユーザーにクラスタへのアクセス権が付与されます。

Google グループを使用してクラスタにアクセス権を付与するほうが、個々のユーザーに別々の認可を作成するよりも効率的です。たとえば、クラスタ管理者グループに 50 人のユーザー、編集者グループに 75 人のユーザー、閲覧者グループに 100 人のユーザーを追加するとします。このドキュメントで説明する方法 #1 では、Kubernetes マニフェスト ファイルに 225 人のユーザーの RBAC ルールを作成する必要があります。方法 #2 では、3 つの Google グループに対して RBAC ルールを作成するだけで済むため、時間を節約できます。

Google グループに接続クラスタへの接続を承認する手順は次のとおりです。

  1. 次のコマンドを使用して connectgateway API と cloudresourcemanager API を有効にします。

      gcloud services enable --project=PROJECT_ID \
          connectgateway.googleapis.com \
          cloudresourcemanager.googleapis.com
    

    PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。

  2. プロジェクトのドメインのグループとして gke-security-groups というグループを作成します(存在しない場合)。

  3. gke-security-groups グループ内にクラスタ認証用のサブグループを 1 つ以上作成します。

  4. 新しく作成したサブグループにユーザーを追加します。

  5. Google グループに IAM ロールを付与します。

    1. グループに適切なロールを選択します。このロールにより、グループが Connect Gateway とやり取りする方法が決まります。ロールは roles/gkehub.gatewayAdminroles/gkehub.gatewayEditorroles/gkehub.gatewayReader のいずれかです(接続クラスタに対して権限を付与することはありません。このステップは後で行います。ここでは、グループのユーザーが Connect Gateway を操作する方法を決定します)。

    2. 次のコマンドを実行して、グループにロールを付与します。

      gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=group:GROUP_NAME@DOMAIN \
        --role=GATEWAY_ROLE
      

      次のように置き換えます。

      • PROJECT_ID: Google プロジェクト ID
      • GROUP_NAME: アクセス権を付与するグループの名前
      • DOMAIN: Google Workspace ドメイン
      • GATEWAY_ROLE: 選択したロール。例: roles/gkehub.gatewayAdminroles/gkehub.gatewayEditorroles/gkehub.gatewayReader など。
  6. Kubernetes マニフェストで、クラスタに対して各 Google グループがどの種類の権限を持つかを定義します。たとえば次のマニフェストでは、Google グループ cluster-admin-team にクラスタ管理者のロールを付与しています。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: gateway-cluster-admin-group
    subjects:
    - kind: Group
      name: cluster-admin-team@example.com
    roleRef:
      kind: ClusterRole
      name: cluster-admin
      apiGroup: rbac.authorization.k8s.io
    
  7. 次のコマンドを実行して、マニフェストをファイルに保存し、それをクラスタに適用します。

    kubectl apply -kubeconfig=KUBECONFIG_PATH -f FILENAME
    

    次のように置き換えます。

    • KUBECONFIG_PATH: kubeconfig ファイルのパス。
    • FILENAME: 作成したマニフェスト ファイルの名前。

これらの操作を完了すると、特定の Google グループに属するユーザーが、接続クラスタに接続できるようになります。前述の例では、Google グループ cluster-admin-team に属するユーザーが管理者としてクラスタに接続できます。

方法 #3: クラスタの接続時または更新時に外部 ID にアクセス権を付与する

方法 #3 では、クラスタの接続時または更新時に外部 ID にアクセス権を付与します。

EKS クラスタを接続するには、EKS クラスタを接続するの手順に沿って操作します。EKS クラスタを更新するには、EKS クラスタを更新するの手順に沿って操作します。

gcloud CLI コマンドを実行してクラスタの登録や更新を行う場合は、次のように admin-users パラメータや admin-groups パラメータを指定します。

gcloud container attached clusters [register|update] CLUSTER_NAME \
    --admin-users=principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject SUBJECT_VALUE \
    --admin-groups=principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID

次のように置き換えます。

  • CLUSTER_NAME: クラスタの名前。
  • WORKFORCE_POOL_ID: Google Cloud の Workforce Identity プールを一意に識別する ID。ID の形式を設定する場合は、IAM ドキュメントのクエリ パラメータに記載の推奨ガイドラインに従ってください。
  • SUBJECT_VALUE: 外部ユーザーを一意に識別する ID。たとえば、ID にはメールアドレス(alex@cymbalgroup.com など)を使用できます。
  • GROUP_ID: 外部グループを一意に識別する ID。

次のステップ

Google Cloud コンソールから Cloud Identity でクラスタを管理する。Google Cloud ID を使用してログインするをご覧ください。