AKS 接続クラスタでタグを作成して管理する

このページでは、GKE 接続クラスタでタグを作成および管理する方法について説明します。

概要

タグは、 Google Cloud内のリソースに適用できる Key-Value ペアです。タグを使用すると、リソースに特定のタグが付加されているかどうかに基づいて、条件付きでポリシーの許可や拒否を行うことができます。

プラットフォーム管理者として、タグのユースケースは、クラスタに特定のタグが付加されているかどうかに基づき、Identity and Access Management(IAM)のロールを条件付きで付与することです。たとえば、通常はフルタイムの従業員のみが使用できる特定のクラスタにアクセスできるよう、契約社員であるユーザーに自動的に Identity and Access Management のロールを付与するように GKE を構成できます。

タグを作成したら、タグ バインディングを使用して、 Google Cloud リソースに Key-Value ペアとしてタグを付加できます。キーごとに、1 つの値を 1 つのリソースに付加できます。たとえば、env:dev をクラスタに付加した場合、env:prod または env:test は付加できません。各リソースには最大 50 個のタグを付加できます。

GKE 接続クラスタでは、次の表に示すように、リソースにアノテーションを付加する方法がいくつかあります。

アノテーション タイプ レベル 説明
タグ GKE クラスタ

タグに基づいて、条件付きでポリシーを許可または拒否します。

詳細については、Resource Manager ドキュメントのタグの概要をご覧ください。

契約社員であるユーザーに、通常はフルタイム従業員のみが使用できる特定のクラスタへのアクセス権を自動的に付与します。
GKE クラスタラベル GKE クラスタ

GKE リソースを整理して、使用状況と課金を追跡します。

詳細については、クラスタラベルをご覧ください。

組織内の特定のコストセンターまたはチームが所有するクラスタを区別します。
Kubernetes ラベル GKE クラスタ

クラスタ コンポーネントとリソースを相互に関連付け、リソースのライフサイクルを管理します。

詳細については、Kubernetes のラベルとセレクタをご覧ください。

特定のラベルを持つノードでワークロードがスケジュールされる必要があります。

始める前に

作業を始める前に、次のタスクが完了していることを確認してください。

  • Google Kubernetes Engine API を有効にする。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。gcloud CLI をインストール済みの場合は、gcloud components update コマンドを実行して最新のバージョンを取得します。以前のバージョンの gcloud CLI では、このドキュメントのコマンドを実行できない場合があります。
  • タグを操作するには、次の IAM ロールが必要です。

    • roles/resourcemanager.tagAdmin
    • roles/resourcemanager.tagUser

    これらのロールで付与される権限については、必要な権限をご覧ください。

タグキーとタグ値を作成する

GKE リソースにタグを付加するには、まずタグを作成して値を構成する必要があります。タグキーとタグ値を作成するには、Resource Manager ドキュメントのタグの作成タグ値の追加をご覧ください。

クラスタにタグを付加する

適切な権限を付与されている場合は、Google Cloud CLI、 Google Cloud コンソール、または Tags API を使用して既存のクラスタにタグを付加できます。

gcloud

タグをクラスタに付加するタグ バインディングを作成するには、次のコマンドを実行します。

gcloud resource-manager tags bindings create \
    --tag-value=TAG_VALUE_ID \
    --parent=RESOURCE_ID \
    --location=CLUSTER_LOCATION

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

  • TAG_VALUE_ID: 付加するタグ値の永続的な ID または名前空間付きの名前。例: tagValues/4567890123 タグ識別子の詳細については、タグの定義と識別子をご覧ください。
  • RESOURCE_ID: クラスタの完全なリソース名//container.googleapis.com/projects/PROJECT_ID/locations/CLUSTER_LOCATION/attachedClusters/CLUSTER_NAME など)。

    リソース ID で:

    • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
    • CLUSTER_NAME: クラスタの名前。
  • CLUSTER_LOCATION: クラスタが管理される Google Cloudロケーションの名前。

コンソール

  1. Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。

    Google Kubernetes Engine に移動

  2. クラスタのリストで、変更するクラスタの名前をクリックします。

  3. [メタデータ] セクションで、[タグ] の横にある [タグの編集] をクリックします。

  4. 組織が [タグ] パネルに表示されない場合は、[スコープの選択] をクリックします。組織を選択して [開く] をクリックします。

  5. [タグ] パネルで、[タグを追加] を選択します。

  6. リストから付加するタグのキーを選択します。リストは、キーワードを入力してフィルタできます。

  7. リストから付加するタグの値を選択します。リストは、キーワードを入力してフィルタできます。

  8. [保存] をクリックします。

  9. [確認] ダイアログで、[確認] をクリックしてタグを付加します。

    タグが更新されたことは、通知によって確認します。

API

タグをリソースに付加するには、まず、タグ値とリソースの永続的な ID を含むタグ バインディングの JSON 表現を作成する必要があります。タグ バインディングの形式について詳しくは、TagBinding リファレンスをご覧ください。

クラスタが配置されているエンドポイントを指定して、tagBindings.create メソッドを使用します。

POST https://LOCATION-cloudresourcemanager.googleapis.com/v3/tagBindings

LOCATION は、クラスタが配置されている Google Cloudロケーション(us-central1 など)に置き換えます。

JSON リクエストの本文:

{
  "parent": "RESOURCE_ID",
  "tagValue": "TAG_VALUE_ID"
}

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

  • RESOURCE_ID: クラスタの完全なリソース名//container.googleapis.com/projects/PROJECT_ID/locations/CLUSTER_LOCATION/attachedClusters/CLUSTER_NAME など)。

    リソース ID で:

    • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
    • CLUSTER_NAME: クラスタの名前。
  • TAG_VALUE_ID: 付加するタグ値の永続的な ID または名前空間付きの名前。例: tagValues/4567890123 タグ識別子の詳細については、タグの定義と識別子をご覧ください。

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

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.resourcemanager.v3.TagBinding",
    "name": "tagBindings///container.googleapis.com/projects/PROJECT_ID/locations/LOCATION/attachedClusters/CLUSTER_NAME/tagValues/TAG_VALUE_ID",
    "parent": "//container.googleapis.com/projects/PROJECT_ID/locations/LOCATION/attachedClusters/CLUSTER_NAME",
    "tagValue": "TAG_VALUE_ID"
  }
}

クラスタに付加されたタグの一覧を取得する

gcloud CLI、 Google Cloud コンソール、または Tags API を使用して、クラスタに付加されたタグを一覧表示できます。

gcloud

クラスタに付加されているタグ バインディングのリストを取得するには、次のコマンドを実行します。

gcloud resource-manager tags bindings list \
    --parent=RESOURCE_ID \
    --location=CLUSTER_LOCATION

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

  • RESOURCE_ID: クラスタの完全なリソース名//container.googleapis.com/projects/PROJECT_ID/locations/CLUSTER_LOCATION/attachedClusters/CLUSTER_NAME など)。

    リソース ID で:

    • PROJECT_ID: 実際の Google Cloud プロジェクト ID。

    • CLUSTER_NAME: クラスタの名前。

  • CLUSTER_LOCATION: クラスタが配置されている Google Cloudロケーション。

コンソール

  1. Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。

    Google Kubernetes Engine に移動

  2. クラスタのリストで、表示するクラスタの名前をクリックします。

  3. [メタデータ] セクションで、[タグ] の横に現在付加されているタグ値を探します。

API

クラスタのタグ バインディングのリストを取得するには、クラスタが配置されているエンドポイントを指定して tagBindings.list メソッドを使用します。

GET https://LOCATION-cloudresourcemanager.googleapis.com/v3/tagBindings

JSON リクエストの本文:

{
  "parent": RESOURCE_ID,
}

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

  • RESOURCE_ID: クラスタの完全なリソース名//container.googleapis.com/projects/PROJECT_ID/locations/CLUSTER_LOCATION/attachedClusters/CLUSTER_NAME など)。

    リソース ID で:

    • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
    • CLUSTER_NAME: クラスタの名前。

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

"tagBindings": [
  {
    "name": "tagBindings/%2F%2Fcontainer.googleapis.com%2Fprojects%2Ftags-bugbash-project%2Flocations%2Fus-central1%2Fclusters%2Ftestcluster/tagValues/758072120217",
    "parent": "//container.googleapis.com/projects/PROJECT_ID/locations/LOCATION/attachedClusters/CLUSTER_NAME",
    "tagValue": "TAG_VALUE_ID"
  }
]

クラスタからタグを切断する

gcloud CLI、Google Cloud コンソール、または Tags API を使用して、クラスタに接続されたタグ バインディング リソースを削除することで、タグをクラスタから切断できます。タグを削除する必要がある場合は、まず、接続されているすべてのリソースから切断する必要があります。

gcloud

クラスタに接続されているタグ バインディングを切断するには、次のコマンドを実行します。

gcloud resource-manager tags bindings delete \
    --tag-value=TAG_VALUE_ID \
    --parent=RESOURCE_ID \
    --location=CLUSTER_LOCATION

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

  • TAG_VALUE_ID: 切断するタグ値の永続的な ID または名前空間付きの名前。例: tagValues/4567890123タグ識別子の詳細については、タグの定義と識別子をご覧ください。

  • RESOURCE_ID: クラスタの完全なリソース名//container.googleapis.com/projects/PROJECT_ID/locations/CLUSTER_LOCATION/attachedClusters/CLUSTER_NAME など)。

    リソース ID で:

    • PROJECT_ID: 実際の Google Cloud プロジェクト ID。

    • CLUSTER_NAME: クラスタの名前。

  • CLUSTER_LOCATION: クラスタが配置されている Google Cloudロケーション。

コンソール

  1. Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。

    Google Kubernetes Engine に移動

  2. クラスタのリストで、変更するクラスタの名前をクリックします。

  3. [メタデータ] セクションで、[タグ] の横にある [タグの編集] をクリックします。

  4. [タグ] パネルで、切断するタグの横にある [項目を削除] をクリックします。

  5. [保存] をクリックします。

  6. [確認] ダイアログで、[確認] をクリックしてタグを切断します。

    タグが更新されたことは、通知によって確認します。

API

クラスタのタグ バインディングを削除するには、クラスタが配置されているエンドポイントを指定して tagBindings.delete メソッドを使用します。

DELETE https://LOCATION-cloudresourcemanager.googleapis.com/v3/TAG_BINDING_NAME

TAG_BINDING_NAME は、切断する tagBinding オブジェクトの完全なリソース名に置き換えます。例: tagBindings/container.googleapis.com/projects/PROJECT_ID/locations/LOCATION/tagValues/TAG_VALUE_ID

タグキーとタグ値を削除する

タグキーとタグ値を削除する前に、すべてのリソースからタグが切断されていることを確認します。その後、タグの削除を参照して、キーと値を削除します。

Identity and Access Management の条件とタグ

タグと IAM の条件を使用すると、プロジェクト階層内のユーザーに条件付きでロール バインディングを付与できます。条件付きロール バインディングを含む IAM ポリシーが適用されているクラスタに付加されたタグを変更または削除すると、GKE は更新された条件に基づいてアクセス権を再評価します。

GKE クラスタの一覧取得と作成の承認は、個々のクラスタレベルではなく、プロジェクト レベルで確認されます。クラスタレベルのタグで条件付き IAM ロール バインディングを使用して特定のクラスタへのアクセスを制限すると、それらのユーザーがプロジェクトでクラスタを一覧表示または作成しようとすると、エラーが発生する可能性があります。これらのエラーを回避するには、親プロジェクトにタグを付加し、条件付きロール バインディングを使用して一覧表示または作成を行うためのアクセス権を付与します。ロールと権限については、IAM ロールのリファレンスをご覧ください。

IAM での条件付きアクセス権付与の詳細については、Identity and Access Management の条件とタグをご覧ください。

次のステップ