このページでは、タグの概要について説明します。また、Identity and Access Management(IAM)でタグを使用して、Google Cloud リソースへのアクセスを制御する方法についても説明します。
タグの概要
タグは、組織、フォルダ、プロジェクトに関連付けられた Key-Value ペアです。リソースに特定のタグが設定されているかどうかに応じて、IAM のロールを条件付きで付与できます。
他のリソースは、親組織、フォルダ、プロジェクトからタグ値を継承します。その結果、タグを使用して任意の Google Cloud リソースへのアクセスを管理できます。
タグの一般的な使用例
タグを使用してアクセスを管理する一般的なユースケースは次のとおりです。
- 開発環境、ステージング環境、本番環境。たとえば、開発環境に
environment: dev
、本番環境にenvironment: prod
のタグを追加できます。 - コンポーネントのタイプたとえば、タグの
component: frontend
をフロントエンド リソースに、component: batch
をバッチ処理のリソースに追加します。 - プロジェクト名。たとえば、チームが Codename Atlas を使用するプロジェクトで作業している場合、タグ
project: atlas
をチームの開発リソースに追加できます。
タグとリソース階層
Google Cloud では、リソースは階層の一部であり、下位レベルのリソースは上位レベルのリソースからプロパティを継承できます。タグは、リソースが継承できるプロパティの 1 つです。たとえば、組織にタグを適用すると、その組織内のフォルダ、プロジェクト、サービス固有のリソースがそのタグを継承します。
リソースでタグの値を継承しないようにするには、フォルダまたはプロジェクトに別のタグを追加します。ただし、同じキーを別の組織やフォルダのものとは異なる値で使用します。実際には、組織またはフォルダ上の各タグがデフォルト値を提供し、フォルダやプロジェクトなどの下位レベルのリソースで、デフォルト値をオーバーライドします。
たとえば、タグ environment: dev
をフォルダに適用して、そのフォルダに team-a
と team-b
という 2 つの子フォルダがあるとします。また、別のタグ environment: test
を team-b
フォルダに適用することもできます。その結果、team-a
フォルダ内のリソースはタグ environment: dev
を継承し、team-b
フォルダ内のリソースはタグ environment: test
を継承します。
team-b
フォルダから environment: test
タグを削除すると、そのフォルダとそのリソースはタグ environment: dev
を継承します。
タグの定義と識別子
リソースにタグを付ける前に、タグのキーと、タグで許可する値を定義する必要があります。これらの定義は組織に関連付けられます。Resource Manager を使用してタグの定義を管理します。詳細については、新しいタグの作成と定義をご覧ください。
タグのキーと値にはいくつかの異なる ID があります。
-
永続的な ID。グローバルに一意であり、再利用できません。たとえば、タグキーに永続的な ID
tagKeys/123456789012
を割り当て、タグ値に永続的な IDtagValues/567890123456
を持たせることができます。 -
略称各キーの短い名前は、組織内で一意である必要があり、また各値の略称は、関連付けられているキーに対して一意である必要があります。たとえば、タグキーに短縮名
env
を指定し、タグ値にprod
という短縮名を付けることができます。 -
名前空間名。組織の数値 ID をタグキーの略称に追加します。たとえば、タグキーに名前空間の名前は
123456789012/env
です。組織 ID の取得方法をご覧ください。
このページで説明されているように、リソースにタグを追加した後、タグに基づいてアクセス権を付与する条件を作成できます。条件を記述するには、条件で使用する識別子のタイプを選択する必要があります。次の中から選択してください。
- タグを試すには、名前空間化された名前(キー用)と短縮名(値)の使用を検討します。特に開始時には、これらの識別子がわかりやすく、覚えやすいものになります。
構成を宣言的に管理する場合には、Terraform などのツールを使用して、名前空間付きの名前(キーの場合)と略称(値)の使用を検討してください。これらの識別子は、時間の経過とともに再利用できます。つまり、宣言ツールでその ID を削除して再作成すれば、条件が機能し続けます。
このアプローチでは、タグキーまたは値を削除して、名前は同じでも意味が異なる新しいキーまたは値を作成するとします。条件が名前空間名または略称を指す場合、条件は新しいキーまたは値に適用されます。
この動作によっては、意図しないアクセス権が付与されることがあります。
リスクを最小限に抑えるため、再利用できない永続的な ID を使用することを検討してください。
永続的な ID がリスクを最小限に抑える理由にあります。たとえば、タグキーや値を削除してから、同じ名前で別の意味を持つ新しいキーや値を作成するとします。条件が永続的な ID を参照している場合、条件は新しいキーまたは値には適用されません。その結果、メンバーにとって意図しないアクセスを得る可能性が減ります。
1 つの欠点として、キーと値を削除して削除しても、メンバーのアクセス権を維持するには、新しい永続 ID を参照するように IAM ポリシーを更新する必要があります。
タグ付きリソースへのアクセス
IAM 条件を指定してタグを使用すると、リソースに関連付けられたタグや、リソースによって継承されるタグに応じて、条件付きで役割を付与できます。条件が true
と評価されると、アクセスが許可されます。それ以外の場合、アクセス権は付与されません。詳しくは、IAM Conditions の概要をご覧ください。
以下のセクションでは、リソースのタグを確認する条件式の例を示します。この条件は、永続 ID と短縮名のどちらをチェックするかによって、異なる関数を呼び出します。これらの関数の詳細については、リソースタグをご覧ください。
永続的な ID を使用する条件
この条件は、タグ tagKeys/123456789012: tagValues/567890123456
を持つリソースに対する役割を付与します。
resource.matchTagId('tagKeys/123456789012', 'tagValues/567890123456')
この条件では、値に関係なく、キー tagKeys/123456789012
を持つタグを持つ役割を付与します。
resource.hasTagKeyId('tagKeys/123456789012')
条件は、タグ tagKeys/123456789012: tagValues/567890123456
を持つリソースと、キー tagKeys/987654321098
を使用するタグに役割を付与します。
resource.matchTagId('tagKeys/123456789012', 'tagValues/567890123456') &&
resource.hasTagKeyId('tagKeys/987654321098')
名前空間と略称を使用する条件
この条件では、タグが env: prod
のリソースに対する役割が付与されます。これは、本番環境の本番環境であることを示します。
resource.matchTag('123456789012/env', 'prod')
この条件では、値に関係なく、キー env
を持つタグを持つリソースに役割を付与します。
resource.hasTagKey('123456789012/env')
この条件は、タグ env: prod
を持つリソースに役割を付与します。また、キー project
を使用するタグを持つリソースの役割も付与されます。
resource.matchTag('123456789012/env', 'prod') &&
resource.hasTagKey('123456789012/project')
次のステップ
- タグの管理とリソースへのタグの関連付け方法を学習する。
- 詳しくは、条件内のタグのチェックについての記事をご覧ください。