このページでは、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.tagAdminroles/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ロケーションの名前。
コンソール
Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。
クラスタのリストで、変更するクラスタの名前をクリックします。
[メタデータ] セクションで、[タグ] の横にある [タグの編集] をクリックします。
組織が [タグ] パネルに表示されない場合は、[スコープの選択] をクリックします。組織を選択して [開く] をクリックします。
[タグ] パネルで、[タグを追加] を選択します。
リストから付加するタグのキーを選択します。リストは、キーワードを入力してフィルタできます。
リストから付加するタグの値を選択します。リストは、キーワードを入力してフィルタできます。
[保存] をクリックします。
[確認] ダイアログで、[確認] をクリックしてタグを付加します。
タグが更新されたことは、通知によって確認します。
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ロケーション。
コンソール
Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。
クラスタのリストで、表示するクラスタの名前をクリックします。
[メタデータ] セクションで、[タグ] の横に現在付加されているタグ値を探します。
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ロケーション。
コンソール
Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。
クラスタのリストで、変更するクラスタの名前をクリックします。
[メタデータ] セクションで、[タグ] の横にある [タグの編集] をクリックします。
[タグ] パネルで、切断するタグの横にある [項目を削除] をクリックします。
[保存] をクリックします。
[確認] ダイアログで、[確認] をクリックしてタグを切断します。
タグが更新されたことは、通知によって確認します。
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 の条件とタグをご覧ください。
次のステップ
- タグを使用して組織のポリシーを設定する方法を確認する。
- タグを管理してリソースにタグを付加する方法の詳細を確認する。
- タグをサポートするその他のサービスを確認する。
- IAM でタグを使用する方法を確認する。