プロジェクト タグを管理する

このドキュメントでは、Google Distributed Cloud(GDC)エアギャップでプロジェクトを整理する既存のタグの Key-Value ペアを管理する方法について説明します。タグは、Identity and Access Management(IAM)権限を使用して管理者が表示できます。タグの Key-Value ペアの権限を設定して、プロジェクトにバインドされたときに誰が閲覧できるかを制御できます。既存のタグ属性を表示して、組織内でタグがどのように適用されているかを把握することもできます。たとえば、次のようになります。

タグの詳細については、タグの概要をご覧ください。

このドキュメントは、GDC ユニバースでプロジェクトの整理と管理を担当するプラットフォーム管理者グループ内の IT 管理者を対象としています。詳細については、GDC エアギャップの対象ユーザーに関するドキュメントをご覧ください。

始める前に

  • 他のユーザーにタグ権限を付与したり、タグのキーと値のペアの Namespace を検査したりするために必要な権限を取得するには、組織 IAM 管理者にタグ管理者ロール(tag-admin)の付与を依頼してください。

  • タグ付きプロジェクトを一覧表示するために必要な権限を取得するには、組織 IAM 管理者にプロジェクト閲覧者ロール(project-viewer)の付与を依頼してください。

タグの Key-Value ペアに権限を適用する

各タグキーとタグ値には、ユーザーがアクセスして管理するための特定のロール バインディングが必要です。

タグキーと値に適切なロールを設定して、権限を適用します。

  1. 目的のロール名と、そのロールを適用するために必要な Namespace を特定します。詳細については、タグの使用状況をご覧ください。

  2. 定義された各 Namespace に RoleBinding リソースを適用して、タグのロール権限を付与します。

    kubectl apply -f - <<EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: BINDING_NAME
      namespace: NAMESPACE
    subjects:
    - kind: GROUP_SUBJECT
      name: GROUP_NAME
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: Role
      name: TAG_ROLE_NAME
      apiGroup: rbac.authorization.k8s.io
    EOF
    

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

    • BINDING_NAME: ロール バインディングのカスタム名。

    • NAMESPACE: ロール バインディングを適用する Namespace(platform、タグキーの管理 Namespace、タグ値のポリシー Namespaceなど)。

    • GROUP_SUBJECT: ロールの権限を適用するサブジェクトの種類。この値は UserGroupServiceAccount のいずれかです。詳細については、サブジェクトの参照に関する Kubernetes のドキュメントをご覧ください。

    • GROUP_NAME: カスタム グループ名。

    • TAG_ROLE_NAME: 適用するタグロールの名前(tag-admintag-KEY_NAME-admin など)。

    たとえば、タグのキーと値のペアに対する tag-admin ロールの権限をユーザーに付与するには、次の RoleBinding カスタム リソースを platform Namespace、タグキーの managementNamespace、タグ値の policyNamespace にデプロイします。

    kubectl apply -f - <<EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: tag-admin-binding
      namespace: platform
    subjects:
    - kind: User
      name: user-1
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: Role
      name: tag-admin
      apiGroup: rbac.authorization.k8s.io
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: tag-admin-mgmt-binding
      namespace: g-t-tag-key-1
    subjects:
    - kind: User
      name: user-1
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: Role
      name: tag-admin
      apiGroup: rbac.authorization.k8s.io
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: tag-admin-policy-binding
      namespace: g-t-tag-value-1
    subjects:
    - kind: User
      name: user-1
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: Role
      name: tag-admin
      apiGroup: rbac.authorization.k8s.io
    EOF
    

管理 Namespace を見つける

管理名前空間は、タグキー用に作成されたシステム生成の名前空間です。

  • 特定のタグキーの管理 Namespace を見つけます。

    kubectl get tagkey TAG_KEY_NAME --namespace platform \
        -o jsonpath='{.status.managementNamespace}'
    

    TAG_KEY_NAME は、タグキーの名前に置き換えます。

ポリシーの Namespace を見つける

ポリシー Namespace は、タグ値用に作成されたシステム生成の Namespace です。

  • 特定のタグ値のポリシー Namespace を見つけます。

    kubectl get tagvalue TAG_VALUE_NAME --namespace MANAGEMENT_NAMESPACE \
        -o jsonpath='{.status.policyNamespace}'
    

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

    • TAG_VALUE_NAME: タグ値の名前。
    • MANAGEMENT_NAMESPACE: タグ値に対応するタグキーの管理用名前空間の名前。詳細については、管理 Namespace を見つけるをご覧ください。

タグ付きのプロジェクトを一覧表示する

特定の Key-Value ペアにバインドされているすべてのプロジェクトを一覧表示するには、次の操作を行います。

  • タグの Key-Value ペアに一致するすべてのプロジェクトを一覧表示します。

    kubectl get project --namespace platform --label tag.resourcemanager.gdc.goog/TAG_KEY_NAME=TAG_VALUE_NAME
    

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

    • TAG_KEY_NAME: タグキーの名前。
    • TAG_VALUE_NAME: タグ値の名前。

    出力は次のようになります。

    NAME            AGE
    project-1       17d
    project-2       10d
    project-3       4d
    

次のステップ