タグと条件付きアクセス

このページでは、Identity and Access Management(IAM)でタグを使用して、Google Cloud リソースへのアクセスを制御する方法について説明します。

タグの詳細については、タグの概要をご覧ください。

タグの概要

タグは、Google Cloud リソースに関連付けられた Key-Value ペアです。リソースに特定のタグが設定されているかどうかに応じて、IAM のロールを条件付きで付与または IAM の権限を条件付きで拒否できます。

リソースは、親組織、フォルダ、プロジェクトからタグ値を継承します。その結果、タグを使用して任意の Google Cloud リソースへのアクセスを管理できます。

タグを使用してアクセスを管理する一般的なユースケースは次のとおりです。

  • 開発環境、ステージング環境、本番環境。たとえば、開発環境に environment: dev、本番環境に environment: prod タグを追加できます。
  • コンポーネントのタイプ。たとえば、component: frontend タグをフロントエンド リソースに、component: batch タグをバッチ処理のリソースに追加します。
  • プロジェクト名。たとえば、チームが Codename Atlas のプロジェクトに取り組んでいる場合は、project: atlas タグをチームの開発リソースに追加できます。

タグの定義と識別子

リソースにタグを付ける前に、タグのキーと、タグに使用できる値を定義する必要があります。これらの定義は、組織レベルまたはプロジェクト レベルで作成できます。タグの定義を管理するには、Resource Manager を使用します。詳細については、新しいタグの作成と定義をご覧ください。

タグのキーと値にはいくつかの異なる ID があります。

  • 永続 ID。グローバルに一意であり、再利用できません。たとえば、タグキーに永続 ID tagKeys/123456789012 を割り当て、タグ値に永続 ID tagValues/567890123456 を持たせることができます。
  • 略称。各キーの略称は、キーが定義されているプロジェクトまたは組織内で一意である必要があり、各値の略称は、関連付けられているキーに対して一意である必要があります。たとえば、タグキーに略称 env を指定し、タグ値に prod という略称を付けることができます。
  • 名前空間名。組織の数値 ID またはプロジェクト ID をタグキーの略称に追加します。たとえば、組織用に作成されたタグキーに名前空間名 123456789012/env を指定できます。組織 ID を取得する方法については、組織リソース ID の取得をご覧ください。プロジェクト用に作成されたタグキーには、名前空間名 myproject/env を指定できます。プロジェクト ID を取得する方法については、プロジェクトの識別をご覧ください。

このページで説明されているように、リソースにタグを追加した後、タグに基づいてアクセス権を付与する条件を作成できます。条件を記述するには、条件で使用する識別子のタイプを選択する必要があります。次のガイドラインに従って選択してください。

  • タグをテストする場合は、名前空間名(キー用)と短縮名(値用)の使用を検討してください。特に、まだ始めたばかりの場合は、これらの識別子はわかりやすく、覚えやすいものになります。
  • Terraform などのツールを使用して構成を宣言的に管理する場合は、名前空間名(キー用)と略称(値用)の使用を検討してください。これらの識別子は再利用が可能です。つまり、宣言ツールでその ID を削除して再作成すれば、条件が引き続き機能します。

    これにはトレードオフがあります。タグキーまたは値を削除して、同じ名前で意味の異なるキーまたは値を新規に作成するとします。条件が名前空間名または略称を参照している場合、新しいキーまたは値に条件が適用されます。

    これにより、意図しないアクセス権がプリンシパルに付与される可能性があります。

  • リスクを最小限に抑えるため、永続 ID の再利用を検討してください。

    永続 ID がリスクを最小限に抑える理由は次のとおりです。たとえば、タグキーまたは値を削除してから、同じ名前で別の意味のキーまたは値を新規に作成するとします。条件が永続 ID を参照している場合、新しいキーまたは値に条件は適用されません。これにより、プリンシパルが意図しないアクセスを取得する可能性が低くなります。

    ただし、欠点もあります。キーと値を削除して再作成するときに、プリンシパルのアクセス権を維持するには、新しい永続 ID を参照するように許可ポリシーを更新しなければなりません。

タグ付きリソースへのアクセス

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')

次のステップ