始める前に
dataform.restrictGitRemotes
ポリシーを設定または編集する前に、許可リストに登録するリモートの Git リポジトリの完全な URL を探します。
すでに Dataform リポジトリに接続されているリモートの Git リポジトリの完全な URL を確認する方法は次のとおりです。
Google Cloud コンソールの [Dataform] ページに移動します。
リポジトリを選択し、[設定] をクリックします。
Dataform ページに表示されるリモート リポジトリの URL は短縮されているため、
dataform.restrictGitRemotes
ポリシーでは使用できません。[設定] ページの [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
に設定することをおすすめします。ポリシーの管理と維持は、必要な権限を持つユーザーまたは管理者の責任です。組織内のポリシー管理者に関する情報を確認します。
組織レベルで組織のポリシー制約を設定する
コンソール
- [/組織のポリシー/組織のポリシー]ページに移動します。
- 必要に応じて、組織をプロジェクト プルダウン メニューから選択します。
- [Dataform のリポジトリの git リモートを制限する] をクリックします。
- [ポリシーを管理] をクリックします。[ポリシーを管理] ボタンをクリックできない場合は、正しい権限が付与されていません。
[カスタマイズ] を選択し、特定のリモートの Git リポジトリの組織のポリシーを設定します。
必要な [ポリシーの適用] と [ポリシーの種類] を選択します。
[ポリシーの値] で [カスタム] を選択します。
リモートの Git リポジトリの完全な URL を入力します。
[新しいポリシーの値] をクリックし、必要に応じてリモートの Git リポジトリの完全な URL を入力します。
[保存] をクリックして、制約を適用します。
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 リポジトリに接続できないようにするには、denyAll
を true
に設定した組織のポリシーを設定します。
{ "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 リポジトリに接続できないようにするには、denyAll
を true
に設定して組織のポリシーを設定します。
{ "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
組織のポリシーのプロジェクト レベルで設定する
プロジェクト レベルで組織のポリシーを設定すると、組織レベルで組織のポリシーが上書きまたは結合されます。マージの場合は、denyAll
が allowedValues
よりも優先されます。たとえば、組織レベルの組織のポリシーが 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 リポジトリに接続できるようにします。プロジェクトに現在適用されているポリシーは、デフォルトの設定による影響を受けません。組織のポリシーが有効になっている組織またはプロジェクト内の Dataform リポジトリはすべて、このポリシーの対象となります。これによって問題が生じた場合は、組織のポリシーが適用されない別のプロジェクト内に別のサービスまたはプロダクトをセットアップし、必要に応じて共有 VPC を使用することをおすすめします。
dataform.restrictGitRemotes
ポリシーを設定する前に、組織内の組織のポリシーとその管理者に関する情報を確認してください。 ポリシーの管理と維持は、必要な権限を持つユーザーまたは管理者の責任です。
次のステップ
- 組織のポリシーの詳細については、組織のポリシー サービスの概要をご覧ください。
- 組織のポリシーの制約の詳細については、組織のポリシーの制約をご覧ください。
- Resource Manager を使用して Google Cloud リソースを管理する方法については、Google Cloud リソースを管理するをご覧ください。