カスタム制約を使用してデータリネージ リソースを管理する

の Google Cloud 組織のポリシーのカスタム制約を使用して、データリネージ リソースに対する特定のオペレーションを 制限できます。組織のポリシーには、さまざまなサービスに対して事前定義された制約が用意されていますが、カスタム制約を使用すると、組織のポリシー内の特定のフィールドをきめ細かく制御できます。Google Cloud

組織のポリシーについて Google Cloud

Google Cloud 組織のポリシーを使用すると、組織のリソースをプログラマティックに一元管理できます。組織のポリシー 管理者は組織のポリシーを定義できます。組織のポリシーは、 リソース階層内の リソースやそれらのリソースの子孫に適用される、制約と呼ばれる一連の 制限です。 Google Cloud リソースと それらのリソースの子孫に適用される、 Google Cloud リソース階層内の 組織のポリシーは、組織レベル、フォルダレベル、またはプロジェクト レベルで適用できます。

特典

カスタムの組織のポリシーを使用すると、組織のポリシーで制限されている特定のフィールドをよりきめ細かくカスタマイズできます。

カスタムの組織のポリシーを使用すると、サポートされているリソース属性(プロセス名、ソースタイプ、送信元など)に基づいて条件付きでデータリネージ プロセスの作成を許可または拒否できます。

詳細については、 事前定義された制約をご覧ください。

ポリシーの継承

デフォルトでは、組織のポリシーは、そのポリシーを適用したリソースの子孫に継承されます。たとえば、フォルダにポリシーを適用した場合、 Google Cloud はそのフォルダ内のすべてのプロジェクトにそのポリシーを適用します。この動作の詳細と変更方法については、階層評価ルールをご覧ください。

料金

事前定義の組織のポリシーやカスタムの組織のポリシーを含め、組織のポリシー サービスは無料です。

制限事項

  • カスタム制約は、データリネージ Process リソースにのみ適用できます。RunsEvents などの他のリソースはサポートされていません。

  • 新しく適用されたカスタム制約は、既存のリソースに適用されません。

始める前に

  • 組織 ID を把握していることを確認します。
  • データリネージ リソースを参照するカスタム組織のポリシーをテストする場合は、新しいプロジェクトを作成します。これらの 組織のポリシーを既存のプロジェクトでテストすると、セキュリティ ワークフローが中断される可能性があります。

    1. プロジェクト作成者 IAM ロール(roles/resourcemanager.projectCreator)が付与されていることを確認します。ロールを付与する方法をご覧ください
    2. コンソールで、プロジェクトの選択ページに移動します。 Google Cloud

      プロジェクト セレクタに移動

    3. [プロジェクトの作成] をクリックします。

    4. プロジェクトに名前を付けます。生成されたプロジェクト ID をメモしておきます。

    5. 必要に応じて他のフィールドを編集します。

    6. [作成] をクリックします。

必要なロール

組織のポリシーを管理するために必要な権限を取得するには、組織のリソースに対する組織のポリシー管理者 roles/orgpolicy.policyAdmin)の IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。

この事前定義ロールには、組織のポリシーを管理するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

組織のポリシーを管理するには、次の権限が必要です。

  • orgpolicy.constraints.list
  • orgpolicy.customConstraints.create
  • orgpolicy.customConstraints.delete
  • orgpolicy.customConstraints.get
  • orgpolicy.customConstraints.list
  • orgpolicy.customConstraints.update
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

カスタム制約を作成する

カスタム制約は、組織のポリシーを適用しているサービスでサポートされるリソース、メソッド、条件、アクションを指定して、YAML ファイルで定義します。カスタム制約の条件は 、 Common Expression Language(CEL)を使用して定義されます。CEL を使用してカスタム制約で条件を作成する方法については、カスタム制約の作成と管理の CEL セクションをご覧ください。

カスタム制約の YAML ファイルを作成するには:

name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- datalineage.googleapis.com/RESOURCE_TYPE
methodTypes:
- CREATE
- UPDATE
condition: "CONDITION"
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION

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

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

  • CONSTRAINT_NAME: 新しいカスタム制約に付ける名前。カスタム制約は custom. で始まる必要があり、大文字、小文字、数字のみを含めることができます(例: custom.denyLineageProcess)。このフィールドの最大長は 70 文字です。接頭辞はカウントされません(例: organizations/123456789/customConstraints/custom)。

  • RESOURCE_TYPE: 制限するオブジェクトとフィールドを含む Data Lineage API REST リソースの名前(URI ではない)。データリネージの場合は Process のみを使用できます。

  • CONDITION: サポート対象のサービス リソースの表現に対して書き込まれる CEL 条件。このフィールドの最大長は 1,000 文字です。条件の書き込み先として使用できる リソースの詳細については、 サポート対象のリソースをご覧ください。例: "resource.name.contains('invalid_name')"。

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

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

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

カスタム制約の作成方法については、カスタム制約の定義をご覧ください。

カスタム制約を設定する

コンソール

カスタム制約を作成する手順は次のとおりです。

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

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

  2. プロジェクト選択ツールで、組織のポリシーを設定するプロジェクトを選択します。
  3. [ カスタム制約] をクリックします。
  4. [表示名] ボックスに、人が読める形式で制約の名前を入力します。この名前は エラー メッセージで使用されるほか、識別やデバッグにも使用できます。エラー メッセージで公開される可能性があるため、表示名に個人情報(PII)やセンシティブ データを使用しないでください。このフィールドには、最大 200 文字まで入力できます。
  5. [**制約 ID**] ボックスに、新しいカスタム制約に使用する ID を入力します。カスタム制約の名前に使用できるのは、英字(大文字と小文字)と 数字のみです(例: custom.denyLineageProcess)。このフィールドには、接頭辞(custom.)を除き、最大 70 文字まで入力できます(例: organizations/123456789/customConstraints/custom)。エラー メッセージで公開される可能性があるため、制約 ID に個人情報(PII)や機密データを含めないでください。
  6. [説明] ボックスに、人が読める形式で制約の説明を入力します。この説明は、ポリシー違反の際にエラー メッセージとして使用されます。ポリシー違反が発生した理由と、ポリシー違反を解決する方法に関する詳細を含めてください。エラー メッセージで公開される可能性があるため、説明に個人情報(PII)や機密データを含めないでください。 このフィールドには、最大 2,000 文字まで入力できます。
  7. [リソースの種類] ボックスで、制限するオブジェクトとフィールドを含む Google Cloud REST リソースの名前を選択します(例: container.googleapis.com/NodePool)。ほとんどの種類のリソースは、最大 20 個のカスタム制約をサポートしています。これより多くのカスタム制約を作成しようとすると、オペレーションは失敗します。
  8. [適用方法] で、REST CREATE メソッドに制約を適用するか、CREATE メソッドと UPDATE メソッドの両方に制約を適用するかを選択します。制約に違反するリソースに対する UPDATE メソッドに制約を適用した場合、そのリソースへの変更は、違反を解決するものでない限り、 組織のポリシーによってブロックされます。
  9. 各サービスでサポートされているメソッドを確認するには、 カスタム制約をサポートするサービスをご覧ください。

  10. 条件を定義するには、 [Edit condition] をクリックします。
    1. [条件を追加] パネルで、サポートされているサービス リソースを参照する CEL 条件を作成します(例: resource.management.autoUpgrade == false)。このフィールドには、最大 1,000 文字まで入力できます。CEL の使用方法の詳細については、Common Expression Language をご覧ください。 カスタム制約で使用できるサービス リソースの詳細については、カスタム制約のサポート サービスをご覧ください。
    2. [保存] をクリックします。
  11. [アクション] で、条件が満たされた場合に評価対象のメソッドを許可するか拒否するかを選択します。
  12. 拒否アクションは、条件が true と評価された場合に、リソースを作成または更新するオペレーションがブロックされることを意味します。

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

  13. [制約を作成] をクリックします。
  14. 各フィールドに値を入力すると、この カスタム制約に対応する YAML 構成が右側に表示されます。

gcloud

  1. カスタム制約を作成するには、次の形式で YAML ファイルを作成します。
  2. name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
    resourceTypes: RESOURCE_NAME
    methodTypes:
      - CREATE
    - UPDATE
    condition: "CONDITION" actionType: ACTION displayName: DISPLAY_NAME description: DESCRIPTION

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

    • ORGANIZATION_ID: 組織 ID( 123456789 など)。
    • CONSTRAINT_NAME: 新しいカスタム制約の名前。カスタム制約の名前に使用できるのは、英字(大文字と小文字) または数字のみです(例: custom.denyLineageProcess)。このフィールドの最大長は 70 文字です。接頭辞(custom.)はカウントされません(例: organizations/123456789/customConstraints/custom)。エラー メッセージで公開される可能性があるため、制約 ID に個人情報(PII)やセンシティブ データを含めないでください。
    • RESOURCE_NAME: 制限するオブジェクトとフィールドを含む Google Cloud リソースの完全修飾名。たとえば、 datalineage.googleapis.com/Process のようにします。ほとんどの種類のリソースは、最大 20 個のカスタム 制約をサポートしています。これより多くのカスタム制約を作成しようとすると、オペレーションは失敗します。
    • methodTypes: 制約が適用される REST メソッド。 CREATE または CREATEUPDATE の両方にできます。制約に違反するリソースに対する UPDATE メソッドに制約を適用した場合、そのリソースへの変更は、違反を解決するものでない限り、組織のポリシーによってブロックされます。
    • 各サービスでサポートされているメソッドを確認するには、 カスタム制約をサポートするサービスをご覧ください。

    • CONDITION: サポート対象のサービス リソースの表現に対して記述する CEL 条件。このフィールドには、最大 1,000 文字まで入力できます。例: "resource.name.contains('invalid_name')"
    • 条件を記述できるリソースの詳細については、サポートされているリソースをご覧ください。

    • ACTION: condition が満たされた場合に実行するアクション。 有効な値は ALLOWDENY です。
    • 許可アクションは、条件が true と評価された場合に、リソースを作成または更新するオペレーションが許可されることを意味します。つまり、条件に明記されているケース以外はすべてブロックされます。

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

    • DISPLAY_NAME: 制約の名前。わかりやすい名前を入力してください。この名前 はエラー メッセージで使用されるほか、識別やデバッグにも使用できます。エラー メッセージで公開される可能性があるため、表示名に個人情報(PII)やセンシティブ データを使用しないでください。このフィールドには、最大 200 文字まで入力できます。
    • DESCRIPTION: ポリシー違反時にエラー メッセージとして表示される制約の説明。わかりやすい説明を入力してください。このフィールドには、最大 2,000 文字まで入力できます。
  3. 新しいカスタム制約の YAML ファイルを作成したら、組織内で組織のポリシーとして使用できるように設定する必要があります。カスタム制約を設定するには、gcloud org-policies set-custom-constraint コマンドを使用します。
  4. gcloud org-policies set-custom-constraint CONSTRAINT_PATH

    CONSTRAINT_PATH は、カスタム制約ファイルのフルパスに置き換えます。例: /home/user/customconstraint.yaml

    この操作が完了すると、カスタム制約が Google Cloud の組織ポリシーのリストに表示され、組織のポリシーとして使用できるようになります。

  5. カスタム制約が存在することを確認するには、 gcloud org-policies list-custom-constraints コマンドを使用します。
  6. gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID

    ORGANIZATION_ID は組織リソースの ID に置き換えます。

    詳細については、 組織のポリシーの表示をご覧ください。

カスタムの組織のポリシーを適用する

制約を適用するには、それを参照する組織のポリシーを作成し、その組織のポリシーを Google Cloud リソースに適用します。

コンソール

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

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

  2. プロジェクト選択ツールで、組織のポリシーを設定するプロジェクトを選択します。
  3. [組織のポリシー] ページのリストで制約を選択して、その制約の [ポリシーの詳細] ページを表示します。
  4. このリソースの組織のポリシーを構成するには、[ポリシーを管理] をクリックします。
  5. [ポリシーの編集] ページで、[Override parent's policy] を選択します。
  6. [ルールを追加] をクリックします。
  7. [適用] セクションで、この組織のポリシーを適用するかどうかを選択します。
  8. 省略可: タグで組織のポリシーに条件を設定するには、[条件を追加] をクリックします。組織のポリシーに条件付きルールを追加する場合は、少なくとも 1 つは無条件のルールを追加する必要があります。そうしないとポリシーを保存できないのでご注意ください。詳細については、 タグを使用して組織のポリシーのスコープを設定するをご覧ください。
  9. [変更内容をテスト] をクリックして、組織のポリシーの効果をシミュレートします。詳細については、Policy Simulator で組織のポリシーの変更をテストするをご覧ください。
  10. ドライラン モードで組織のポリシーを適用するには、[ドライラン ポリシーを設定] をクリックします。詳細については、 組織のポリシーをテストするをご覧ください。
  11. ドライラン モードで組織のポリシーが想定どおりに動作することを確認したら、 有効なポリシーを設定するには、[ポリシーを設定] をクリックします。

gcloud

  1. ブール値のルールを含む組織のポリシーを作成するには、制約を参照するポリシーの YAML ファイルを作成します。
  2. name: projects/PROJECT_ID/policies/CONSTRAINT_NAME
    spec:
      rules:
      - enforce: true
    
    dryRunSpec:
      rules:
      - enforce: true

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

    • PROJECT_ID: 制約を適用するプロジェクト。
    • CONSTRAINT_NAME: カスタム制約に定義した名前。例: custom.denyLineageProcess
  3. ドライラン モードで組織のポリシーを適用するには、dryRunSpec フラグを指定して次のコマンドを実行します。
  4. gcloud org-policies set-policy POLICY_PATH --update-mask=dryRunSpec

    POLICY_PATH は、組織のポリシーの YAML ファイルのフルパスに置き換えます。ポリシーが有効になるまでに最大 15 分かかります。

  5. ドライラン モードで組織のポリシーが想定どおりに動作することを確認したら、org-policies set-policy コマンドと spec フラグを使用して有効なポリシーを設定します。
  6. gcloud org-policies set-policy POLICY_PATH --update-mask=spec

    POLICY_PATH は、組織のポリシーの YAML ファイルのフルパスに置き換えます。ポリシーが有効になるまでに最大 15 分かかります。

カスタム組織のポリシーをテストする

テキスト invalid_name を含むデータリネージ プロセスの作成を制限する組織のポリシーの制約をテストする手順は次のとおりです。

  1. 始める前にで説明されているように、新しいプロジェクトを作成します。

  2. 次の制約を YAML ファイルにコピーします。

      name: organizations/ORGANIZATION_ID/customConstraints/custom.denyLineageProcess
      resourceTypes: datalineage.googleapis.com/Process
      methodTypes:
        - CREATE
        - UPDATE
      condition:
        "resource.name.contains('invalid_name')"
      actionType: DENY
      displayName: Do not allow data lineage process with 'invalid_name' to be created.
    

    ORGANIZATION_ID はGoogle Cloud 組織の数値 ID に置き換えます。

  3. カスタム制約を設定し、組織のポリシーのカスタム制約をテストするために作成したプロジェクトに適用します。

  4. カスタム制約に含めた名前のプロセスを作成します。

    curl -s -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application.json" \
    "https://datalineage.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/processes" \
    -d '{"name":"projects/PROJECT_ID/locations/LOCATION/processes/invalid_name"}'

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

    • PROJECT_ID: プロセスが作成されるプロジェクトの ID。制約が定義されている組織と同じ組織に存在する必要があります。
    • LOCATION:プロセスが作成される Google Cloud リージョン。

    次のような出力が表示されます。

    Operation denied by org policy on resource 'projects/PROJECT_ID/locations/LOCATION': ["customConstraints/custom.denyLineageProcess"]
    

データリネージでサポートされているリソースとオペレーション

データリネージ プロセスを作成または更新する際に、次のカスタム制約フィールドを使用できます。

  • resource.name
  • resource.displayName
  • resource.origin.name
  • resource.origin.sourceType

カスタム制約は、次のメソッドでチェックされます。

一般的なユースケースのカスタム組織ポリシーの例

次の表に、一般的なユースケースのカスタム制約の構文を示します。

カスタム制約の条件で使用できる CEL マクロの詳細については、Common Expression Language をご覧ください。

ユースケース 制約の構文
データリネージ プロセスの作成を無効にする
    name: organizations/ORGANIZATION_ID/customConstraints/custom.denyLineageProcessesCreation
    resourceTypes:
    - datalineage.googleapis.com/Process
    methodTypes:
    - CREATE
    condition: "True"
    actionType: DENY
    displayName: Deny creation of all data lineage processes.
BigQuery または Managed Service for Apache Spark によるデータリネージ プロセスの作成を無効にする
    name: organizations/ORGANIZATION_ID/customConstraints/custom.denyLineageProcessesCreation
    resourceTypes:
    - datalineage.googleapis.com/Process
    methodTypes:
    - CREATE
    condition: "resource.origin.sourceType == 'BIGQUERY' || resource.origin.sourceType == 'DATAPROC'"
    actionType: DENY
    displayName: Deny data lineage processes created by BigQuery or Managed Service for Apache Spark.
指定された名前のデータリネージ プロセスを無効にする
    name: organizations/ORGANIZATION_ID/customConstraints/custom.denyLineageProcessesCreation
    resourceTypes:
    - datalineage.googleapis.com/Process
    methodTypes:
    - CREATE
    - UPDATE
    condition: "resource.name.contains('RESTRICTED_NAME')"
    actionType: DENY
    displayName: Deny data lineage processes whose name contains RESTRICTED_NAME.

次のステップ