タグを使用した組織ポリシーの制御に失敗した話 #Developer&Designer Advent Calendar 2024

alt

パーソルキャリアの戸田です。

弊社ではデータの管理について厳密なポリシーが定められており、特にインターネットに公開されるデータについてはシビアなチェックがされます。 今回はGoogle Cloud のストレージサービスの1つであるCloud Storage のインターネット公開について対策を考えていきます。

Cloud Storage の公開アクセスは静的ウェブサイトをホストするシーン等において非常に便利ですが、一方バケット内のデータはインターネット上から誰でもアクセス可能です。 そのため、公開されているバケットに意図せず機密データをアップロードすることで情報漏洩に繋がるリスクがあり、利用には最新の注意が必要です。

Google Cloud では「組織ポリシー」を利用することでCloud Storage の公開アクセスを制限することができるので、これにより「原則、公開アクセスを利用しない」で「例外として公開アクセスを利用する」環境となるようガードレールを整備していきます。 しかし弊社では既に公開アクセスを利用したCloud Storage があるため、既存のCloud Storage は組織ポリシーを適用せずこれから作成されるものについては組織ポリシーの制御対象としたいです。

今回はこれらの要件を満たせるか検証してみます。

前提

組織ポリシーの制約constraints/storage.publicAccessPrevention を利用することで組織全体にCloud Storage への公開アクセスを制限することができます。 組織ポリシーを設定したタイミングで、Organization 下の全てのCloud Storage の公開アクセスを非公開に変更します。また、新規の公開アクセスバケットの作成が制限されます。

組織ポリシーの概要

しかし既存環境で公開アクセスを利用したバケットがサービスに組み込まれており、組織ポリシーを設定することで業務影響を与えてしまうこともあります。 そのため、下記の図のように特定のCloud Storage バケットのみ組織ポリシーの適用外にできるようにしたいです。

再現したい組織ポリシーの構成

組織ポリシーには「タグを使用した組織のポリシーの設定」というものがあり、指定したタグが付与されたリソースを組織ポリシーの対象外にできると案内されていました。 今回はこの機能を用いて指定のタグを付与したCloud Storage バケットが組織ポリシーの対象外となるか検証します。

参考:タグを使用した組織のポリシーの設定

検証シナリオ

この検証では以下の順序で組織ポリシーを設定していきます。 便宜上、検証で利用する2つのCloud Storage バケットがデフォルトで公開アクセス可能とし、公開アクセスを維持するCloud Storage バケットを「バケットA」、組織ポリシーにより非公開バケットにしたい既存の公開アクセス可能なバケットを「バケットB」とします。

設定順序

  1. 事前準備
    1. Organization レベルで組織ポリシー用のタグを作成
    2. Project レベルでバケットA にタグを付与
    3. Organization レベルで組織ポリシーを設定
      1. デフォルトで適用
      2. 指定のタグが付与されたリソースは適用外
  2. 組織ポリシーの設定反映確認
    1. バケットA の挙動
    2. バケットB の挙動

期待する結果

  • バケットA が公開アクセスを維持すること
  • バケットB が組織ポシシーにより非公開になること
  • 新規で公開アクセスの設定ができないこと

期待する組織ポリシーの挙動

先に結論

  • Organization レベルで組織ポリシーのconstraints/storage.publicAccessPrevention を設定した場合、バケット単位でタグを使用した組織のポリシーの制御はできなかった
  • バケット単位でタグを使用した組織のポリシーの制御をしたい場合、Projects レベルで組織ポリシーの設定する必要がある
  • Project 単位でタグを使用するとProject 配下のResource は組織ポリシーの適用対象外になる(らしい)

なんとも不思議な結果になりました。

検証

事前準備

検証に必要な環境の準備を行います。

1. Organization レベルで組織ポリシー用のタグを作成

Organization でタグを作成

タグのKey/Value は任意のもので大丈夫です。 組織ポリシーの設定でタグキー IDタグの値を利用するので控えておきます。

タグの作成

2. Project レベルでバケットA にタグを付与

バケットA にサンプルファイルを追加

バケットA の作成

バケットA に先ほど作成したタグを付与

タグの付与

もちろんこの時点では公開アクセスが機能しているのでインターネットアクセス可能です。

バケットA へのアクセス

バケットAと同様にバケットB を用意します。 こちらはタグを付けません。

バケットB の作成

もちろんこちらもアクセス可能。

バケットB へのアクセス

ちなみにバケットの公開アクセスの防止が有効化されている場合、組織ポリシーの設定を受け付けないので、以下のコマンドで設定を更新しておく。

公開アクセスの防止設定

$ gcloud storage buckets update gs://BUCKET_NAME \
    --no-public-access-prevention

3. Organization レベルで組織ポリシーを設定

組織ポリシーでは2つのルールを設定していきます。

1つ目のルールは指定のタグキーが付与されている場合に組織ポリシーを適用させないようにするものです。 前述で作成したタグキー IDタグの値 を指定し、適用オフにします。

2つ目のルールは適用です。 1つ目のルールの条件に当てはまらない場合は組織ポリシーを適用します。 設定は適用オンにするだけです。

組織ポリシーの設定

組織ポリシーの設定反映確認

以下の結果になることを期待し、組織ポリシーの設定反映を確認していきます。

  • バケットA が公開アクセスを維持すること
  • バケットB が組織ポシシーにより非公開になること
  • 新規で公開アクセスの設定ができないこと

バケットA の挙動

タグによる制御が効かず、組織ポリシーが適用されてしまいました。

組織ポリシーの適用結果

バケットA を見るとOrganization レベルで組織ポリシーを適用した直後で、公開アクセス非公開となりました。

組織ポリシーによるバケットの設定変更

また、バケットA で新たに公開アクセスの設定をすることはできず、新規のバケット作成時にも制限がかかりました。

組織ポリシーによる公開アクセスの設定変更制限

組織ポリシーによる公開アクセスの設定制限

バケットB の挙動

バケットA と同様の挙動で、組織ポリシーが適用されバケットB は非公開 になりました。 こちらは想定通りの挙動です。

検証結果

Organization 配下の全てのProjects においてタグの有無に関わらず、組織ポリシーが適用されました。 タグによる部分的な組織ポリシーの適用制御はできませんでした。残念。

組織ポリシーの想定挙動と検証結果の比較

どういうことだったのか

サポートいただいているベンダーのテックサポートとGoogle Cloud のエンジニアの方に相談したところ、以下の回答がありました。

質問: ストレージバケットへの公開アクセス制御(storage.publicAccessPrevention)を、タグを用いて個別に制御できますか?

回答: タグによる storage.publicAccessPrevention の適用制御は、組織レベルで storage.publicAccessPrevention ポリシーが設定されていない場合に限り可能です。

詳細: storage.publicAccessPreventionは、組織レベルで設定されると、その組織の下位にある全てのプロジェクトとバケットに継承され、一括で適用されます。そのため、組織レベルで設定済みの場合は、タグによる個別制御はできません。

組織レベルで設定されていない場合のみ、タグを用いた条件付きルールを作成し、タグに基づいてstorage.publicAccessPreventionを適用するバケットを個別に指定できます。

つまり下記のようにProjects レベルで個別に組織ポリシーを設定し、Project 配下のResources に対してタグを付与すれば組織ポリシーは制御可能ということでした。

設定可能な組織ポリシーの構成

おまけ

最近、有志の外部記事で「タグの設定をProject 単位にすれば制御可能」という情報を見かけました。 バケット単位での制御は出来ないものの、こちらの方がいくらか実用的かもしれませんね。

タグの付与対象をProjects にした場合の組織ポリシーの挙動

まとめ

Organization を管理する身としてはガードレールの整備として、既存プロダクトに影響のない形で組織ポリシーを継承していきたかったですが、中々うまくいきませんね。

もし「この方法ならいける!」というアイディアをお持ちの方おられましたらコメントいただけますと嬉しいです。

alt

戸田 尚希 Naoki Toda

ITアーキテクチャ統括部 アーキテクチャ管理部 サービス共通基盤グループ リードエンジニア

2023/05 にパーソルキャリアに入社。クラウド大好き、アルパカがトレードマークです🦙

※2024年12月現在の情報です。