タグの作成と管理

このページでは、 Google Cloud のタグと、Pub/Sub での使用方法について説明します。タグは、Pub/Sub トピック、サブスクリプション、スナップショットに適用できます。Pub/Sub スキーマへのタグの適用は、今後サポートされる予定です。

タグについて

タグは、Google Cloud内のリソースに適用できる Key-Value ペアです。タグを使用すると、リソースに特定のタグが付加されているかどうかに基づいて、条件付きでポリシーの許可や拒否を行うことができます。たとえば、リソースに特定のタグがあるかどうかに基づいて、Identity and Access Management(IAM)のロールを条件付きで付与できます。タグの詳細については、タグの概要をご覧ください。

タグは、タグと Google Cloud リソースを結びつけるタグ バインディング リソースを作成することによって、リソースに適用されます。

必要な権限

タグの管理に必要な権限を取得するため、次の IAM ロールを付与するように管理者に依頼してください。

  • タグが適用されているリソースに対する タグ閲覧者roles/resourcemanager.tagViewer
  • 組織レベルでタグを表示および管理する: 組織に対する組織閲覧者roles/resourcemanager.organizationViewer
  • タグの定義を作成、更新、削除する: タグの作成、更新、削除を行うリソースに対する Tag Administratorroles/resourcemanager.tagAdmin
  • リソースにタグを適用する、リソースからタグを削除する: タグの値、タグの値を適用または削除するリソースに対する Tag Userroles/resourcemanager.tagUser

ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

Pub/Sub トピック、サブスクリプション、スナップショットにタグを関連付けるには、Pub/Sub 編集者ロール(roles/pubsub.editor)が必要です。

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

タグを適用する前に、タグを作成してその値を構成する必要があります。タグキーとタグ値を作成する方法については、タグの作成タグ値の追加をご覧ください。

リソースの作成時にタグを追加する

タグは、トピック、サブスクリプション、スナップショットの作成時に追加できます。リソースの作成時にタグを追加すると、リソースの重要なメタデータをすぐに提供できるだけでなく、整理、費用追跡、ポリシーの自動適用にも役立ちます。

コンソール

  1. Google Cloud コンソールの [Pub/Sub] ページに移動します。
  2. Pub/Sub に移動

  3. 新しいトピック、サブスクリプション、スナップショットを作成するオプションを選択します。
  4. [タグを管理] をクリックします。
  5. 組織が [タグの管理] パネルに表示されない場合は、[タグのスコープを選択] をクリックします。組織レベルまたはプロジェクト レベルで定義されたタグを追加することを選択し、同じ ID を入力します。
  6. [タグを追加] をクリックします。
  7. リストから付加するタグのキーを選択します。リストは、キーワードを入力してフィルタできます。
  8. リストから付加するタグの値を選択します。リストは、キーワードを入力してフィルタできます。
  9. [保存] をクリックします。[タグ] セクションがタグ情報で更新されます。
  10. トピック、サブスクリプション、スナップショットを作成します。新しいトピック、サブスクリプション、またはスナップショットは、指定されたタグで作成されます。

gcloud

トピック、サブスクリプション、スナップショットの作成時にタグを追加するには、次のコマンドを実行します。

       gcloud pubsub topics create TOPIC_ID --tags=TAG_KEY=TAG_VALUE
     

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

  • TOPIC_ID: トピックの ID
  • TAG_KEY: 適用されるタグキーの永続 ID または名前空間付きの名前(例: tagKeys/567890123456)
  • TAG_VALUE: 適用されるタグ値の永続 ID または名前空間付きの名前(例: tagValues/567890123456)

複数のタグを指定する場合は、タグをカンマで区切ります(例: TAGKEY1=TAGVALUE1,TAGKEY2=TAGVALUE2)。

API

次の URL に POST リクエストを送信します。

      https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID

リクエスト本文で次の JSON を指定します。

      
{
  "name": "projects/PROJECT_ID/topics/TOPIC_ID"
  "tags": {
    "TAGKEY_NAME": "TAGVALUE_NAME"
  }
}

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

  • PROJECT_ID: プロジェクトの ID
  • TOPIC_ID: トピックの ID
  • TAGKEY_NAME: 適用されるタグキーの永続 ID または名前空間付きの名前(例: tagKeys/567890123456)
  • TAGVALUE_NAME: 適用されるタグ値の永続 ID または名前空間付きの名前(例: tagValues/567890123456)

必須タグを適用する

リソースに必須タグを適用すると、リソースの作成時に特定のタグ(コストセンター タグなど)が存在することを確認し、組織のポリシーへの準拠を維持できます。これを行うには、組織のポリシーとカスタム制約を使用します。適用はリソースの作成時に行われ、必要なタグのないリソースのプロビジョニングを防ぎます。詳細については、組織のポリシーを使用した必須タグの適用をご覧ください。

タグを適用するカスタム制約を設定する

コンソール

  1. Google Cloud コンソールで、[組織のポリシー] ページに移動します。

    [組織のポリシー] に移動

  2. ページの上部にあるプロジェクト選択ツールを選択します。

  3. プロジェクト選択ツールから、カスタム制約を適用する組織を選択します。

  4. 次のパラメータを使用してカスタム制約を設定します。

    • 適用方法: Govern tags
    • リソースタイプ: 必須タグを適用する Google CloudREST リソースの完全修飾名(例: file.googleapis.com/Instance
    • 条件: リソースに適用するタグキーを指定する Common Expression Language(CEL)条件。たとえば、resource.hasDirectTagKey("1234567890/owner") は、タグキー 1234567890/owner のタグ バインディングを適用します。resource.hasDirectTagKey CEL 関数は、リソースに直接適用されたタグのみを照合し、リソース階層内の祖先から継承されたタグは考慮しません。
    • アクション: Allow または Deny
      • 許可: 指定された条件が満たされた場合、リソースを作成または更新するアクションが許可されます。
      • 拒否: 指定された条件が満たされると、リソースを作成または更新するアクションがブロックされます。
  5. [制約を作成] をクリックします。

gcloud

カスタム制約の YAML ファイルを作成します。

name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- RESOURCE_NAME
methodTypes:
- GOVERN_TAGS
condition: "CONDITION"
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION

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

  • ORGANIZATION_ID: 組織 ID(1234567890 など)。

  • CONSTRAINT_NAME: 新しいカスタム制約に付ける名前。カスタム制約は custom. で始める必要があります。また、使用できるのは、大文字、小文字、数字のみです(例: custom.enforceMandatoryTags)。

  • RESOURCE_NAME: 必須タグを適用するGoogle Cloud REST リソースの完全修飾名(例: file.googleapis.com/Instance)。

  • CONDITION: リソースに適用するタグキーを指定する Common Expression Language(CEL)条件。たとえば、1234567890/owner タグキーのタグ バインディングを適用するには、resource.hasDirectTagKey("1234567890/owner") を指定します。

  • ACTION: condition が満たされている場合に実行するアクション。ALLOW または DENY になります。

    拒否アクションは、指定された条件が満たされた場合に、リソースを作成または更新するオペレーションがブロックされることを意味します。

    許可アクションは、指定された条件が満たされた場合に、リソースを作成または更新するオペレーションが許可されることを意味します。これは、条件に明示的にリストされているケースを除き、他のすべてのケースがブロックされることも意味します。

  • DISPLAY_NAME: 制約の名前。わかりやすい名前を入力してください。このフィールドの最大長は 200 文字です。

  • DESCRIPTION: ポリシー違反時にエラー メッセージとして表示される制約の説明。わかりやすい説明を入力してください。このフィールドの最大長は 2,000 文字です。

カスタム制約を設定して、組織のポリシーで使用できるようにします。

カスタム制約を定義したら、組織のポリシーの変更をテストして分析し、制約を適用できます。

既存のリソースにタグを追加する

既存のトピック、サブスクリプション、スナップショットにタグを追加する手順は次のとおりです。

コンソール

  1. Google Cloud コンソールの [Pub/Sub] ページに移動します。
  2. Pub/Sub に移動

  3. タグを付加するリソースのページを選択します。 たとえば、トピックにタグを付加するには、[トピック] ページに移動します。
  4. [タグ] をクリックします。
  5. 組織が [タグ] パネルに表示されない場合は、[スコープの選択] をクリックします。組織を選択して [開く] をクリックします。
  6. [タグを追加] をクリックします。
  7. リストから付加するタグのキーを選択します。リストは、キーワードを入力してフィルタできます。
  8. リストから付加するタグの値を選択します。リストは、キーワードを入力してフィルタできます。
  9. [保存] をクリックします。
  10. [確認] ダイアログで、[確認] をクリックしてタグを適用します。
  11. タグが更新されたことは、通知で確認します。

gcloud

トピック、サブスクリプション、またはスナップショットにタグを付加するには、gcloud resource-manager tags bindings create コマンドを使用してタグ バインディング リソースを作成する必要があります。

      gcloud resource-manager tags bindings create \
          --tag-value=TAGVALUE_NAME \
          --parent=RESOURCE_ID
      

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

  • TAGVALUE_NAME: 適用されるタグ値の永続 ID または名前空間名(例: tagValues/567890123456)。
  • RESOURCE_ID はリソースの完全な ID で、リソースのタイプ(//pubsub.googleapis.com/)を識別するために API ドメイン名が含まれています。たとえば、/projects/PROJECT_ID/topics/TOPIC_ID にタグを付加する場合、完全な ID は //pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID です。

リソースに適用されたタグを一覧表示する

トピック、サブスクリプション、スナップショットに直接適用されているか、またはこれらによって継承されたタグ バインディングのリストを表示できます。

コンソール

  1. Google Cloud コンソールの [Pub/Sub] ページに移動します。
  2. Pub/Sub に移動

  3. タグを表示するリソースのページを選択します。 たとえば、トピックのタグを表示するには、[トピック] ページに移動します。

    タグは、コンソールのトピック ページの [タグ] セクションに表示されます。

gcloud

リソースに適用されたタグ バインディングのリストを取得するには、gcloud resource-manager tags bindings list コマンドを使用します。

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

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

  • RESOURCE_ID はリソースの完全な ID で、リソースのタイプ(//pubsub.googleapis.com/)を識別するために API ドメイン名が含まれています。たとえば、/projects/PROJECT_ID/topics/TOPIC_ID にタグを付加する場合、完全な ID は //pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID です。

次のようなレスポンスが返されます。

name: tagBindings/%2F%2Fcloudresourcemanager.googleapis.com%2Fprojects%2F7890123456/tagValues/567890123456
          tagValue: tagValues/567890123456
          resource: //pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID
      

リソースからタグを削除する

トピック、サブスクリプション、スナップショットに直接適用されたタグを解除できます。継承されたタグは、同じキーと別の値を持つタグを適用することでオーバーライドできますが、削除することはできません。

コンソール

  1. Google Cloud コンソールの [Pub/Sub] ページに移動します。
  2. Pub/Sub に移動

  3. タグを削除するリソースのページを選択します。 たとえば、トピックからタグを削除するには、[トピック] ページに移動します。
  4. [タグ] をクリックします。
  5. [タグ] パネルで、削除するタグの横にある [項目を削除] をクリックします。
  6. [保存] をクリックします。
  7. [確認] ダイアログで、[確認] をクリックしてタグを削除します。

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

gcloud

タグ バインディングを削除するには、gcloud resource-manager tags bindings delete コマンドを使用します。

      gcloud resource-manager tags bindings delete \
          --tag-value=TAGVALUE_NAME \
          --parent=RESOURCE_ID
      

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

  • TAGVALUE_NAME: 適用されるタグ値の永続 ID または名前空間名(例: tagValues/567890123456)。
  • RESOURCE_ID はリソースの完全な ID で、リソースのタイプ(//pubsub.googleapis.com/)を識別するために API ドメイン名が含まれています。たとえば、/projects/PROJECT_ID/topics/TOPIC_ID にタグを付加する場合、完全な ID は //pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID です。

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

タグキーまたは値の定義を削除する場合は、タグがトピック、サブスクリプション、スナップショットから切り離されていることを確認してください。タグ定義自体を削除する前に、既存のタグの適用(タグ バインディング)を削除する必要があります。タグキーとタグ値を削除するには、タグの削除をご覧ください。

Identity and Access Management の条件とタグ

タグと IAM Conditions を使用すると、階層内のユーザーに条件付きでロール バインディングを付与できます。条件付きロール バインディングを含む IAM ポリシーが適用されている場合、リソースに適用されたタグを変更または削除すると、そのリソースへのユーザー アクセスを削除できます。詳細については、Identity and Access Management の条件とタグをご覧ください。

次のステップ