アクセス権の付与と取り消し

ユーザーまたはグループである各サブジェクトは、次の 2 つの手順で Management API サーバーと Kubernetes クラスタへのアクセス権を取得します。

  • Management API サーバー アクセス: ClusterRoleBinding または RoleBinding を使用して、Management API サーバーの権限を持つサブジェクトを事前定義された ClusterRole に付与します。

  • Kubernetes クラスタへのアクセス: Namespace 固有のアクセス権またはクラスタ全体のアクセス権を付与します。

    • Namespace 固有のアクセスの場合: クラスタ内の特定のプロジェクトの Namespace へのアクセス権を付与するには、ProjectRole と対応する ProjectRoleBinding を作成します。このプロセスでは、Kubernetes RoleRoleBinding がクラスタ内の Kubernetes Namespace に伝播されます。これは、ProjectRoleProjectRoleBinding が関連付けられている Project に対応します。

    • クラスタ全体のアクセスの場合: クラスタ内のすべての Namespace へのアクセス権を付与するには、OrganizationRole と対応する OrganizationRoleBinding を作成します。このプロセスでは、Kubernetes ClusterRoleClusterRoleBinding が Kubernetes クラスタ全体に伝播されます。

ペルソナ(IO、PA、AO)はロールではなく、特定の権限にマッピングされ、個々のユーザーに割り当てられたユーザーロールのコレクションです。

組織 IAM 管理者とプロジェクト IAM 管理者は、プロジェクト ロールとプロジェクト ロール バインディングを作成して、プロジェクト固有の追加権限を付与できます。ただし、組織の IAM 管理者は、任意のプロジェクトのプロジェクト ロールとプロジェクト ロール バインディングを作成できます。一方、プロジェクト IAM 管理者は、アクセス権のあるプロジェクトのプロジェクト ロールとプロジェクト ロール バインディングのみを作成できます。

ロール バインディングを設定する

チームメンバーに組織レベルまたはプロジェクト レベルでリソースへのアクセス権を付与するロール バインディングを設定できます。

ロール バインディングの設定に必要な権限を取得するには、組織の IAM 管理者に組織の IAM 管理者ロールを付与するよう依頼してください。

承認済みメンバーにロールを割り当てる手順は次のとおりです。

コンソール

  1. GDC コンソールにログインします。
  2. [プロジェクトを選択] をクリックして、組織またはプロジェクトを選択します。
    • 組織のロール バインディングを設定するには、組織を選択します。
    • プロジェクトのロール バインディングを設定するには、プロジェクトを選択します。
  3. ナビゲーション メニューで、[Identity and Access] > [アクセス] をクリックします。
  4. [メンバーを追加] をクリックします。
  5. [ID プロバイダ] リストで、ID プロバイダを選択します。
  6. 個々のユーザーを追加するか、グループを追加するかを選択します。
  7. [ユーザー名またはグループ エイリアス] フィールドに、ユーザー名、メールアドレス、エイリアスのいずれかを入力します。
  8. [ロール] リストで、ユーザーまたはグループに割り当てるロール(組織レベルの組織閲覧者、プロジェクト レベルのプロジェクト作成者など)を選択します。
  9. [追加] をクリックします。

メンバーが [承認済みメンバー] リストに表示されます。

gdcloud

  1. gdcloud CLI がインストールされていることを確認します。

  2. gdcloud auth login コマンドを使用してログインし、ID プロバイダで認証します。詳細については、gdcloud CLI 認証をご覧ください。

  3. ロール バインディングを設定します。

    • 組織のロール バインディングを設定します。

      gdcloud organizations add-iam-policy-binding root \
        --member=USER_ACCOUNT \
        --role=ROLE_TYPE/ROLE
      

      次の変数を置き換えます。

      • USER_ACCOUNT: ロールを付与するユーザー アカウント。このフラグは、ID プロバイダの接頭辞(user:idpprefix-user@example.com)が付いたユーザーのメールアドレス、またはサービス アカウント プロジェクト(serviceAccount:projectName:serviceAccountName)が付いたサービス アカウント名を受け入れます。
      • ROLE_TYPE: ロール バインディングを設定する ClusterRoleRole、または OrganizationRole
      • ROLE: ユーザーに割り当てる事前定義ロールまたはカスタムロールの名前(project-creator など)。
    • プロジェクトのロール バインディングを設定します。

      gdcloud projects add-iam-policy-binding PROJECT \
        --member=USER_ACCOUNT \
        --role=ROLE_TYPE/ROLE
      

      次の変数を置き換えます。

      • PROJECT: ロール バインディングを設定するプロジェクトの名前。
      • USER_ACCOUNT: ロールを付与するユーザー アカウント。このフラグは、ID プロバイダの接頭辞(user:idpprefix-user@example.com)が付いたユーザーのメールアドレス、またはサービス アカウント プロジェクト(serviceAccount:projectName:serviceAccountName)が付いたサービス アカウント名を受け入れます。
      • ROLE_TYPE: ロール バインディングを設定する Role または ProjectRole
      • ROLE: ユーザーに割り当てる事前定義ロールまたはカスタムロールの名前(project-viewer など)。

API

  1. 使用するユーザー認証情報をエクスポートします。

    export YOUR_IAM_ADMIN_KUBECONFIG=YOUR_IAM_ADMIN_KUBECONFIG
    
  2. ロールを割り当てるユーザー アカウントを、ID プロバイダの接頭辞(idpprefix-paul@example.com など)を含めてエクスポートします。

    export USERNAME=IDP_PREFIX-USER_EMAIL
    
  3. ユーザーが必要とするロールの名前(project-creator など)をエクスポートします。ロールの詳細については、ロールの定義をご覧ください。

    export ROLE_NAME=ROLE_NAME
    
  4. ユーザーを ClusterRoleRoleProjectRoleOrganizationRole のいずれかに割り当てます。

    • ユーザーを ClusterRole に割り当てる:

      kubectl create --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \
      clusterrolebinding ${USERNAME}-${ROLE_NAME}-binding \
      --clusterrole=${ROLE_NAME} --user=${USERNAME}
      

      ClusterRoleClusterRoleBinding ではなく RoleBinding が必要な場合は、ロール定義を参照して、ロールに必要なバインディング タイプを確認し、代わりに Namespace gpc-system に RoleBinding を作成します。

      kubectl create --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \
      rolebinding ${USERNAME}-${ROLE_NAME}-binding \
      --clusterrole=${ROLE_NAME} --user=${USERNAME} --namespace=gpc-system
      
    • ユーザーを Role に割り当てる:

      1. バインディングを作成する Namespace をエクスポートします。

        export BINDING_NAMESPACE=BINDING_NAMESPACE
        
      2. 次のコマンドを実行して RoleBinding を作成します。

        kubectl create --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \
        rolebinding ${USERNAME}-${ROLE_NAME}-binding \
        --role=${ROLE_NAME} --user=${USERNAME} --namespace=${BINDING_NAMESPACE}
        
    • ユーザーを ProjectRole に割り当てる:

      1. projectrolebinding.yaml ファイルを作成します。

        apiVersion: resourcemanager.gdc.goog/v1
        kind: ProjectRoleBinding
        metadata:
          name: BINDING_NAME
          namespace: PROJECT_NAME
        spec:
          roleRef:
            apiGroup: resourcemanager.gdc.goog
            kind: ProjectRole
            name: ROLE_NAME
          subjects:
          - apiGroup: rbac.authorization.k8s.io
            kind: USER_KIND
            name: USERNAME
        

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

        • BINDING_NAME: ユーザーがカスタマイズできるバインディングの名前(user-project-creator-binding など)。
        • PROJECT_NAME: ロールを付与するプロジェクトの名前。
        • ROLE_NAME: ユーザーに割り当てる ProjectRole の名前。
        • USER_KIND: ユーザーの種類。UserGroupServiceAccount のいずれかです。
        • USERNAME: ロールを割り当てるユーザーのメールアドレス。ID プロバイダの接頭辞(idpprefix-paul@example.com など)を含む。これは、エクスポートされた USERNAME と一致する必要があります。
      2. projectrolebinding.yaml ファイルを適用します。

        kubectl create -f projectrolebinding.yaml
        
    • ユーザーを OrganizationRole に割り当てます。

      1. organizationrolebinding.yaml ファイルを作成します。

        apiVersion: resourcemanager.gdc.goog/v1
        kind: OrganizationRoleBinding
        metadata:
          name: BINDING_NAME
          namespace: gpc-system
        spec:
          roleRef:
            apiGroup: resourcemanager.gdc.goog
            kind: OrganizationRole
            name: ROLE_NAME
          subjects:
          - apiGroup: rbac.authorization.k8s.io
            kind: USER_KIND
            name: USERNAME
        

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

        • BINDING_NAME: ユーザーがカスタマイズできるバインディングの名前(user-organization-creator-binding など)。
        • ROLE_NAME: ユーザーに割り当てる OrganizationRole の名前。
        • USER_KIND: ユーザーの種類。UserGroupServiceAccount のいずれかです。
        • USERNAME: ロールを割り当てるユーザーのメールアドレス。ID プロバイダの接頭辞(idpprefix-paul@example.com など)を含む。これは、エクスポートされた USERNAME と一致する必要があります。
      2. organizationrolebinding.yaml YAML ファイルを適用します。

        kubectl create -f organizationrolebinding.yaml
        

ロール バインディングを削除する

アクセスが不要になったら、メンバーとそれに関連するロール、権限、アクセス権を削除します。

メンバーを削除する手順は次のとおりです。

コンソール

  1. GDC コンソールにログインします。
  2. ナビゲーション メニューで、[Identity and Access] > [アクセス] をクリックします。
  3. [承認済みメンバー] リストで、メンバーを選択します。
  4. [メンバーを削除] をクリックします。
  5. 確認画面が表示されたら、[メンバーを削除] をクリックして確定します。

gdcloud

  1. gdcloud CLI がインストールされていることを確認します。

  2. gdcloud auth login コマンドを使用してログインし、ID プロバイダで認証します。詳細については、gdcloud CLI 認証をご覧ください。

  3. ロール バインディングを削除します。

    • 組織のロール バインディングを削除します。

      gdcloud organizations remove-iam-policy-binding root \
        --member=USER_ACCOUNT \
        --role=ROLE_TYPE/ROLE
      

      次の変数を置き換えます。

      • USER_ACCOUNT: ロールを削除するユーザー アカウント。このフラグは、ID プロバイダの接頭辞(user:idpprefix-user@example.com)が付いたユーザーのメールアドレス、またはサービス アカウント プロジェクト(serviceAccount:projectName:serviceAccountName)が付いたサービス アカウント名を受け入れます。
      • ROLE_TYPE: ロール バインディングを削除する ClusterRoleRole、または OrganizationRole
      • ROLE: ユーザー アカウントから削除する事前定義ロールまたはカスタムロールの名前(project-creator など)。
    • プロジェクトのロール バインディングを削除します。

      gdcloud projects remove-iam-policy-binding PROJECT \
        --member=USER_ACCOUNT \
        --role=ROLE_TYPE/ROLE
      

      次の変数を置き換えます。

      • PROJECT: ロール バインディングを削除するプロジェクトの名前。
      • USER_ACCOUNT: ロールを削除するユーザー アカウント。このフラグは、ID プロバイダの接頭辞(user:idpprefix-user@example.com)が付いたユーザーのメールアドレス、またはサービス アカウント プロジェクト(serviceAccount:projectName:serviceAccountName)が付いたサービス アカウント名を受け入れます。
      • ROLE_TYPE: ロール バインディングを削除する Role または ProjectRole
      • ROLE: ユーザー アカウントから削除する事前定義ロールまたはカスタムロールの名前(project-viewer など)。

API

  1. 使用するユーザー認証情報をエクスポートします。

    export YOUR_IAM_ADMIN_KUBECONFIG=YOUR_IAM_ADMIN_KUBECONFIG
    
  2. ロールを削除するユーザー アカウントを、ID プロバイダの接頭辞(idpprefix-paul@example.com など)を含めてエクスポートします。

    export USERNAME=IDP_PREFIX-USER_EMAIL
    
  3. バインディングが削除される Namespace をエクスポートします。

    export BINDING_NAMESPACE=BINDING_NAMESPACE
    
  4. ClusterRoleBindingRoleBindingProjectRoleBindingOrganizationRoleBinding を削除して、ユーザー アカウントに付与された権限を取り消します。

    • ユーザー アカウントから ClusterRoleBinding を削除します。

      kubectl --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \
      delete clusterrolebinding ${USERNAME}-pa
      
    • ユーザー アカウントから RoleBinding を削除します。

      kubectl --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \
      delete rolebinding ${USERNAME}-pa \
      --namespace=${BINDING_NAMESPACE}
      
    • ユーザー アカウントから ProjectRoleBinding を削除します。

      kubectl --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \
      delete projectrolebinding ${USERNAME}-pa \
      --namespace=${BINDING_NAMESPACE}
      
    • ユーザー アカウントから OrganizationRoleBinding を削除します。

      kubectl --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \
      delete organizationrolebinding ${USERNAME}-pa \
      --namespace=gpc-system
      

ユーザー アクセスを取り消す

メンバーが組織またはチームを離れる場合は、Google Distributed Cloud(GDC)エアギャップ アプライアンスへのアクセスを取り消すことができます。ユーザーのアクセス権を取り消すと、ユーザーは GDC のエアギャップ アプライアンスからログアウトし、ロールと権限が削除されます。ユーザーのアクティビティとセッションを開始時刻と終了時刻で一覧表示することもできます。

ユーザーのアクセス権を取り消す手順は次のとおりです。

  1. ユーザーの取り消しに必要な権限を取得します。組織の IAM 管理者に、組織セッション管理者(org-session-admin)ロールを付与するよう依頼します。

  2. ユーザーのアクセス権を取り消します。

    gdcloud admin auth revoke --accounts USER_EMAIL
    

    USER_EMAIL は、アクセス権を取り消すユーザーのメールアドレスに置き換えます。

    コマンドを実行すると、次のような出力が表示されます。この例では、ユーザー ariel@example.com からのアクセスを取り消します。

    Success: NUMBER of sessions revoked for user ariel@example.com
    

    この例では、変数 NUMBER はユーザーがアクティブにしたセッションの数を指します。

  3. gdcloud admin auth revoke コマンドを再度実行して、ユーザーのアクセス権が取り消されたことを確認します。成功すると、次のように表示されます。

    No sessions found for account: ariel@example.com
    

取り消されたすべてのユーザーを一覧表示する

取り消されたすべてのユーザーとそのアクティビティとセッションを表示するには、次の操作を行います。

  • 開始時間と終了時間で取り消されたすべてのユーザーを一覧表示します。

    gdcloud admin auth list --format="csv(ACCOUNT, IDENTITY_PROVIDER, CREATION_TIME, EXPIRATION_TIME)"
    

    成功すると、次のような出力が表示されます。

    account,identity_provider,creation_time,expiration_time
    ariel@example.com,example-idp,2023-02-15 22:10:52,2023-02-15 23:10:52