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. 接続クラスタ バージョン .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.gatewayEditor、または roles/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 を使用してログインするをご覧ください。