リモート リポジトリを制限する

このドキュメントでは、組織のポリシー サービスを使用して、Dataform リポジトリが接続できるサードパーティのリモートの Git リポジトリのプールを制限する方法について説明します。

準備

dataform.restrictGitRemotes ポリシーを設定または編集する前に、許可リストに登録するリモートの Git リポジトリの完全な URL を探します。

すでに Dataform リポジトリに接続されているリモートの Git リポジトリの完全な URL を確認する方法は次のとおりです。

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

    Dataform に移動

  2. リポジトリを選択して、[設定] をクリックします。

    [Dataform] ページに表示されるリモート リポジトリの URL は短縮され、dataform.restrictGitRemotes ポリシーには使用できません。

  3. [設定] ページの [Git 接続設定] で、[リポジトリ ソース] の値をコピーします。

    [リポジトリ ソース] の値は、リモート リポジトリの完全な URL です。この URL は dataform.restrictGitRemotes ポリシーで使用できます。

必要なロール

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

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

必要な権限

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

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

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

リモートの Git リポジトリの制限について

GitHub または GitLab リポジトリに Dataform リポジトリを接続できます。

Dataform リポジトリが接続できるリモート リポジトリのプールを制限することをおすすめします。これにより、悪意のある人物がリポジトリの保護されていないコピーを介して Dataform コードベースやアクセス トークンにアクセスできなくなります。

組織のポリシー サービスを使用して、Dataform が接続できる Git リポジトリ URL を制限する組織のポリシーを作成できます。

Dataform でリモートの Git リポジトリを制限する制約は次のとおりです。

constraints/dataform.restrictGitRemotes

制約を使用するには、Dataform リポジトリに接続できるリモートの Git リポジトリの allowedValues URL リストを含む組織のポリシーを作成します。リモートの Git リポジトリは、完全な URL アドレスによって識別されます。

dataform.restrictGitRemotes ポリシーには遡及的な影響があります。つまり、この制約は既存の Dataform リポジトリに影響します。

組織のポリシーを設定すると、Dataform リポジトリは、allowedValues リストに表示されているリモートの Git リポジトリにのみ接続できます。組織のポリシーで明示的に定義されていないリモートの Git リポジトリは、Dataform リポジトリへの接続が禁止されています。

dataform.restrictGitRemotes ポリシーを設定しない場合、Dataform リポジトリとリモートの Git リポジトリ間の通信は制限されません。

dataform.restrictGitRemotes ポリシーは、次の方法で使用できます。

Allow all
Dataform リポジトリは、すべてのリモート リポジトリの URL に接続できます。組織でリモート リポジトリとの通信をブロックしない場合は、このオプションを選択します。または、すべてのリモート リポジトリの URL を許可するには、組織のポリシーを設定しないでください。
allowedValues URL のリスト
Dataform リポジトリは、許可リストに登録されているリモート リポジトリにのみ接続できます。このオプションを選択して、データ漏洩を防ぎます。
Deny all
Dataform リポジトリは、リモート URL に接続できません。組織ですべての通信をブロックし、Dataform リポジトリを使用する場合は、このオプションを選択します。

リモートの Git リポジトリの許可リスト仕様

  • このリスト型制約は、GitHub リポジトリと GitLab リポジトリにのみ適用できます。

  • 組織のポリシーは過去にさかのぼって適用され、既存の Dataform リポジトリに影響します。

  • この制約は allowedValues を受け入れ、他のすべてのリモートの Git リポジトリまたは Deny all への接続をブロックします。デフォルトは Allow all です。未設定の組織のポリシーでは、すべてのリモートの Git リポジトリとの通信が許可されます。 組織のポリシーは allowedValues に設定することをおすすめします。

  • ポリシーの管理と維持は、必要な権限を持つユーザーまたは管理者の責任です。組織内のポリシー管理者に連絡してください。

組織レベルで組織のポリシー制約を設定する

コンソール

  1. [/組織のポリシー/組織のポリシー]ページに移動します。

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

  2. 必要に応じて、組織をプロジェクト プルダウン メニューから選択します。
  3. [Dataform のリポジトリの git リモートを制限する] をクリックします。
  4. [ポリシーを管理] をクリックします。[ポリシーを管理] ボタンをクリックできない場合は、正しい権限が割り当てられていません。
  5. [カスタマイズ] を選択し、特定のリモートの Git リポジトリの組織のポリシーを設定します。

    組織のポリシーの編集ページのカスタマイズ オプション。

  6. 必要な [ポリシーの適用] と [ポリシーの種類] を選択します。

  7. [ポリシーの値] で [カスタム] を選択します。

  8. リモートの Git リポジトリの完全な URL を入力します。

  9. [新しいポリシーの値] をクリックし、必要に応じてリモートの Git リポジトリの完全な URL を入力します。

  10. [保存] をクリックして、制約を適用します。

gcloud

リモートの Git リポジトリに制約を設定するには、まず組織 ID が必要です。組織 ID を確認するには、organizations list コマンドを実行して、そのレスポンスで数値 ID を探します。

gcloud organizations list

gcloud CLI は、組織のリストを次の形式で返します。

DISPLAY_NAME               ID
example-organization1      29252605212
example-organization2      1234567890

gcloud resource-manager org-policies set-policy コマンドを使用して、組織のポリシーを設定します。JSON または YAML ファイルとしてポリシーを指定する必要があります。次の形式の JSON ファイルを作成します。

{
  "name": "organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}

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

Dataform リポジトリがリモートの Git リポジトリに接続できないようにするには、denyAlltrue に設定した組織のポリシーを設定します。

{
  "name": "organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "denyAll": true
      }
    ]
  }
}

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

API

setOrgPolicy() API を使用して制約を定義します。Dataform は、指定した allowedValue リストでリモートの Git リポジトリ URL に接続できます。

たとえば、次の例は、選択したリモートの Git リポジトリ、Dataform リポジトリが接続できる組織に dataform.restrictGitRemotes 制約を適用するリクエストです。

POST https://orgpolicy.googleapis.com/v2/organizations/ORGANIZATION_ID/policies

ORGANIZATION_ID は組織の数値 ID です。

次に、リクエスト本文の中で、この制約に必要な組織のポリシーを指定します。

{
  "name": "organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}
Replace <code><var>ORGANIZATION_ID</var></code> with the numeric ID
of the organization.

Dataform リポジトリがリモートの Git リポジトリに接続できないようにするには、denyAlltrue に設定した組織のポリシーを設定します。

{
  "name": "organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "denyAll": true
      }
    ]
  }
}
 
Replace <code><var>ORGANIZATION_ID</var></code> with the numeric ID
of the organization.

組織のポリシーがすでに設定されている場合は、リクエスト本文として組織のポリシー定義を使用して次のリクエストを実行する必要があります。

PATCH https://orgpolicy.googleapis.com/v2/organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes

組織のポリシーをプロジェクト レベルで設定する

プロジェクト レベルで組織のポリシーを設定すると、組織レベルで組織のポリシーが上書きまたは結合されます。マージの場合、denyAllallowedValues よりも優先されます。たとえば、組織レベルの組織のポリシーが denyAll に設定され、プロジェクト レベルで結合されたポリシーが allowedValues リストにリモート リポジトリの URL を一覧表示する場合、Dataform はリモート リポジトリへの接続を許可されません。この場合、Dataform がリモート リポジトリに接続できるように、プロジェクト レベルの組織のポリシーが組織レベルのポリシーをオーバーライドする必要があります。組織のポリシーの階層の詳細については、階層評価についてをご覧ください。

コンソール

組織レベルでの組織のポリシーの制約の設定に記されたものと同じ手順を行いますが、プロジェクト セレクタで組織ではなくプロジェクトを選択してください。

プロジェクト セレクタ。

gcloud

gcloud resource-manager org-policies set-policy コマンドを使用して、組織のポリシーを設定します。JSON または YAML ファイルとしてポリシーを指定する必要があります。

次の形式の JSON ファイルを作成します。

{
  "name": "projects/PROJECT_ID_OR_NUMBER/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}

PROJECT_ID_OR_NUMBER は、この組織のポリシーのプロジェクト ID またはプロジェクト番号に置き換えます。

次に、リクエストでこのファイルを渡します。

gcloud resource-manager org-policies set-policy MY_POLICY.JSON --project=PROJECT_ID

API

setOrgPolicy() API を使用して制約を定義します。Dataform は、指定した allowedValue リストでリモートの Git リポジトリ URL に接続できます。

たとえば次のリクエストは、Dataform リポジトリが選択されたリモートの Git リポジトリにのみ接続でき、constraints/dataform.restrictGitRemotes ポリシーがまだ設定されていない組織に dataform.restrictGitRemotes 制約を適用するリクエストです。

POST https://orgpolicy.googleapis.com/v2/projects/PROJECT_ID_OR_NUMBER/policies

リクエストの本文にはこの制約の組織のポリシーを格納します。

{
  "name": "projects/PROJECT_ID_OR_NUMBER/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}

PROJECT_ID_OR_NUMBER は、このリクエストのプロジェクト ID またはプロジェクト番号に置き換えます。

次のリクエストは、Dataform リポジトリが選択されたリモートの Git リポジトリにのみ接続でき、constraints/dataform.restrictGitRemotes ポリシーがすでに設定された組織に dataform.restrictGitRemotes 制約を適用するリクエストです。

PATCH https://orgpolicy.googleapis.com/v2/projects/PROJECT_ID_OR_NUMBER/policies/dataform.restrictGitRemotes

リクエストの本文にはこの制約の組織のポリシーを格納します。

{
  "name": "projects/PROJECT_ID_OR_NUMBER/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}

PROJECT_ID_OR_NUMBER は、このリクエストのプロジェクト ID またはプロジェクト番号に置き換えます。

Git リモートの許可リストに関するベスト プラクティス

  • データ漏洩のリスクを軽減するには、dataform.restrictGitRemotes 制約を明示的に設定して、信頼できるリモートの Git リポジトリの選択を許可リストに登録します。

  • リモートの Git リポジトリに接続されていない Dataform リポジトリのみを使用する場合は、dataform.restrictGitRemotes 制約を Deny All に設定します。

  • この制約では deniedValues リストを使用しないでください。deniedValues リストで値を定義した場合、deniedValues リストにあるリモートの Git リポジトリのみが接続に制限されます。Dataform が接続できるリモートの Git リポジトリを正確に制御したい場合、これはセキュリティ上の問題になる可能性があります。特定のリモートの Git リポジトリを allowedValues リストから削除する場合は、リモートを下位階層の deniedValues リストに入れるのではなく、既存の組織のポリシーを更新して allowedValues リストから削除します。

  • リソース階層の大部分に組織のポリシーを設定し、特定のプロジェクトを除外する場合は、setOrgPolicy メソッドを使用してデフォルトの組織のポリシーを復元します。それには、restoreDefault オブジェクトを指定して、プロジェクト内のすべての Dataform リポジトリをリモートの Git リポジトリに接続できるようにします。プロジェクトに現在適用されているポリシーは、デフォルトの設定による影響を受けません。

  • 組織ポリシーIAM のロールとともに使用すると、Dataform コードベースへのアクセスをより適切に制御できます。

  • 組織のポリシーが有効になっている組織またはプロジェクト内の Dataform リポジトリには、このポリシーが適用されます。これによって問題が生じた場合は、組織のポリシーが適用されない別のプロジェクト内に別のサービスまたはプロダクトをセットアップし、必要に応じて共有 VPC を使用することをおすすめします。

  • dataform.restrictGitRemotes ポリシーを設定する前に、組織内の組織のポリシーと管理者間の通信を確認してください。ポリシーの管理と維持は、必要な権限を持つユーザーまたは管理者の責任です。

次のステップ