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

すべてのサブジェクト(ユーザーまたはグループ)は、Management API サーバーと Kubernetes クラスタへのアクセス権を取得するために、次の 2 つの手順を行います。

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

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

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

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

このページは、組織内の権限を管理するプラットフォーム管理者グループ内のユーザーを対象としています。

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

始める前に

ロール バインディングの管理またはアクセス権の取り消しを行う前に、必要な権限をリクエストして環境を準備する必要があります。必要な特定のロールは、ロール バインディングを管理するか、ユーザー アクセス権を取り消すかによって異なります。

IAM ロールをリクエストする

実行する必要があるタスクに基づいてロールをリクエストするには、組織 IAM 管理者にお問い合わせください。

  • 組織 IAM 管理者organization-iam-admin): 組織レベルとプロジェクト レベルでロール バインディングを作成、更新、削除します。
  • 組織セッション管理者org-session-admin): 特定のゾーン内のユーザーのアクティブ セッションとアクセス権を取り消します。

環境を準備する

コマンドライン ツールを使用してロール バインディングを管理またはアクセス権を取り消すには、次の設定を行います。

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

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

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

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

コンソール

  1. GDC コンソールにログインします。
  2. [プロジェクトを選択] をクリックして、組織またはプロジェクトを選択します。
    • 組織のロール バインディングを設定するには、組織を選択します。
    • プロジェクトのロール バインディングを設定するには、プロジェクトを選択します。
  3. ナビゲーション メニューで、[ID とアクセス] > [アクセス] をクリックします。
  4. [メンバーを追加] をクリックします。
  5. [ID プロバイダ] リストで、ID プロバイダを選択します。
  6. 個々のユーザーまたはグループを追加するかどうかを選択します。
  7. [ユーザー名またはグループ エイリアス] フィールドに、ユーザー名、メールアドレス、またはエイリアスを入力します。
  8. In the [Role] list, select the role that you want to assign to the user or group, such as [Organization Viewer] at the organization level or [Project Creator] at the project level.
  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. ユーザーを ClusterRoleRoleProjectRole、または OrganizationRole に割り当てます。

    • ユーザーを ClusterRole に割り当てます。

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

      ClusterRoleRoleBinding ではなく ClusterRoleBinding が必要な場合は、ロールに必要なバインディング タイプを確認し、Namespace gpc-system に RoleBinding を作成します。詳細については、 Role definitions をご覧ください。

      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. ナビゲーション メニューで、[ID とアクセス] > [アクセス] をクリックします。
  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. ClusterRoleBindingRoleBindingProjectRoleBinding、または OrganizationRoleBinding を削除して、ユーザー アカウントに付与された権限を取り消します。

    • ユーザー アカウントから 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