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

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

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

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

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

    • クラスタ全体のアクセスの場合: クラスタ内のすべての Namespace へのアクセス権を付与するには、OrganizationRole と対応する OrganizationRoleBinding を作成します。このプロセスでは、Kubernetes ClusterRole と ClusterRoleBinding が 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. [ロール] リストで、ユーザーまたはグループに割り当てるロール(組織レベルの組織閲覧者、プロジェクト レベルのプロジェクト作成者など)を選択します。
  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: ロール バインディングを設定する ClusterRole、Role、または 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
    export USERNAME=IDP_PREFIX-USERNAME
    export ROLE_NAME=ROLE_NAME
    export USER_EMAIL=IDP_PREFIX-USER_EMAIL
    

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

    • YOUR_IAM_ADMIN_KUBECONFIG: IAM 管理者の kubeconfig ファイルのパス。
    • IDP_PREFIX: ID プロバイダの接頭辞。
    • USERNAME: ユーザーのメールアドレスの @ 記号の前のユーザー名部分(paul@example.com の paul など)。
    • ROLE_NAME: ユーザーに必要なロールの名前(project-creator など)。ロールの詳細については、ロールの定義をご覧ください。
    • USER_EMAIL: ロールを割り当てるユーザー アカウントのメールアドレス(paul@example.com など)。
  2. ユーザーを ClusterRole、Role、ProjectRole、OrganizationRole のいずれかに割り当てます。

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

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

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

      kubectl create --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \
      rolebinding ${USERNAME}-${ROLE_NAME}-binding \
      --clusterrole=${ROLE_NAME} --user=${USER_EMAIL} --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=${USER_EMAIL} --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: IDP_PREFIX-USER_EMAIL
        

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

        • BINDING_NAME: ユーザーがカスタマイズできるバインディングの名前(user-project-creator-binding など)。
        • PROJECT_NAME: ロールを付与するプロジェクトの名前。
        • ROLE_NAME: ユーザーに割り当てる ProjectRole の名前。
        • USER_KIND: ユーザーの種類。User、Group、ServiceAccount のいずれかです。
        • IDP_PREFIX: ID プロバイダの接頭辞。
        • USER_EMAIL: ロールを割り当てるユーザー アカウントのメールアドレス(paul@example.com など)。
      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: IDP_PREFIX-USER_EMAIL
        

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

        • BINDING_NAME: ユーザーがカスタマイズできるバインディングの名前(user-organization-creator-binding など)。
        • ROLE_NAME: ユーザーに割り当てる OrganizationRole の名前。
        • USER_KIND: ユーザーの種類。User、Group、ServiceAccount のいずれかです。
        • IDP_PREFIX: ID プロバイダの接頭辞。
        • USER_EMAIL: ロールを割り当てるユーザー アカウントのメールアドレス(paul@example.com など)。
      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: ロール バインディングを削除する ClusterRole、Role、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
    export USERNAME=IDP_PREFIX-USERNAME
    export BINDING_NAMESPACE=BINDING_NAMESPACE
    

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

    • YOUR_IAM_ADMIN_KUBECONFIG: IAM 管理者の kubeconfig ファイルのパス。
    • IDP_PREFIX: ID プロバイダの接頭辞。
    • USERNAME: ユーザーのメールアドレスの @ 記号の前のユーザー名部分(paul@example.com の paul など)。
    • BINDING_NAMESPACE: バインディングが削除される Namespace。
  2. ClusterRoleBinding、RoleBinding、ProjectRoleBinding、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