このページでは、リソース内のデータの機密性に基づいて、リソースへの 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 バケット
仕組み
データの機密性に基づいてリソースへのアクセスを制御する大まかなワークフローは次のとおりです。これらのタスクは同じ人物が実行する必要はありません。
- 機密レベルタグを作成する
- 機密レベルタグの値に基づいてリソースへの条件付きアクセスを付与する
- 検出構成で自動タグ設定を有効にする
- 機密レベルのタグをリソースに付加する権限をサービス エージェントに付与する
必要な権限
必要な権限は、実行する必要があるアクションによって異なります。
これらの権限を取得するには、リソース階層の適切なレベルで推奨されているロールの付与を管理者に依頼してください。
タグを管理するための権限
Resource Manager のドキュメントのタグを管理するをご覧ください。
リソースへの条件付きアクセスを許可する権限
IAM ドキュメントの必要なロールをご覧ください。
検出を構成するための権限
データ プロファイルの構成と表示に必要なロールをご覧ください。
機密レベルタグを作成する
このタスクでは、Sensitive Data Protection がデータを分類するために使用するデータの機密性レベルにマッピングされるタグ値を含むタグキーを作成します。たとえば、次のタグキーとタグ値を使用できます。
- タグキーを
sensitivity-level
に設定します。 次のタグ値を設定します。
low
- 機密性の低いデータに付加するタグ値
moderate
- 中程度の機密性データに付加するタグ値
high
- 機密性の高いデータに付加するタグ値
機密レベルが不明なリソースのタグ値を作成することもできます。または、これらのリソースに
low
、medium
、high
のいずれかのタグ値を再利用することもできます。次の点にご注意ください。次のタスクでは、次のものが必要になります。
- タグキー ID(例:
tagKeys/281478077849901
) - タグキーの値(例:
tagValues/281479490918432
) - タグ値のパス(例:
example-project/tag-key/tag-value1
)
- タグキー ID(例:
この例では、タグ値と機密レベルの間に 1 対 1 のマッピングを設定しています。実際には、ビジネスニーズに合わせてタグ値をカスタマイズできます。たとえば、confidential
、PII
、SPII
(機密性の高い 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 に指示します。このタスクは、検出スキャン構成を作成または編集するときに実行します。
計算された機密レベルに基づいてリソースに自動的にタグ付けする手順は次のとおりです。
- [リソースにタグを付ける] オプションをオンにします。
感度レベル(高、中、低、不明)ごとに、指定された感度レベル用に作成したタグ値のパスを入力します。
機密性レベルをスキップすると、そのレベルのタグは付加されません。
機密レベルのタグが存在する場合にリソースのデータリスク レベルを自動的に下げるには、[リソースにタグが適用された場合、そのプロファイルのデータリスクを「低」に下げる] を選択します。このオプションを使用すると、データ セキュリティとプライバシーの状況の改善を測定できます。
次のいずれかまたは両方を選択します。
- 初めてプロファイリングされるリソースにタグを付ける。
プロファイルの更新時にリソースにタグを付ける。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.
この問題を解決するには、リソースからタグを取り外します。詳しくは以下をご覧ください。
- BigQuery: テーブルからタグを切り離す
- Cloud SQL for MySQL: Cloud SQL インスタンスからタグの適用を解除する
- Cloud SQL for PostgreSQL: Cloud SQL インスタンスからタグを切り離す
- Cloud Storage: Cloud Storage バケットへのタグの適用またはタグの削除の例
または、検出スキャンの構成で [リソースにタグを付ける] アクションを無効にします。
タグ値が削除または名前変更され、検出でリソースへの関連付けが試行された
機密レベルタグのタグ値が削除または名前変更され、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.
この問題を解決する方法は次のとおりです。
検出スキャン構成に関連付けられているサービス エージェント ID を取得します。
検出スキャン構成リストに移動します。
- ツールバーで、組織を選択します。
- スキャン構成を選択します。
- [スキャン構成の詳細] ページで、[サービス エージェント] フィールドの値をコピーします。サービス エージェント ID はメールアドレスの形式です。
機密レベルのタグに対するタグユーザー ロール(
roles/resourcemanager.tagUser
)をサービス エージェントに付与します。または、感度レベルタグにカスタムロールを付与することもできます。カスタムロールには、タグ バインディングの管理に必要な
resourcemanager.tagValues.get
権限とリソース固有の権限が必要です。リソース固有のcreateTagBinding
、deleteTagBinding
、listEffectiveTags
権限が必要です。たとえば、BigQuery テーブルの場合は、次のものが必要です。resourcemanager.tagValues.get
bigquery.tables.createTagBinding
bigquery.tables.deleteTagBinding
bigquery.tables.listEffectiveTags
タグレベルでロールを付与する方法については、Resource Manager ドキュメントのタグへのアクセス権の管理をご覧ください。