このページでは、タグを使用して Google Kubernetes Engine(GKE)クラスタを管理し、Identity and Access Management ポリシーをノードに条件付きで適用する方法について説明します。
概要
タグは、組織レベルまたはプロジェクト レベルで Google Cloud リソースにアノテーションを付けて管理できる Key-Value です。タグを使用してリソースを整理し、ファイアウォールや IAM ポリシーなどの条件付きでポリシーを適用できます。タグは IAM アクセス制御をサポートしており、タグの添付、作成、更新、削除を実施できるユーザーを定義できます。
GKE でタグを使用するユースケース
次のような状況では、GKE でタグを使用できます。
- 特定のノードにネットワーク ファイアウォール ポリシーを条件付きで適用します。たとえば、公共のインターネットからステージング環境またはテスト環境のクラスタのすべてのノードへの上り(内向き)トラフィックを拒否します。手順については、GKE でネットワーク ファイアウォール ポリシーを選択的に適用するをご覧ください。
- タグに基づいて IAM ロールを条件付きで付与します。たとえば、通常はフルタイムの従業員のみが使用できる特定の環境へのアクセスを請負業者に自動的に許可します。手順については、このドキュメントの残りの部分をご覧ください。
- プロジェクト レベルまたは組織レベルで適用されたタグに基づいて、課金情報の監査と分析を行います。
仕組み
ネットワーク ファイアウォール ポリシーの適用では、タグを作成し、ファイアウォールで使用するタグを明示的に指定します。それ以外の目的では、ファイアウォールを指定せずにタグを作成します。
タグを作成したら、そのタグを Key-Value ペアとして GKE リソースに追加します。ネットワーク ファイアウォール ポリシーの場合は GKE API を使用し、その他の場合は Tags API を使用します。
キーごとに、1 つの値を 1 つのリソースに付加できます。たとえば、env:dev
を GKE クラスタに付加した場合、env:prod
または env:test
は付加できません。各リソースには、ファイアウォール以外のタグを最大 50 個、ファイアウォール タグを最大 5 個適用できます。
GKE でのリソース アノテーションの方法
GKE では、次の表に概要を示すように、リソースにアノテーションを付加する方法がいくつかあります。
アノテーション タイプ | 説明 | 例 |
---|---|---|
タグ(ファイアウォール以外) |
詳細については、タグの概要をご覧ください。 |
IAM のロールを条件付きで付与して、特定のタグを持つリソースへのアクセスを制御します |
タグ(ファイアウォール) |
詳細については、GKE でネットワーク ファイアウォール ポリシーを選択的に適用するをご覧ください。 |
公共のインターネットからステージング環境またはテスト環境への上り(内向き)トラフィックをすべて自動的に拒否する |
ネットワーク タグ |
詳細については、ネットワーク タグを使用してファイアウォール ルールをノードに適用するをご覧ください。 |
公共のインターネットからステージング環境またはテスト環境への上り(内向き)トラフィックをすべて自動的に拒否する |
GKE クラスタラベル |
詳細については、クラスタラベルをご覧ください。 |
組織内の特定のコストセンターまたはチームが所有するクラスタを区別します。 |
Kubernetes ラベル |
詳細については、Kubernetes のラベルとセレクタをご覧ください。 |
特定のラベルを持つノードでワークロードがスケジュールされる必要があります。 |
始める前に
始める前に、次の作業が完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、
gcloud components update
を実行して最新のバージョンを取得する。
次の IAM ロールがあることを確認します。
roles/resourcemanager.tagAdmin
roles/resourcemanager.tagUser
これらのロールで付与される権限については、必要な権限をご覧ください。
クラスタにタグを付加する
適切な権限を付与されている場合は、Google Cloud CLI、Google Cloud コンソール、Tags API、または Terraform を使用して既存のクラスタにタグを付加できます。
gcloud
gcloud CLI を使用して GKE リソースにタグを適用するには、まず、タグを作成して値を構成する必要があります。タグキーとタグ値を作成するには、タグの作成とタグ値の追加をご覧ください。
タグをクラスタに付加するタグ バインディングを作成するには、次のコマンドを実行します。
gcloud alpha resource-manager tags bindings create \
--tag-value=TAG_VALUE_ID \
--parent=RESOURCE_ID \
--location=CLUSTER_LOCATION
次のように置き換えます。
TAG_VALUE_ID
: 付加するタグ値の永続的な ID または名前空間付きの名前。例:tagValues/4567890123
タグ識別子の詳細については、タグの定義と識別子をご覧ください。CLUSTER_LOCATION
: Compute Engine のロケーション。ゾーンクラスタの場合は、コンピューティング ゾーンを指定します。RESOURCE_ID
: クラスタの完全なリソース名(//container.googleapis.com/projects/PROJECT_ID/locations/CLUSTER_LOCATION/clusters/CLUSTER_NAME
など)。リソース ID で:
PROJECT_ID
: Google Cloud プロジェクト ID。CLUSTER_NAME
: クラスタの名前。
コンソール
Google Cloud コンソールを使用して GKE リソースにタグを適用するには、まず、タグを作成して値を構成する必要があります。タグキーとタグ値を作成するには、タグの作成とタグ値の追加をご覧ください。
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
クラスタのリストで、変更するクラスタの名前をクリックします。
[メタデータ] セクションで、[タグ] の横にある
[タグの編集] をクリックします。組織が [タグ] パネルに表示されない場合は、[スコープの選択] をクリックします。組織を選択して [開く] をクリックします。
[タグ] パネルで、[タグを追加] を選択します。
リストから付加するタグのキーを選択します。リストは、キーワードを入力してフィルタできます。
リストから付加するタグの値を選択します。リストは、キーワードを入力してフィルタできます。
[保存] をクリックします。
[確認] ダイアログで、[確認] をクリックしてタグを付加します。
タグが更新されたことは、通知によって確認します。
API
タグをリソースに付加するには、まず、タグ値とリソースの永続的な ID を含むタグ バインディングの JSON 表現を作成する必要があります。タグ バインディングの形式について詳しくは、TagBinding リファレンスをご覧ください。
クラスタが配置されているリージョン エンドポイントまたはゾーン エンドポイントを指定して、tagBindings.create
メソッドを使用します。
POST https://LOCATION-cloudresourcemanager.googleapis.com/v3/tagBindings
LOCATION
は、クラスタが配置されているリージョンまたはゾーンに置き換えます。
JSON リクエストの本文:
{
"parent": "RESOURCE_ID",
"tagValue": "TAG_VALUE_ID"
}
次のように置き換えます。
RESOURCE_ID
: クラスタの完全なリソース名(//container.googleapis.com/projects/PROJECT_ID/locations/CLUSTER_LOCATION/clusters/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/clusters/CLUSTER_NAME/tagValues/TAG_VALUE_ID",
"parent": "//container.googleapis.com/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME",
"tagValue": "TAG_VALUE_ID"
}
}
Terraform
Terraform を使用してタグを作成し、その値を構成してリソースにタグを適用するには、次の例をご覧ください。
Terraform の使用方法の詳細については、GKE での Terraform のサポートをご覧ください。
クラスタに付加されたタグを一覧取得する
クラスタに付加されたタグは、gcloud CLI、Google Cloud コンソール、または Tags API を使用して一覧表示できます。
gcloud
クラスタに付加されているタグ バインディングのリストを取得するには、次のコマンドを実行します。
gcloud alpha resource-manager tags bindings list \
--parent=RESOURCE_ID \
--location=CLUSTER_LOCATION
次のように置き換えます。
CLUSTER_LOCATION
: リージョン クラスタの場合は、コンピューティング リージョンを指定します。ゾーンクラスタの場合は、コンピューティング ゾーンを指定します。RESOURCE_ID
: クラスタの完全なリソース名(//container.googleapis.com/projects/PROJECT_ID/locations/CLUSTER_LOCATION/clusters/CLUSTER_NAME
など)。リソース ID で:
PROJECT_ID
: Google Cloud プロジェクト ID。CLUSTER_NAME
: クラスタの名前。
コンソール
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/clusters/CLUSTER_NAME
など)。リソース ID で:
PROJECT_ID
: Google Cloud プロジェクト ID。CLUSTER_NAME
: クラスタの名前。
出力は次のようになります。
"tagBindings": [
{
"name": "tagBindings/%2F%2Fcontainer.googleapis.com%2Fprojects%2Ftags-bugbash-project%2Flocations%2LOCATION%2Fclusters%2Ftestcluster/tagValues/758072120217",
"parent": "//container.googleapis.com/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME",
"tagValue": "TAG_VALUE_ID"
}
]
クラスタからタグを切断する
gcloud CLI、Google Cloud コンソール、または Tags API を使用して、クラスタに接続されたタグ バインディング リソースを削除することで、タグをクラスタから切断できます。タグを削除する必要がある場合は、まず、接続されているすべてのリソースから切断する必要があります。
gcloud
クラスタに接続されているタグ バインディングを切断するには、次のコマンドを実行します。
gcloud alpha resource-manager tags bindings delete \
--tag-value=TAG_VALUE_ID \
--parent=RESOURCE_ID \
--location=CLUSTER_LOCATION
次のように置き換えます。
TAG_VALUE_ID
: 切断するタグ値の永続的な ID または名前空間付きの名前。例:tagValues/4567890123
タグ識別子の詳細については、タグの定義と識別子をご覧ください。CLUSTER_LOCATION
: リージョン クラスタの場合は、コンピューティング リージョンを指定します。ゾーンクラスタの場合は、コンピューティング ゾーンを指定します。RESOURCE_ID
: クラスタの完全なリソース名(//container.googleapis.com/projects/PROJECT_ID/locations/CLUSTER_LOCATION/clusters/CLUSTER_NAME
など)。リソース ID で:
PROJECT_ID
: Google Cloud プロジェクト ID。CLUSTER_NAME
: クラスタの名前。
コンソール
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 でタグを使用する方法を確認する。