データの機密性に基づいて IAM アクセスを制御する

このページでは、リソース内のデータの機密性に基づいて、リソースへの Identity and Access Management(IAM)アクセス権を自動的に付与または拒否する方法について説明します。

Sensitive Data Protection の検出サービスを構成して、リソースの計算された機密性レベルに基づいてリソースにタグを自動的に適用できます。その後、IAM 条件を使用して、機密レベルのタグキーまたはタグ値の有無に基づいて、リソースへのアクセスを許可または拒否できます。

組織のデータチームが日常業務で BigQuery データを自由にコピーして共有できるようにしたいとします。ただし、そのデータにお客様の個人情報(PII)が含まれているかどうかはわかりません。検出を実行して、BigQuery データの機密性レベルを分類できます。次に、データチームに条件付きでアクセス権を付与します。これにより、機密性の高いデータのみを含む BigQuery テーブルにのみアクセスできるようになります。

Sensitive Data Protection がデータの機密性を計算する方法の詳細については、データリスクと機密性レベルをご覧ください。

タグを使用してリソースへのアクセスを制御する方法の詳細については、IAM ドキュメントのタグと条件付きアクセスをご覧ください。タグの一般的な情報については、Resource Manager ドキュメントのタグの概要をご覧ください。

機密レベルのタグ

このドキュメントでは、機密性レベルのタグという用語は、リソースに自動的に適用され、そのリソース内のデータの計算された機密性レベルを示すタグを指します。

利点

この機能を使用すると、次のことができます。

  • リソース内のデータの属性と分類に基づいて、さまざまなサポートされているリソース全体でアクセス制御を自動化します。自動化により、組織、フォルダ、プロジェクト内のデータの増加と変化に対応できます。
  • サポートされているリソースが機密データの保護によってプロファイリングされ、分類されるまで、そのリソースへのアクセスを制限します。これは、デフォルトで安全の原則に準拠しています。
  • データのプロファイリングのたびに機密性レベルのタグ値を更新するように検出を構成します。したがって、リソースに対するプリンシパルのアクセス権は、そのリソースの計算されたデータ機密性レベルが変更されると自動的に変更されます。
  • 検出でリソースに機密レベルのタグが存在することが検出された場合、リソースで計算されたデータリスク レベルを下げるように検出を構成します。このオプションは、データ セキュリティとプライバシーの体制の改善を測定するのに役立ちます。

サポートされているリソース

この機能を使用すると、Sensitive Data Protection は次のレベルでデータを自動的にタグ付けします。

  • 複数の BigQuery テーブル
  • Cloud SQL のインスタンス
  • Cloud Storage バケット

仕組み

データの機密性に基づいてリソースへのアクセスを制御するワークフローの概要は次のとおりです。これらのタスクは同じユーザーが行う必要はありません。

  1. 機密性レベルのタグを作成する
  2. 機密レベルのタグの値に基づいてリソースへの条件付きアクセス権を付与する
  3. 検出構成で自動タグ設定を有効にする
  4. 機密レベルのタグをリソースに適用する権限をサービス エージェントに付与する

必要な権限

必要な権限は、実行する必要があるアクションによって異なります。

これらの権限を取得するには、リソース階層の適切なレベルで推奨されているロールの付与を管理者に依頼してください。

タグを管理する権限

Resource Manager ドキュメントのタグを管理するをご覧ください。

リソースへの条件付きアクセスを付与する権限

IAM ドキュメントの必要なロールをご覧ください。

検出の構成に必要な権限

データ プロファイルの構成と表示に必要なロールをご覧ください。

機密性タグを作成する

このタスクでは、機密データの保護がデータの分類に使用するデータ機密性レベルにマッピングされるタグ値を持つタグキーを作成します。たとえば、次のタグキーとタグ値を使用できます。

  1. タグキーを sensitivity-level に設定します。
  2. 次のタグ値を設定します。

    low
    機密性が低いデータに適用するタグ値
    moderate
    中程度の機密性のデータに適用するタグ値
    high
    機密性の高いデータに適用するタグ値

    機密レベルが不明なリソースのタグ値を作成することもできます。または、これらのリソースに lowmediumhigh のいずれかのタグ値を再利用することもできます。

  3. 次の点にご注意ください。次のタスクで必要になります。

    • タグキー ID(例: tagKeys/281478077849901
    • タグキー値(例: tagValues/281479490918432
    • タグ値のパス(例: example-project/tag-key/tag-value1

単純にするため、この例ではタグの値と機密性レベルの間に 1 対 1 のマッピングを設定します。実際には、ビジネスのニーズに合わせてタグ値をカスタマイズできます。たとえば、confidentialPIISPII(機密性の高い PII)などの値を使用できます。

機密データの検出は、組織レベル、フォルダレベル、プロジェクト レベルで構成できます。この機密性レベルのタグを組織レベルまたはフォルダレベルの検出に使用する場合は、組織レベルでこのタグを作成することをおすすめします。

タグの作成方法については、Resource Manager ドキュメントのタグの作成と管理をご覧ください。

機密レベルのタグの値に基づいてリソースへの条件付きアクセスを許可する

このタスクでは、リソースに適用されている機密性レベルのタグに特定の値が含まれている場合にのみ、プリンシパルにロールを付与します。たとえば、moderate タグ値と low タグ値を持つデータのみにプリンシパルのアクセス権を付与できます。

このセクションでは、条件エディタで使用するためにフォーマットされた条件の例を示します。条件エディタには、CEL 構文を使用して手動で式を入力するためのテキストベースのインターフェースが用意されています。IAM 条件をロール バインディングに適用する方法については、IAM のドキュメントの条件付きロール バインディングを管理するをご覧ください。

これらの例は、このページの機密レベルタグを作成するで定義されているタグ付けモデルに従っています。

機密性が低いデータのみへのアクセスをプリンシパルに付与する

この例では、リソースに機密性の高いデータのみが含まれている場合に、リソースへのアクセスを許可します。この例を使用して、そのリソースで機密データ検出が実行されるまで、リソースへのすべてのアクセスを制限することもできます。

resource.matchTagId("tagKeys/SENSITIVITY_LEVEL_TAG_KEY",
"tagValues/TAG_VALUE_FOR_LOW_SENSITIVITY")

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

  • SENSITIVITY_LEVEL_TAG_KEY: 作成した機密レベルのタグキーの数値 ID
  • TAG_VALUE_FOR_LOW_SENSITIVITY: 機密性の高いデータ用に作成したタグ値の数値 ID

プリンシパルに中程度の機密性と低い機密性のデータのみへのアクセス権を付与する

この例では、リソースに中程度または低程度の機密性のデータのみが含まれている場合に、リソースへのアクセスを許可します。2 つの条件の間に OR 演算子があることに注意してください。

resource.matchTagId("tagKeys/SENSITIVITY_LEVEL_TAG_KEY", "tagValues/TAG_VALUE_FOR_LOW_SENSITIVITY") ||
resource.matchTagId("tagKeys/SENSITIVITY_LEVEL_TAG_KEY", "tagValues/TAG_VALUE_FOR_MODERATE_SENSITIVITY")

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

  • SENSITIVITY_LEVEL_TAG_KEY: 作成した機密レベルのタグキーの数値 ID
  • TAG_VALUE_FOR_LOW_SENSITIVITY: 機密性の高いデータ用に作成したタグ値の数値 ID
  • TAG_VALUE_FOR_MODERATE_SENSITIVITY: 中程度の機密性のデータ用に作成したタグ値の数値 ID

機密レベルのタグが存在する場合にのみプリンシパルにアクセス権を付与する

これは、すべての IAM アクセスに機密レベルのタグの有無に基づく条件を適用する組織のポリシーを定義する場合などに便利です。この例を使用して、そのリソースで機密データ検出が実行されるまで、リソースへのすべてのアクセスを制限することもできます。

resource.hasTagKeyId("tagKeys/SENSITIVITY_LEVEL_TAG_KEY")

SENSITIVITY_LEVEL_TAG_KEY は、作成した機密レベルのタグキーの数値 ID に置き換えます。

拒否ポリシーの例

リソースタグで使用する拒否ポリシーを作成する方法については、拒否ポリシーの構造をご覧ください。サポートされている権限のリストについては、拒否ポリシーでサポートされている権限をご覧ください。

機密レベルのタグがない場合、アクセスを拒否する

次の拒否ポリシーの抜粋は、リソースに機密レベルのタグがない場合、bigquery.googleapis.com/tables.get 権限を拒否します。

  "rules": [
    {
      "denyRule": {
        "deniedPrincipals": [
          "principalSet://goog/group/data-team@example.com"
        ],
        "deniedPermissions": [
          "bigquery.googleapis.com/tables.get"
        ],
        "denialCondition": {
          "title": "Resource has no key",
          "expression": "!resource.hasTagKeyId("tagKeys/SENSITIVITY_LEVEL_TAG_KEY")"
        }
      }
    }
  ]

SENSITIVITY_LEVEL_TAG_KEY は、作成した機密レベルのタグキーの数値 ID に置き換えます。

中程度または高度な機密データが存在する場合はアクセスを拒否する

次の拒否ポリシーの抜粋では、リソースに中程度または高レベルの機密データが含まれている場合に、bigquery.googleapis.com/tables.get 権限を拒否します。

  "rules": [
    {
      "denyRule": {
        "deniedPrincipals": [
          "principalSet://goog/group/data-team@example.com"
        ],
        "deniedPermissions": [
          "bigquery.googleapis.com/tables.get"
        ],
        "denialCondition": {
          "title": "Resource has moderate or high data sensitivity",
          "expression": "resource.matchTagId("tagKeys/SENSITIVITY_LEVEL_TAG_KEY", "tagValues/TAG_VALUE_FOR_MODERATE_SENSITIVITY") || resource.matchTagId("tagKeys/SENSITIVITY_LEVEL_TAG_KEY", "tagValues/TAG_VALUE_FOR_HIGH_SENSITIVITY")"
        }
      }
    }
  ]

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

  • SENSITIVITY_LEVEL_TAG_KEY: 作成した機密レベルのタグキーの数値 ID
  • TAG_VALUE_FOR_MODERATE_SENSITIVITY: 中程度の機密性のデータ用に作成したタグ値の数値 ID
  • TAG_VALUE_FOR_HIGH_SENSITIVITY: 機密性の高いデータ用に作成したタグ値の数値 ID

検出構成で自動タグ設定を有効にする

このタスクでは、[リソースにタグを付ける] アクションを有効にします。このアクションは、計算された機密性レベルに応じてデータに自動的にタグを付けるように Sensitive Data Protection に指示します。このタスクは、検出スキャン構成を作成または編集するときに行います。

計算された機密性レベルに応じてリソースに自動的にタグを付けるには、次の操作を行います。

  1. [リソースにタグを付ける] オプションをオンにします。
  2. 感度レベル(高、中、低、不明)ごとに、その感度レベル用に作成したタグ値のパスを入力します。

    機密レベルをスキップすると、そのレベルのタグは適用されません。

  3. 機密レベルのタグが存在する場合にリソースのデータリスク レベルを自動的に下げるには、[リソースにタグを適用する場合、そのプロファイルのデータリスクを「低」に下げる] を選択します。このオプションは、データ セキュリティとプライバシー対策の改善を測定するために使用します。

  4. 次のいずれかまたは両方を選択します。

    • 初めてプロファイリングされるリソースにタグを付ける。
    • プロファイルの更新時にリソースにタグを付ける。次の検出実行で Sensitive Data Protection が機密レベルのタグ値を上書きする場合は、このオプションを選択します。そのため、リソースに対するプリンシパルのアクセス権は、そのリソースのデータ機密性レベルの計算値が増減するにつれて自動的に変更されます。

      検出サービスがリソースに適用した機密性レベルのタグ値を手動で更新する場合は、このオプションを選択しないでください。このオプションを選択すると、機密データの保護によって手動で更新したデータが上書きされる可能性があります。

機密データの検出は、組織レベル、フォルダレベル、プロジェクト レベルで構成できます。この機密レベルのタグを組織レベルの検出に使用し、プロジェクト レベルの検出オペレーションで組織レベルの検出によって設定されたタグ値が上書きされないようにするには、組織レベルの検出構成のサービス エージェントだけがリソースにこのタグを適用できるようにします。タグレベルでロールを付与する方法については、Resource Manager ドキュメントのタグへのアクセスの管理をご覧ください。

エラーのトラブルシューティングを行う

このセクションでは、この機能の使用時に発生する可能性のあるエラーと、そのエラーの解決方法について説明します。

タグの最大数を超えています

各リソースには、最大 50 個の Key-Value ペアを付加できます。すでにタグの最大数があるリソースにタグを適用しようとすると、プロファイルの生成が失敗します。次のエラーが表示されます。

The resource RESOURCE_NAME cannot be tagged because there are
too many existing tags bound to the resource. You can either disable automatic
tagging or delete at least one tag binding from the resource.

この問題を解決するには、リソースからタグを取り外します。詳しくは以下をご覧ください。

または、検出スキャンの構成で [リソースにタグを付ける] アクションを無効にします。

タグ値が削除または名前変更され、検出でリソースに関連付けようとした

機密レベルタグのタグ値が削除または名前変更され、Sensitive Data Protection がそのタグ値をプロファイリングされたリソースに適用しようとすると、次のエラーが発生します。

Tag value TAG_VALUE not found, it has possibly been either deleted or renamed.

この問題を解決するには、以下のいずれかを行います。

  • タグが削除された場合は、削除されたタグ値を再作成します。再作成したタグの値が、検出スキャン構成で参照されているタグの値と一致していることを確認します。詳細については、このページの機密レベルのタグを作成するをご覧ください。
  • タグ値の名前が変更された場合は、タグ値の新しい名前を使用するように検出スキャンの構成を更新します。

サービス エージェントに権限がない

サービス エージェントに、プロファイリング対象のリソースに機密レベルのタグを適用するために必要な権限がない場合は、次のエラーが発生します。

The DLP service account SERVICE_AGENT_NAME is missing
permissions needed for attaching tags to resources. Check that the role
'resourcemanager.tagUser' is granted to the DLP service account.

この問題を解決する方法は次のとおりです。

  1. 検出スキャン構成に関連付けられているサービス エージェント ID を取得する手順は次のとおりです。

    1. 検出スキャン構成リストに移動します。

      検出スキャンの構成に移動

    2. スキャン構成を選択します。
    3. 開いた詳細ページで、サービス エージェント ID をコピーします。この ID はメールアドレスの形式の中にあります。
  2. サービス エージェントに、機密レベルのタグに対するタグユーザーのロールroles/resourcemanager.tagUser)を付与します。

    または、感度レベルタグにカスタムロールを付与することもできます。カスタムロールには、タグ バインディングの管理に必要な resourcemanager.tagValues.get 権限とリソース固有の権限が必要です。リソース固有の createTagBindingdeleteTagBindinglistEffectiveTags 権限が必要です。たとえば、BigQuery テーブルの場合は、次のものが必要になります。

    • resourcemanager.tagValues.get
    • bigquery.tables.createTagBinding
    • bigquery.tables.deleteTagBinding
    • bigquery.tables.listEffectiveTags

    タグレベルでロールを付与する方法については、Resource Manager ドキュメントのタグへのアクセスの管理をご覧ください。

次のステップ