2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Google Cloud]組織ポリシーによるPublicIP利用制御

Last updated at Posted at 2023-09-21

目的

PublicIPの利用を禁止するため、組織ポリシーを用いてアクセス制御の動作を確認する

どの組織ポリシーを制御すればよいかは、下記のURLから検索することで対象を絞ることができる
組織のポリシーの制約

事前確認

PublicIPの利用制限を実施していない状態を確認する。

確認サービス
・Public静的IPアドレス(VPCネットワーク)
・Compute Engine仮想マシン
・Kubernetes Engine
・App Engine
・Cloud Functions
・Cloud Run
・VPN
・Cloud Load Balancer
・Cloud SQL
・Cloud Storage
・Marketplace
・Datastream
・VertexAI

Public静的IPアドレス(VPCネットワーク)

PublicIPアドレス用として固定のIPをオーダ可能
貼り付けた画像_2023_09_20_13_23.png

external-ipという名前で予約する
image.png

PublicIPが予約され利用できる状態となった
image.png

Compute Engine仮想マシン

仮想マシンインスタンスにPublicIPアドレスを割り当てることが可能
貼り付けた画像_2023_09_20_13_17.png

エフェメラルPublicIPが利用されている事を確認できる
貼り付けた画像_2023_09_20_13_17.png

Kubernetes Engine

PodsとロードバランサにてPublicIPアドレスを割り当て公開クラスタが作成可能

一般公開クラスタで作成する
貼り付けた画像_2023_09_20_13_31.png

サービス立ち上げ、PublicIPアドレスに対してアクセスが可能である
貼り付けた画像_2023_09_20_14_19.png

貼り付けた画像_2023_09_20_14_20.png

App Engine

サンプルアプリをデプロイし、インターネットからアクセスが可能

% gcloud app deploy
Services to deploy:

descriptor:                  [/Users/xxx/golang-samples/appengine/go11x/helloworld/app.yaml]
source:                      [/Users/xxx/golang-samples/appengine/go11x/helloworld]
target project:              [manabu-pj-xxx]
target service:              [default]
target version:              [20230920t135658]
target url:                  [https://manabu-pj-xxx.uc.r.appspot.com]
target service account:      [106160482915-compute@developer.gserviceaccount.com]


Do you want to continue (Y/n)?  Y

Beginning deployment of service [default]...
Created .gcloudignore file. See `gcloud topic gcloudignore` for details.
╔════════════════════════════════════════════════════════════╗
╠═ Uploading 6 files to Google Cloud Storage                ═╣
╚════════════════════════════════════════════════════════════╝
File upload done.
Updating service [default]...done.
Setting traffic split for service [default]...done.
Deployed service [default] to [https://manabu-pj-399602.uc.r.appspot.com]

You can stream logs from the command line by running:
  $ gcloud app logs tail -s default

To view your application in the web browser run:
  $ gcloud app browse

ブラウザからアクセスを確認

% gcloud app browse
WARNING:  Python 3.5-3.7 will be deprecated on August 8th, 2023. Please use Python version 3.8 and up.

If you have a compatible Python interpreter installed, you can use it by setting
the CLOUDSDK_PYTHON environment variable to point to it.

Opening [https://manabu-pj-xxx.uc.r.appspot.com] in a new tab in your default browser.

貼り付けた画像_2023_09_20_13_59.png

IPアドレス確認

% dig manabu-pj-xxx.uc.r.appspot.com

; <<>> DiG 9.10.6 <<>> manabu-pj-xxx.uc.r.appspot.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45012
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;manabu-pj-xxx.uc.r.appspot.com. IN	A

;; ANSWER SECTION:
manabu-pj-xxx.uc.r.appspot.com. 6 IN	A	142.250.207.20

Cloud Functions

サンプルFunctionsを作成し、外部からアクセスが可能
貼り付けた画像_2023_09_20_14_31.png

ブラウザよりアクセス
貼り付けた画像_2023_09_20_14_34.png

digにてPublicIPを確認

% dig us-central1-manabu-pj-xxx.cloudfunctions.net

; <<>> DiG 9.10.6 <<>> us-central1-manabu-pj-399602.cloudfunctions.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25043
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;us-central1-manabu-pj-xxx.cloudfunctions.net. IN A

;; ANSWER SECTION:
us-central1-manabu-pj-xxx.cloudfunctions.net. 300 IN	A 216.239.36.54

Cloud Run

サンプルコンテナを利用し、外部からアクセスが可能
貼り付けた画像_2023_09_20_14_38.png

ブラウザよりアクセス確認
貼り付けた画像_2023_09_20_14_39.png

digにてPublicIPを確認

dig hello-wr7nl34dpq-uc.a.run.app

; <<>> DiG 9.10.6 <<>> hello-wr7nl34dpq-uc.a.run.app
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4467
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;hello-wr7nl34dpq-uc.a.run.app.	IN	A

;; ANSWER SECTION:
hello-wr7nl34dpq-uc.a.run.app. 21600 IN	A	216.239.34.53
hello-wr7nl34dpq-uc.a.run.app. 21600 IN	A	216.239.32.53
hello-wr7nl34dpq-uc.a.run.app. 21600 IN	A	216.239.38.53
hello-wr7nl34dpq-uc.a.run.app. 21600 IN	A	216.239.36.53

VPN

PublicIPを用いたVPN構成のオーダが可能

VPN接続作成時に、PublicIPアドレスが必要となるため作成する
貼り付けた画像_2023_09_20_14_43.png

Public静的の割り当てが可能
貼り付けた画像_2023_09_20_14_43.png

Cloud Load Balancer

インターネットから内部サービス向けのロードバランサを作成可能

インターネットから内部向けの通信を選択
貼り付けた画像_2023_09_20_14_54.png

インターネット側のPublicIPはエフェメラルもしくは静的IPが利用可能
貼り付けた画像_2023_09_20_14_55.png

PublicIPを用いたロードバランサの作成が可能
貼り付けた画像_2023_09_20_15_17.png

Cloud SQL

SQLインスタンスを作成し、PublicIPを利用した構成が可能

インスタンス作成時にパブリックIPを付与できる
貼り付けた画像_2023_09_20_15_25.png

パブリックIPを持ったMySQLインスタンスが作成される
貼り付けた画像_2023_09_20_15_42.png

接続テストを実施し、問題なくアクセスが可能
貼り付けた画像_2023_09_20_15_56.png

Cloud Storage

パブリック公開のバケットを作成し、インターネットからのアクセスが可能

バケット作成時に、「公開アクセス禁止を適用する」のチェックをはずすことが可能
貼り付けた画像_2023_09_21_11_18.png

AllUserにバケットの読み取り権限を付与
貼り付けた画像_2023_09_21_11_33.png

適当な画像をアップロードし、インターネットからアクセスすることが可能
貼り付けた画像_2023_09_21_11_30.png

Marketplace

Marketplaceの画面を開き、プロダクトの確認とオーダが可能
image.png

Datastream

パブリックアドレスのDatastreamからSQLへのアクセス設定が可能
貼り付けた画像_2023_09_21_13_33.png

VertexAI Workbench

パブリックアドレスを用いて通信させることが可能
貼り付けた画像_2023_09_21_14_07.png

----アクセス制御と結果----

アクセス制御の実施

今回アクセス制御を実施する方法として、組織ポリシーでの制御を実施する
組織のポリシーを設定することで、組織内のすべてのプロジェクトでPublicIPアドレスの利用を禁止する
場合によっては特定のプロジェクトのみに適用なども可能

組織とプロジェクトの構成
貼り付けた画像_2023_09_20_16_40.png

組織ポリシーの設定の事前準備

編集権限の付与

組織ポリシーの作成には権限が必要なため、付与する
組織のポリシーの作成と管理

貼り付けた画像_2023_09_20_16_13.png

組織ポリシーの編集

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

組織(xcloudyx.net) -> IAMと管理 -> 組織のポリシーを選択
貼り付けた画像_2023_09_20_16_14.png

Public静的IPアドレス(VPCネットワーク)

組織ポリシーでの制御はできない

ComputeEngineの制御方法

constraints/compute.vmExternalIpAccessの組織ポリシーを変更することで、アクセス制御が可能
組織ポリシーにてconstraints/compute.vmExternalIpAccesでフィルタをかけ、Define allowed external IPs for VM instancesを選択
貼り付けた画像_2023_09_21_10_07.png

ポリシーの管理を選択
貼り付けた画像_2023_09_20_16_29.png

カスタマイズ -> ルールの追加を選択
貼り付けた画像_2023_09_20_16_30.png

ポリシーの値をすべて許可しないに変更し、ポリシーを設定を選択
貼り付けた画像_2023_09_20_16_31.png

ポリシーが更新され、すべて拒否になっている
貼り付けた画像_2023_09_20_16_32.png

上位組織で拒否のポリシーとしたため、下位のプロジェクトに設定内容が継承されている事を確認
貼り付けた画像_2023_09_20_16_34.png

ComputeEngineの制御結果

組織ポリシーにより、エフェメラルのPublicIPも既に作成済みの静的IPの割り当て(選択)ができない
貼り付けた画像_2023_09_20_16_43.png

何も選択ができない状態となっている
image.png

Kubernetes Engineの制御方法

ComputeEngineおよびロードバランサと同様の設定、一般公開クラスタ(Public向け)の作成は失敗する
constraints/compute.vmExternalIpAccess
constraints/compute.restrictLoadBalancerCreationForTypes

Kubernetes Engineの制御結果

Publicクラスタのデプロイに失敗する
image.png

App Engineの制御方法

組織ポリシーでの制御はできない
AppEngineのFirewallで制御する

Cloud Functionsの制御方法

インバウンド
constraints/cloudfunctions.allowedIngressSettings

アウトバウンド
constraints/cloudfunctions.allowedVpcConnectorEgressSettings
の組織ポリシーを変更することで、アクセス制御が可能

組織ポリシーより、**Allowed ingress settings (Cloud Functions)**を選択
貼り付けた画像_2023_09_21_12_04.png

ポリシーを管理を選択
貼り付けた画像_2023_09_21_12_04.png

カスタマイズ -> ルールの追加を選択
貼り付けた画像_2023_09_21_12_05.png

カスタム -> 許可 -> ALLOW_INTERNAL_ONLY -> 完了 -> ポリシーを設定を選択
貼り付けた画像_2023_09_21_12_06.png

ポリシーが有効になったことがわかる
貼り付けた画像_2023_09_21_12_06.png

Cloud Functionsの制御結果

インターネットからのアクセスに失敗する状態となった
貼り付けた画像_2023_09_21_12_08.png

Cloud Runの制御方法

run.allowedIngressの組織ポリシーを変更することで、アクセス制御が可能
許可される上り(内向き)設定の制限

組織ポリシーより、Allowed ingress settings (Cloud Run)を選択
貼り付けた画像_2023_09_20_17_31.png

ポリシーを管理を選択
貼り付けた画像_2023_09_20_17_33.png

カスタマイズ -> ルールの追加を選択
貼り付けた画像_2023_09_20_17_34.png

カスタム -> 許可を選択
内部からの通信と、ロードバランサ経由の通信のみを許可する
internalinternal-and-cloud-load-balancingを追加して、完了 -> ポリシーを設定を選択
貼り付けた画像_2023_09_20_17_35.png

Cloud Runの制御結果

上記により、CloudRunのサービス作成にて、すべてを選択することができなくなる
貼り付けた画像_2023_09_20_17_38.png

VPNの制御方法

constraints/compute.restrictVpnPeerIPs
の組織ポリシーを変更することで、アクセス制御が可能

組織ポリシーより、Restrict VPN Peer IPsを選択
貼り付けた画像_2023_09_21_10_42.png

ポリシーを管理を選択
貼り付けた画像_2023_09_21_10_44.png

カスタマイズ -> ルールの追加を選択
貼り付けた画像_2023_09_21_10_44.png

すべて許可しない -> 完了 -> ポリシーを設定を選択
VPN利用時はPublicIPが必須となるので、すべて許可しないとする
貼り付けた画像_2023_09_21_10_46.png

拒否のルールがポリシーに適用された
貼り付けた画像_2023_09_21_10_48.png

VPNの制御結果

上記により、VPN作成にて、最終的にエラーとなる
途中までオーダできそうな感じだったが、オーダ後、最終的にエラーとなりVPNサービスの作成は失敗した。
image.png
image.png

Cloud Load Balancerの制御方法

constraints/compute.restrictLoadBalancerCreationForTypes
の組織ポリシーを変更することで、アクセス制御が可能

組織ポリシーより、Restrict Load Balancer Creation Based on Load Balancer Typesを選択
貼り付けた画像_2023_09_21_10_10.png

ポリシーを管理を選択
貼り付けた画像_2023_09_21_10_11.png

カスタマイズ -> ルールを追加を選択
貼り付けた画像_2023_09_21_10_15.png

カスタム -> 拒否を選択し
ルールの中身に「in:EXTERNAL」を入れることで全てのPublicロードバランサタイプを拒否する
続けて、完了 -> ポリシーを設定を選択
貼り付けた画像_2023_09_21_10_30.png

in:EXTERNALによって、複数のポリシーが追加されたことがわかる
貼り付けた画像_2023_09_21_10_31.png

Cloud Load Balancerの制御結果

上記により、Externalタイプロードバランサの作成にて、最終的にエラーとなる
途中までオーダできそうな感じだったが、オーダ後、最終的にエラーとなりPublicタイプのLBサービスの作成は失敗した。
image.png
image.png

Cloud SQLの制御方法

constraints/sql.restrictPublicIp
の組織ポリシーを変更することで、アクセス制御が可能

組織ポリシーより、Restrict Public IP access on Cloud SQL instancesを選択
貼り付けた画像_2023_09_21_10_55.png

ポリシーを管理を選択
貼り付けた画像_2023_09_21_10_57.png

カスタマイズ -> ルールの追加を選択
貼り付けた画像_2023_09_21_10_58.png

オン -> 完了 -> ポリシーを設定を選択
貼り付けた画像_2023_09_21_10_59.png

組織ポリシーが有効になったことがわかる
貼り付けた画像_2023_09_21_11_00.png

Cloud SQLの制御結果

上記により、Cloud SQLのオーダ画面にてPublicIPの付与ができない状態となった
貼り付けた画像_2023_09_21_11_01.png

Cloud Storageの制御方法

constraints/storage.publicAccessPrevention
の組織ポリシーを変更することで、アクセス制御が可能

組織ポリシーより、Enforce Public Access Preventionを選択
貼り付けた画像_2023_09_21_11_38.png

ポリシーの管理を選択
貼り付けた画像_2023_09_21_11_40.png

カスタマイズ -> ルールの追加を選択
貼り付けた画像_2023_09_21_11_40.png

オン -> 完了 -> ポリシーを設定を選択
貼り付けた画像_2023_09_21_11_41.png

組織ポリシーが有効になったことがわかる
貼り付けた画像_2023_09_21_11_42.png

Cloud Storageの制御結果

上記により、バケット作成時にエラーはないが、AllUsersに読み取り許可の設定を実施するとエラーとなった
貼り付けた画像_2023_09_21_11_44.png

Marketplaceの制御方法

constraints/commerceorggovernance.disablePublicMarketplace
の組織ポリシーを変更することで、アクセス制御が可能

組織ポリシーより、Disable Public Marketplaceを選択
貼り付けた画像_2023_09_21_13_12.png

ポリシーの管理を選択
貼り付けた画像_2023_09_21_13_13.png

カスタマイズ -> ルールの追加を選択
貼り付けた画像_2023_09_21_13_14.png

オン -> 完了 -> ポリシーを設定を選択
貼り付けた画像_2023_09_21_13_15.png

組織ポリシーが有効になったことがわかる
貼り付けた画像_2023_09_21_13_15.png

Marketplaceの制御結果

組織ポリシーで無効としたため、何も見れなくなった
貼り付けた画像_2023_09_21_13_16.png

Datastreamの制御方法

constraints/datastream.disablePublicConnectivity
の組織ポリシーを変更することで、アクセス制御が可能

組織ポリシーより、Datastream - Block Public Connectivity Methodsを選択
貼り付けた画像_2023_09_21_13_30.png

ポリシーを管理を選択
貼り付けた画像_2023_09_21_13_44.png

カスタマイズ -> ルールの追加を選択
貼り付けた画像_2023_09_21_13_45.png

オン -> 完了 -> ポリシーを設定を選択
貼り付けた画像_2023_09_21_13_15.png

組織ポリシーが有効になったことがわかる
貼り付けた画像_2023_09_21_13_46.png

Datastreamの制御結果

PublicIPを用いたDatastreamを作成しようとすると、最後にエラーとなる
image.png

VertexAI Workbenchの制御方法

constraints/ainotebooks.restrictPublicIp
の組織ポリシーを変更することで、アクセス制御が可能

組織ポリシーより、Restrict public IP access on new Vertex AI Workbench notebooks and instancesを選択
貼り付けた画像_2023_09_21_14_00.png

ポリシーを管理を選択
貼り付けた画像_2023_09_21_14_01.png

カスタマイズ -> ルールの追加を選択
貼り付けた画像_2023_09_21_14_01.png

オン -> 完了 -> ポリシーを設定を選択
貼り付けた画像_2023_09_21_13_15.png

組織ポリシーが有効になったことがわかる
貼り付けた画像_2023_09_21_14_02.png

VertexAI Workbenchの制御結果

外部IPアドレスを割り当てが選択できなくなり、PublicIP持ちで作成することができなくなった
貼り付けた画像_2023_09_21_14_04.png

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?