Google Cloudの組織内アクセス制限を試してみる

記事タイトルとURLをコピーする

当記事は みずほリサーチ&テクノロジーズ × G-gen エンジニアコラボレーション企画 で執筆されたものです。


G-gen の藤岡です。組織内アクセス制限は、承認された Google Cloud 組織へのみアクセスを許可する Resource Manager の機能の 1 つです。当記事では組織内アクセス制限機能の解説と、検証を行います。

概要

組織内アクセス制限 とは

組織内アクセス制限 (Organization restrictions) は、ユーザーがアクセスできる Google Cloud 組織を制限する機能です。この機能を使うことで、フィッシングやインサイダー攻撃などにより、組織内からデータが引き出され、別の Google Cloud 組織に持ち出されてしまうこと等を防ぐことが出来ます。

当機能を使うには、組織内ネットワークの HTTP プロキシでユーザーのリクエストに X-Goog-Allowed-Resources という HTTP ヘッダを追加し、ヘッダの値としてアクセスを許可する Google Cloud 組織の ID を設定します。

Google Cloud API へのリクエストにこのヘッダが存在すると ヘッダの値で許可されていない組織へのアクセスは拒否 されます。

つまり、当機能を使用するには、組織 (会社や官公庁) で HTTP プロキシを使っており、それ以外にインターネットへの抜け道が無いことが前提となります。

画像は公式より引用

使用時の考慮点

組織内アクセス制限を使用する際の考慮点を 4 点紹介します。記載の項目以外にも、既存環境を考慮した上で導入する必要があります。

サポート対象のサービス

サポートされているサービスは ドキュメント にある通りです。 組織内アクセス制限は、Google Cloud コンソールから発信されるこのサービスへのリクエストでのみ部分的にサポートされています。 と記載のあるサービスもあります。

ほとんどの Google Cloud サービスが対象になってはいますが、念の為自分の環境で使われている Google Cloud サービスが対象となっているか、確認しましょう。

Google 所有のリソースへのアクセス

BigQuery や Compute Engine(以下 GCE)等で使う Google の公開リソースは、Google 所有の Google Cloud 組織でホストされています。それらを使用する場合には、組織 ID の 433637338589 を組織内アクセス制限ヘッダに追加します。

Google 所有の Google Cloud 組織(組織 ID:433637338589)を追加しないでコンソールから GCE の [インスタンスを作成] をクリックすると以下のエラーとなりました。

これは GCE の公開 OS イメージが、前述の Google Cloud 組織で管理されているためです。

Access denied by organization restriction. Please contact your administrator for additional information on this feature.

組織内アクセス制限エラー

Cloud Shell の使用

Cloud Shell の実態は Google Cloud が所有する GCE インスタンス上の Docker コンテナです。そのため Cloud Shell から gcloud コマンド等を利用すると、その API コールは組織ネットワークの HTTP プロキシを通りません。つまり組織内アクセス制限機能によるヘッダは付与されず、制限は発生しません。

以上を踏まえ、当機能を用いて Google Cloud 組織へのアクセスを制御したい場合、Cloud Shell の無効化 が必須 となります。Cloud Shell は Google Workspace / Cloud Identity の管理画面から無効にすることができます。

上記の挙動を簡単に検証してみます。

組織内アクセス制限適用時の Cloud Shell の使用

図にあるようにユーザー A が組織 A と B を使用できる権限がある場合でも、Web コンソールからは組織 A のみが表示され、組織 B への操作ができません。しかし Cloud Shell 経由で操作すると、Google Cloud API への API コールは社内のプロキシサーバを経由しないため、ヘッダが追加されず、制限がかかりません。Cloud Shell から組織の一覧表示(gcloud organizations list)をすると組織 B も表示がされ、権限に従ってリソースの作成も可能 です。

下り(外向き)プロキシの構成

組織内アクセス制限を使用するにあたり、ヘッダの付与を Google Cloud 以外のターゲットに追加しないようにすることも可能です。ターゲットに入れるべきドメインは ドキュメント にある通りです。

入れるべきターゲットには *.google.com も含まれており、これは組織内アクセス制限を使うためには一般の Google 検索のリクエストへもヘッダの付与が必要であることを意味し、プロキシの処理量にも影響があるため、利用時には検討が必要です。

類似機能

当記事で紹介する組織内アクセス制限は、Google Cloud 組織の ID を使用し、利用できる Google Cloud の組織を制限しますが、類似機能としてユーザーアカウントを使用して Google サービスの利用を制限する機能もあります。この機能を使うことで、特定のドメインから組織の Google サービスの利用を許可し、一般ユーザー向けのアカウント(例:〜@gmail.com)や別ドメインからの利用を防ぐことができます。

詳細は ドキュメント をご参照ください。

検証の準備

アーキテクチャ

当記事で構築する構成は以下の通りです。

Amazon Web Services (AWS) 環境を会社や官公庁の組織ネットワークに見立てます。Amazon EC2 で HTTP プロキシに見立てた Squid サーバーを構築します。

Squid で組織内アクセス制限ヘッダを付与することで、クライアントからの操作を 組織 A のみに制限 します。

構成図

前提条件

インスタンス情報は以下の通りです。AWS の VPC や EC2、セキュリティグループの設定は当記事では触れません。

インスタンス名 OS プライベート IP アドレス パブリック IP アドレス
windows-client Windows10 - xxx.xxx.xxx.6
proxy-server Amazon Linux 2 172.31.15.234 xxx.xxx.xxx.66

windows-client 情報

# proxy-server 情報
[ec2-user@ip-172-31-15-234 ~]$ cat /etc/os-release 
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"
[ec2-user@ip-172-31-15-234 ~]$ 

Squid と SSL Bump

SSL Bump による SSL/TLS 復号

当記事では AWS 環境に構築した EC2 インスタンスに Squid と SSL Bump をセットアップし、社内 HTTP プロキシサーバとして見立てて検証を行います。

SSL Bump は、HTTPS 通信をクライアントと Squid で終端します。Squid で復号し、再度暗号化することで、通常時はリクエスト先の URL はドメインまでしか確認できない HTTPS 通信の中身を見ることができます。これは、MITM 攻撃(Man-In-The-Middle:中間者攻撃)と同じ手法です。

SSL Bump を使うことでリクエストに HTTP ヘッダを追加できます。設定ファイル(squid.conf)の request_header_add で追加するヘッダが構成されますが、ヘッダを Google Cloud 以外のターゲットに追加しないようにすることもできます。そのためには、ドキュメント に記載のリクエストにのみヘッダを追加するよう構成します。

注意点

Squid で SSL Bump を使うには、configure options パラメータの値に --with-openssl--enable-ssl-crtd のオプションが必要です。

ディストリビューションによって、インストールされるデフォルトオプションが異なる ため、必要なオプションがない場合にはソースからビルドしなければなりません。 例として、GCE の OS を CentOS と Debian のそれぞれで Squid をインストールした時のパラメータ値を比べます。

# CentOS の場合
[fujioka@centos ~]$ cat /etc/os-release 
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

[fujioka@centos ~]$ 
[fujioka@centos ~]$ sudo yum install squid
...
[fujioka@centos ~]$ 
[fujioka@centos ~]$ squid -v
Squid Cache: Version 3.5.20
Service Name: squid
configure options:  '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--disable-strict-error-checking' '--exec_prefix=/usr' '--libexecdir=/usr/lib64/squid' '--localstatedir=/var' '--datadir=/usr/share/squid' '--sysconfdir=/etc/squid' '--with-logdir=$(localstatedir)/log/squid' '--with-pidfile=$(localstatedir)/run/squid.pid' '--disable-dependency-tracking' '--enable-eui' '--enable-follow-x-forwarded-for' '--enable-auth' '--enable-auth-basic=DB,LDAP,MSNT-multi-domain,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB,SMB_LM,getpwnam' '--enable-auth-ntlm=smb_lm,fake' '--enable-auth-digest=file,LDAP,eDirectory' '--enable-auth-negotiate=kerberos' '--enable-external-acl-helpers=file_userip,LDAP_group,time_quota,session,unix_group,wbinfo_group,kerberos_ldap_group' '--enable-cache-digests' '--enable-cachemgr-hostname=localhost' '--enable-delay-pools' '--enable-epoll' '--enable-ident-lookups' '--enable-linux-netfilter' '--enable-removal-policies=heap,lru' '--enable-snmp' '--enable-ssl-crtd' '--enable-storeio=aufs,diskd,rock,ufs' '--enable-wccpv2' '--enable-esi' '--enable-ecap' '--with-aio' '--with-default-user=squid' '--with-dl' '--with-openssl' '--with-pthreads' '--disable-arch-native' 'build_alias=x86_64-redhat-linux-gnu' 'host_alias=x86_64-redhat-linux-gnu' 'CFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches   -m64 -mtune=generic -fpie' 'LDFLAGS=-Wl,-z,relro  -pie -Wl,-z,relro -Wl,-z,now' 'CXXFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches   -m64 -mtune=generic -fpie' 'PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig'
[fujioka@centos ~]$
# Debian の場合
fujioka@debian:~$ cat /etc/os-release 
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
fujioka@debian:~$ 
fujioka@debian:~$ sudo apt install squid
...
fujioka@debian:~$ 
fujioka@debian:~$ sudo squid -v
Squid Cache: Version 4.13
Service Name: squid
Debian linux
configure options:  '--build=x86_64-linux-gnu' '--prefix=/usr' '--includedir=${prefix}/include' '--mandir=${prefix}/share/man' '--infodir=${prefix}/share/info' '--sysconfdir=/etc' '--localstatedir=/var' '--disable-option-checking' '--disable-silent-rules' '--libdir=${prefix}/lib/x86_64-linux-gnu' '--runstatedir=/run' '--disable-maintainer-mode' '--disable-dependency-tracking' 'BUILDCXXFLAGS=-g -O2 -ffile-prefix-map=/build/squid-Nhk3MN/squid-4.13=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wl,-z,relro -Wl,-z,now ' 'BUILDCXX=g++' '--with-build-environment=default' '--enable-build-info=Debian linux' '--datadir=/usr/share/squid' '--sysconfdir=/etc/squid' '--libexecdir=/usr/lib/squid' '--mandir=/usr/share/man' '--enable-inline' '--disable-arch-native' '--enable-async-io=8' '--enable-storeio=ufs,aufs,diskd,rock' '--enable-removal-policies=lru,heap' '--enable-delay-pools' '--enable-cache-digests' '--enable-icap-client' '--enable-follow-x-forwarded-for' '--enable-auth-basic=DB,fake,getpwnam,LDAP,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB' '--enable-auth-digest=file,LDAP' '--enable-auth-negotiate=kerberos,wrapper' '--enable-auth-ntlm=fake,SMB_LM' '--enable-external-acl-helpers=file_userip,kerberos_ldap_group,LDAP_group,session,SQL_session,time_quota,unix_group,wbinfo_group' '--enable-security-cert-validators=fake' '--enable-storeid-rewrite-helpers=file' '--enable-url-rewrite-helpers=fake' '--enable-eui' '--enable-esi' '--enable-icmp' '--enable-zph-qos' '--enable-ecap' '--disable-translation' '--with-swapdir=/var/spool/squid' '--with-logdir=/var/log/squid' '--with-pidfile=/run/squid.pid' '--with-filedescriptors=65536' '--with-large-files' '--with-default-user=proxy' '--enable-linux-netfilter' '--with-systemd' '--with-gnutls' 'build_alias=x86_64-linux-gnu' 'CFLAGS=-g -O2 -ffile-prefix-map=/build/squid-Nhk3MN/squid-4.13=. -fstack-protector-strong -Wformat -Werror=format-security -Wall' 'LDFLAGS=-Wl,-z,relro -Wl,-z,now ' 'CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=2' 'CXXFLAGS=-g -O2 -ffile-prefix-map=/build/squid-Nhk3MN/squid-4.13=. -fstack-protector-strong -Wformat -Werror=format-security'
fujioka@debian:~$

比較すると、--with-openssl--enable-ssl-crtd のオプションが CentOS ではデフォルトで入っていることがわかります。当記事で構築する Amazon Linux 2 の EC2 ではデフォルトで必要なオプションが入っています。

検証環境の構築

事前準備

ドキュメント に従ってヘッダを作成します。 前述の Google 所有のリソースへのアクセス にある通り、Google の組織 ID(433637338589)も追加します。ヘッダの作成は Cloud Shell から実行しました。

# 作成されたヘッダ
fujioka@cloudshell:~ (xxxx)$ cat authorized_orgs.json
{
  "resources": ["organizations/<組織 A の ID>", "organizations/433637338589"],
  "options": "strict"
}
fujioka@cloudshell:~ (xxxx)$

次に、作成したヘッダを base64 エンコードします。エンコード結果は、後述の SSL Bump の設定 で使用します。

# エンコード
fujioka@cloudshell:~ (xxxx)$ cat authorized_orgs.json | basenc --base64url -w0
ewxxxxxxxxxxxxx
fujioka@cloudshell:~ (xxxx)$

Squid のインストール

proxy-server インスタンスに Squid をインストールします。インストールされたバージョンは 3.5.20 です。

# パッケージのアップデート
[ec2-user@ip-172-31-15-234 ~]$ sudo -i
[root@ip-172-31-15-234 ~]# 
[root@ip-172-31-15-234 ~]# yum update
[root@ip-172-31-15-234 ~]# 

# インストール
[root@ip-172-31-15-234 ~]# yum install squid
[root@ip-172-31-15-234 ~]# 

# バージョン確認
[root@ip-172-31-15-234 ~]# squid -v
Squid Cache: Version 3.5.20
Service Name: squid
configure options:  '--build=x86_64-koji-linux-gnu' '--host=x86_64-koji-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--disable-strict-error-checking' '--exec_prefix=/usr' '--libexecdir=/usr/lib64/squid' '--localstatedir=/var' '--datadir=/usr/share/squid' '--sysconfdir=/etc/squid' '--with-logdir=$(localstatedir)/log/squid' '--with-pidfile=$(localstatedir)/run/squid.pid' '--disable-dependency-tracking' '--enable-eui' '--enable-follow-x-forwarded-for' '--enable-auth' '--enable-auth-basic=DB,LDAP,MSNT-multi-domain,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB,SMB_LM,getpwnam' '--enable-auth-ntlm=smb_lm,fake' '--enable-auth-digest=file,LDAP,eDirectory' '--enable-auth-negotiate=kerberos' '--enable-external-acl-helpers=file_userip,LDAP_group,time_quota,session,unix_group,wbinfo_group,kerberos_ldap_group' '--enable-cache-digests' '--enable-cachemgr-hostname=localhost' '--enable-delay-pools' '--enable-epoll' '--enable-ident-lookups' '--enable-linux-netfilter' '--enable-removal-policies=heap,lru' '--enable-snmp' '--enable-ssl-crtd' '--enable-storeio=aufs,diskd,rock,ufs' '--enable-wccpv2' '--enable-esi' '--enable-ecap' '--with-aio' '--with-default-user=squid' '--with-dl' '--with-openssl' '--with-pthreads' '--disable-arch-native' 'build_alias=x86_64-koji-linux-gnu' 'host_alias=x86_64-koji-linux-gnu' 'CFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches    -m64 -mtune=generic -fpie' 'LDFLAGS=-Wl,-z,relro  -pie -Wl,-z,relro -Wl,-z,now' 'CXXFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches    -m64 -mtune=generic -fpie' 'PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig'
[root@ip-172-31-15-234 ~]# 

# 起動
[root@ip-172-31-15-234 ~]# systemctl start squid
[root@ip-172-31-15-234 ~]# 
[root@ip-172-31-15-234 ~]# systemctl status squid
● squid.service - Squid caching proxy
   Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled; vendor preset: disabled)
   Active: active (running) since Sun 2023-03-19 00:42:48 UTC; 5s ago
...
[root@ip-172-31-15-234 ~]# 

# 自動起動設定
[root@ip-172-31-15-234 ~]# systemctl enable squid
Created symlink from /etc/systemd/system/multi-user.target.wants/squid.service to /usr/lib/systemd/system/squid.service.
[root@ip-172-31-15-234 ~]# 
[root@ip-172-31-15-234 ~]# systemctl is-enabled squid
enabled
[root@ip-172-31-15-234 ~]# 

自己署名 SSL 証明書の作成

proxy-server インスタンスで自己署名 SSL 証明書を作成します。

# Squid ディレクトリへ移動
[root@ip-172-31-15-234 ~]# cd /etc/squid/
[root@ip-172-31-15-234 squid]# 

# 自己署名 SSL 証明書を作成(証明書の有効期間は 30 日で設定)
[root@ip-172-31-15-234 squid]# openssl req -new -newkey rsa:2048 -days 30 -nodes -x509 -keyout bump.key -out bump.crt
...
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:SQUID
Email Address []:
[root@ip-172-31-15-234 squid]# 

# 証明書ファイル(bump.crt)と秘密鍵ファイル(bump.key)が作成される
[root@ip-172-31-15-234 squid]# ls -l
total 56
-rw-r--r-- 1 root root   1261 Mar 19 00:47 bump.crt
-rw-r--r-- 1 root root   1704 Mar 19 00:47 bump.key
...
[root@ip-172-31-15-234 squid]# 

# 証明書をクライアントにインポートできるように DER 形式に変換
[root@ip-172-31-15-234 squid]# openssl x509 -in bump.crt -outform DER -out bump.der
[root@ip-172-31-15-234 squid]# 

# bump.der が作成される
[root@ip-172-31-15-234 squid]# ls -l
total 60
-rw-r--r-- 1 root root   1261 Mar 19 00:47 bump.crt
-rw-r--r-- 1 root root    891 Mar 19 00:51 bump.der
-rw-r--r-- 1 root root   1704 Mar 19 00:47 bump.key
...
[root@ip-172-31-15-234 squid]# 

証明書を Windows の信頼されたルート証明書機関にインポート

proxy-server で作成した bump.der を windows-client に scp コマンド等で転送し、任意の場所に置きます。

windows-client のエクスプローラー

windows-client で証明書をインポートします。

[証明書 - ローカルコンピューター] > [信頼されたルート証明機関] を右クリックし、 [すべてのタスク] > [インポート] をクリックします。

証明書のインポート①

ウィザードに従って設定をし、[完了] をクリックします。

証明書のインポート②

インポートが成功すると、正しくインポートされました。 と表示され、proxy-server で作成した自己署名SSL 証明書が表示されます。

証明書のインポート③

SSL Bump の設定

proxy-server で SSL Bump の設定をします。

# Diffie-Hellman アルゴリズムの設定ファイルを生成
[root@ip-172-31-15-234 squid]# openssl dhparam -outform PEM -out /etc/squid/bump_dhparam.pem 2048
[root@ip-172-31-15-234 squid]# 

# bump_dhparam.pem が作成される
[root@ip-172-31-15-234 squid]# ls -l
total 64
-rw-r--r-- 1 root root   1261 Mar 19 00:47 bump.crt
-rw-r--r-- 1 root root    891 Mar 19 00:51 bump.der
-rw-r--r-- 1 root root    424 Mar 19 01:00 bump_dhparam.pem
-rw-r--r-- 1 root root   1704 Mar 19 00:47 bump.key
...
[root@ip-172-31-15-234 squid]#

# ファイルのパーミッション設定
[root@ip-172-31-15-234 squid]# chown squid:squid /etc/squid/bump*
[root@ip-172-31-15-234 squid]# 
[root@ip-172-31-15-234 squid]# chmod 400 /etc/squid/bump*
[root@ip-172-31-15-234 squid]# 
[root@ip-172-31-15-234 squid]# ls -l
total 64
-r-------- 1 squid squid  1261 Mar 19 00:47 bump.crt
-r-------- 1 squid squid   891 Mar 19 00:51 bump.der
-r-------- 1 squid squid   424 Mar 19 01:00 bump_dhparam.pem
-r-------- 1 squid squid  1704 Mar 19 00:47 bump.key
...
[root@ip-172-31-15-234 squid]# 

# サービス停止
[root@ip-172-31-15-234 squid]# systemctl stop squid
[root@ip-172-31-15-234 squid]# systemctl status squid
● squid.service - Squid caching proxy
   Loaded: loaded (/usr/lib/systemd/system/squid.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since Sun 2023-03-19 01:14:22 UTC; 10s ago
...
[root@ip-172-31-15-234 squid]# 

# 証明書データベース用ディレクトリの作成と初期化
[root@ip-172-31-15-234 squid]# mkdir /var/lib/squid
[root@ip-172-31-15-234 squid]# 
[root@ip-172-31-15-234 squid]# /usr/lib64/squid/ssl_crtd -c -s /var/lib/squid/ssl_db
Initialization SSL db...
Done
[root@ip-172-31-15-234 squid]# 

Squid の設定ファイル(squid.conf)を SSL Bump 用に変更します。検証用のため、Basic 認証等の設定はしていない簡易的な設定です。

# 差分(squid.conf.default には変更前の内容が記載されているため差分で表示)
[root@ip-172-31-15-234 squid]# diff -u -B squid.conf.default squid.conf
--- squid.conf.default  2023-02-13 20:53:51.000000000 +0000
+++ squid.conf  2023-03-31 04:48:08.831966864 +0000
@@ -11,7 +11,7 @@
 acl localnet src fc00::/7       # RFC 4193 local private network range
 acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines
 
-acl SSL_ports port 443
+acl SSL_ports port 443 3128    # 3128 ポート追加
 acl Safe_ports port 80         # http
 acl Safe_ports port 21         # ftp
 acl Safe_ports port 443                # https
@@ -24,6 +24,8 @@
 acl Safe_ports port 777                # multiling http
 acl CONNECT method CONNECT
 
+acl client src xxx.xxx.xxx.6/32  # windows-client
+http_access allow client       # 許可
 #
 # Recommended minimum Access Permission configuration:
 #
@@ -56,7 +58,12 @@
 http_access deny all
 
 # Squid normally listens to port 3128
-http_port 3128
+# http_port 3128 # コメントアウト
+# 以下1行追加
+http_port 3128 tcpkeepalive=60,30,3 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=20MB cert=/etc/squid/bump.crt key=/etc/squid/bump.key cipher=HIGH:MEDIUM:!LOW:!RC4:!SEED:!IDEA:!3DES:!MD5:!EXP:!PSK:!DSS options=NO_TLSv1,NO_SSLv3,NO_SSLv2,SINGLE_DH_USE,SINGLE_ECDH_USE tls-dh=prime256v1:/etc/squid/bump_dhparam.pem
+
+# 以下1行追加(組織 A と Google Cloud 所有組織 のみに制限)
+request_header_add X-Goog-Allowed-Resources ewxxxxxxxxxxxxx all
 
 # Uncomment and adjust the following to add a disk cache directory.
 #cache_dir ufs /var/spool/squid 100 16 256
@@ -71,3 +78,8 @@
 refresh_pattern ^gopher:       1440    0%      1440
 refresh_pattern -i (/cgi-bin/|\?) 0    0%      0
 refresh_pattern .              0       20%     4320
+
+# 以下3行追加
+sslcrtd_program /usr/lib64/squid/ssl_crtd -s /var/lib/squid/ssl_db -M 20MB
+sslproxy_cert_error allow all
+ssl_bump stare all
[root@ip-172-31-15-234 squid]# 
# 変更後の squid.conf 全文
[root@ip-172-31-15-234 squid]# cat squid.conf
#
# Recommended minimum configuration:
#

# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
acl localnet src 10.0.0.0/8     # RFC1918 possible internal network
acl localnet src 172.16.0.0/12  # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7       # RFC 4193 local private network range
acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines

acl SSL_ports port 443 3128     # 3128 ポート追加
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT

acl client src xxx.xxx.xxx.6/32  # windows-client
http_access allow client        # 許可
#
# Recommended minimum Access Permission configuration:
#
# Deny requests to certain unsafe ports
http_access deny !Safe_ports

# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports

# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager

# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
#http_access deny to_localhost

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#

# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow localnet
http_access allow localhost

# And finally deny all other access to this proxy
http_access deny all

# Squid normally listens to port 3128
# http_port 3128 # コメントアウト
# 以下1行追加
http_port 3128 tcpkeepalive=60,30,3 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=20MB cert=/etc/squid/bump.crt key=/etc/squid/bump.key cipher=HIGH:MEDIUM:!LOW:!RC4:!SEED:!IDEA:!3DES:!MD5:!EXP:!PSK:!DSS options=NO_TLSv1,NO_SSLv3,NO_SSLv2,SINGLE_DH_USE,SINGLE_ECDH_USE tls-dh=prime256v1:/etc/squid/bump_dhparam.pem

# 以下1行追加(組織 A と Google Cloud 所有組織 のみに制限)
request_header_add X-Goog-Allowed-Resources ewxxxxxxxxxxxxx all

# Uncomment and adjust the following to add a disk cache directory.
#cache_dir ufs /var/spool/squid 100 16 256

# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid

#
# Add any of your own refresh_pattern entries above these.
#
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

# 以下3行追加
sslcrtd_program /usr/lib64/squid/ssl_crtd -s /var/lib/squid/ssl_db -M 20MB
sslproxy_cert_error allow all
ssl_bump stare all
[root@ip-172-31-15-234 squid]#

設定を適用します。

# 再起動
[root@ip-172-31-15-234 squid]# systemctl restart squid
[root@ip-172-31-15-234 squid]# 
[root@ip-172-31-15-234 squid]# systemctl status squid
● squid.service - Squid caching proxy
   Loaded: loaded (/usr/lib/systemd/system/squid.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2023-03-19 02:17:42 UTC; 5s ago
...
[root@ip-172-31-15-234 squid]# 

クライアントの設定

windows-client でプロキシの設定をします。アドレス には proxy-client の IP アドレスを、ポート3128 を設定します。

クライアントのプロキシ設定

検証

windows-client から Google Cloud コンソールを表示させます。

ブラウザは Google Chrome(バージョン: 111.0.5563.65(Official Build) (64 ビット))を使用しました。組織内アクセス制限で構成した通り、組織 A のみに制限されています。

組織内アクセス制限:適用

一方で windows-client で HTTP プロキシを利用しないように設定した場合、同一ユーザーでコンソールを確認すると、組織 B も表示されます(ユーザーに組織 A, B への権限があるため)。

組織内アクセス制限:未適用

HTTP プロキシを経由したアクセスの場合のみ、アクセス先 Google Cloud 組織が制限されることが確認できました。

補足

EC2 の Amazon Linux 2023 (以下 AL2023)では Squid パッケージがリポジトリにないため、インストールするにはソースのダウンロードからしなければなりません。また、AL2023 ではデフォルトのパッケージ管理ツールは DNF になっています。

[ec2-user@ip-172-31-12-52 ~]$ cat /etc/system-release
Amazon Linux release 2023 (Amazon Linux)
[ec2-user@ip-172-31-12-52 ~]$ 
[ec2-user@ip-172-31-12-52 ~]$ sudo yum search squid
Last metadata expiration check: 0:06:57 ago on Sun Mar 19 11:17:05 2023.
No matches found.
[ec2-user@ip-172-31-12-52 ~]$ 
[ec2-user@ip-172-31-12-52 ~]$ sudo dnf search squid
Last metadata expiration check: 0:07:06 ago on Sun Mar 19 11:17:05 2023.
No matches found.
[ec2-user@ip-172-31-12-52 ~]$ 

藤岡 里美 (記事一覧)

クラウドソリューション部

数年前までチキン売ったりドレスショップで働いてました!2022年9月 G-gen にジョイン。ハイキューの映画を4回は見に行きたい。

Google Cloud All Certifications Engineer / Google Cloud Partner Top Engineer 2024