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

このドキュメントでは、組織のポリシー サービスを使用して、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 リポジトリの制限について

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

悪意のある人物が、保護されていないリポジトリのコピーを通じて 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 ポリシーを設定する前に、組織内の組織のポリシーとその管理者に関する情報を確認してください。 ポリシーの管理と維持は、必要な権限を持つユーザーまたは管理者の責任です。

次のステップ