[組織ポリシー]Dataform のサードパーティリポジトリへのリンクを制限する組織ポリシーについて調査してみた

[組織ポリシー]Dataform のサードパーティリポジトリへのリンクを制限する組織ポリシーについて調査してみた

Dataform のサードパーティリポジトリへのリンクを制限する組織ポリシーについて調査してみました。DataformはGitHubやGitLabとの連携が可能ですが、本ポリシーを使用すると連携を禁止したり指定リポジトリに制限してリンクするということが可能です。
Clock Icon2024.07.21

概要

Dataform のリポジトリの git リモートを制限するという組織ポリシーがあります。

組織ポリシー名 内容 制約
Dataform のリポジトリの git リモートを制限する このリスト型制約は、Dataform プロジェクトのリポジトリで通信できる一連のリモートを定義します。すべてのリモートとの通信をブロックするには、値を Deny all に設定します。この制約は過去に遡って適用され、違反している既存のリポジトリに対する通信はブロックされます。エントリは、Dataform で指定された形式と同じ形式の信頼できるリモートへのリンクである必要があります。デフォルトでは、Dataform プロジェクトのリポジトリは任意のリモートと通信できます。 constraints/dataform.restrictGitRemotes

このポリシーはDataformのサードパーティのGitリポジトリとの接続を制限するためのものです。大前提として、Dataform リポジトリは、次の Git プロバイダでホストされているリモートの Git リポジトリにリンクできます。

  • Azure DevOps サービス
  • Bitbucket
  • GitHub
  • GitLab

本組織ポリシーを設定すると、上記サードパーティのGitリポジトリに対して

  • 接続を全て禁止する
  • 許可されたURLのリモートリポジトリのみ接続を許可する(GitHub,GitLabのみ)
  • 接続を全て許可する
    という制御を設定することができます。
    ※指定したリモートリポジトリへの接続を禁止することも設定可能ですがベストプラクティスでは非推奨となっています。

本記事では、本ポリシーを設定した場合の設定値や動作を調査してまとめました。

調査結果

本組織ポリシーの設定値

本ポリシーDataform のリポジトリの git リモートを制限するの設定可能な値は以下です(コンソールベースです)。

設定値 動作
すべて許可 全てのサードパーティリモートリポジトリと接続可能(デフォルト)
すべて許可しない 全てのサードパーティーリモートリポジトリと接続不可
カスタム(許可) 指定したサードパーティリモートリポジトリと接続可能(GitHub,GitLabのみ)
カスタム(拒否) 指定したサードパーティリモートリポジトリと接続不可(非推奨)

カスタム(許可)といういわゆるホワイトリスト形式の許可に関してはGitHub、GitLabのみが対象にできるようです。
https://cloud.google.com/dataform/docs/restrict-git-remotes?hl=ja#specifications_for_allow-listing_remote_git_repositories

また、本ポリシーを設定するとすでに接続済みの既存設定に対しても影響があります。多くの組織ポリシーは、組織ポリシー設定前に構築した既存設定に関しては影響がないことが多いのですが本ポリシーは既存設定に対しても効果を発揮します。

上記の設定値の中で【すべて許可しない】と【カスタム(許可)】に関して以下で実際に検証してみました。
検証の前提条件としては以下となります

  • 確認対象Dataformが存在するプロジェクトで組織ポリシーを上書き(オーバーライド)設定
  • GitHubと連携する前提
  • GitHubと連携したDataformリポジトリがすでに作成済み

すべて許可しない場合の動作確認

以下の通り、【すべて許可しない】を設定してみました。
スクリーンショット 2024-07-21 0.55.13

この状態で、まずはすでにGitHubと連携済みのDataformワークスペースで変更を行いPUSHしてみます。
スクリーンショット 2024-07-21 1.00.22
リモートリポジトリを使用したけれどもconstraints/dataform.restrictGitRemotes制約に違反しましたというようなエラーメッセージが表示されてPUSHすることができませんでした。

また、新規に作成したリポジトリをGitHubと連携してみたところ同様に制約違反のメッセージが出力されてGitHubと連携することができませんでした。
スクリーンショット 2024-07-21 1.06.40

上記より【すべて許可しない】を設定するとサードパーティのリポジトリと連携できないことが確認できました。

カスタム(許可)を設定した場合の動作確認

設定方法としては以下になります。

  1. 【ルールの追加】を押下
  2. 【ポリシーの値】で【カスタム】を選択
  3. 【ポリシーの種類】で【許可】を選択
  4. 【カスタム値】にGitHubリポジトリのURLを入力
  5. 【完了】を押下して【ポリシーを設定】を押下する

スクリーンショット 2024-07-21 1.11.01
※複数のリポジトリを許可したい場合は【値を追加】を押下することで入力欄が追加されます。

設定完了したら、許可したURLのリポジトリとリンクしているDataformリポジトリでPUSHしてみます。
PUSHすると、先ほど【すべて許可しない】と設定した時に発生したエラーが表示されずに問題なく
PUSHされます(特に何も表示されないので画像は貼りません)。

続けて、今度は【カスタム値】に入力したGitHubリポジトリのURLではない別のリポジトリのURL設定したDataformリポジトリを作成(リンク)してみます。
スクリーンショット 2024-07-21 1.19.49

リンクボタンを押下したところ、制約違反のメッセージが出力されてリンクすることができませんでした。
まとめると以下となります。

設定 条件
カスタム(許可)に記載されているGitHubリポジトリ 連携可能
カスタム(許可)に記載されていないGitHubリポジトリ 連携不可

カスタム(許可)でリポジトリURLを設定するとホワイトリストのイメージの動作となることがわかりました。
この結果より、指定したリポジトリのみ連携したい場合は【カスタム(許可)】設定でURLを指定すればよいと考えます。

所感

本組織ポリシーをカスタム(許可)で設定することで意図しないサードパーティのリポジトリへのリンクを防ぐことができます。よってセキュリティ的にはメリットが大きいのではないかと考えます。また、あまりないかもしれませんががサードパーティのリポジトリへの連携を全て禁止したいという場合は【すべて拒否】に設定すると意図しない連携を防げるのでメリットがあると思います。
意図しないリポジトリへの連携は情報漏洩にもつながりかねないので本組織ポリシーでの制限も考慮してみても良いのかもしれません。
本記事が組織ポリシーでお悩みの方のお役に立てれば嬉しいです。それではまた。ナマステー

参考

https://cloud.google.com/dataform/docs/restrict-git-remotes?hl=ja

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.