本記事
🆗 GCPのリソース
🆖 ゼロトラストネットワークの概念および説明
BeyondCorp Remote Access
BeyondCorp - 企業セキュリティに対する新しいアプローチ に
Googleが提唱している ゼロトラストネットワーク の実現方法の一つです。
検証環境
- Google Workspace アカウント ※2020.10にG Suite からブランド名変更
- Google Domain でドメイン取得
- お名前.comやAmazon Route53 あるいは自作など外部向けDNSサーバがあればよいです(後々でAレコード追加するため)
- Google Cloud Platformで、プロジェクトの管理者権限
- Google Domain でドメイン取得
- WatchGuard社FireBox T-15w
検証のゴール
- Fireboxのログイン画面をインターネット経由でアクセスする
- アクセス元が
Any-Trusted
のみ許可のためインターネットからは本来アクセスできない設定
- アクセス元が
システム構成
設定
CloudVPN
別途掲載しているので省略します。GCPとWatchGuard製FireBoxのVPN接続
GCP側の設定
以下。
On-prem側の設定
不要。GCPとのVPN接続しているため。
GAE
- 利用したコマンド各種
npm init
で入力した内容は追加で一部あり- 参考にある
runtime:nodejs8
は2020年10月18日でサポート対象外のため、runtime:nodejs10
へ変更
mkdir gae-proxy
cd gae-proxy/
npm init
npm install http --save
npm install http-proxy --save
vi app.yaml
vi index.js
vi package.json
cat package.json
ls -l
gcloud app deploy
参考: GAE Standard環境のNode.jsでリバースプロキシ構築
ReverseProxy
- app.yaml
runtime: nodejs10
- index.js
const http = require('http');
const httpProxy = require('http-proxy');
const port = process.env.PORT || 8080;
httpProxy.createProxyServer({target: '<http://192.168>.***.***:8080/'}).listen(port);
- package.json
{
"name": "gae-proxy",
"version": "1.0.0",
"description": "proxy",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"author": "Unknown",
"license": "MIT",
"dependencies": {
"http": "0.0.1-security",
"http-proxy": "^1.18.1"
}
}
IAP
IAPの作成
OAuth同意画面
- ユーザの種類
- 内部 ... Google Workspace(G Suite)のユーザのみ
- 外部 ... Googleアカウント全員
- 画面に表示する項目
- アプリ名 ... 画面に表示する
- ユーザサポートメール ... 外部公開してもよい問い合わせ先メールアドレス(Google グループでサポート用グループメールアドレス発行を推奨)
- デベロッパーの連絡先情報 ... なにか問題があったときの連絡先
認証ユーザの設定
- IAPで認証するユーザの設定
- IAPの有効化前確認
画面中央の IAP
を有効化するとIAPの保護対象となる
Access Context Manager
設定ユーザへの権限設定
- プロジェクト内部の権限ではなく組織全体の権限適用
- ●が3つなのは、プロジェクト(リソース管理グループ)を表す
- 不要になったらプロジェクト毎、削除(シャットダウン)することで課金制御が可能
- 🏢が組織を表す
- 組織全体の権限を制御するときはこちらで制御しなければならない
- ●が3つなのは、プロジェクト(リソース管理グループ)を表す
ハマるポイント
プロジェクト内で権限を付与したからといって、
組織全体に関わるリソース(Access Context Manager)に対して、
アクセス権限を与えたことにならない。
画面上部が必ず組織全体のアイコンになっていることを確認しアクセス権限を付与すること
そこで初めてAccess Context Managerへのアクセスが可能となる
認証可能なデバイスの設定
全体
- 条件を作成
- 基本モード ... GUIで設定
- 詳細モード ... JSONといったコードベースで設定
リージョン(アクセス元の国)
JP
で日本を絞り込み検索するとよい
OSのポリシー
バージョン指定は数値設定となり制御で細かい設定が可能な一方メンテナンスコストが高くなるため、 バージョン指定は可能な限り設定しないことがよい印象。
サンプルポリシー
ここまで設定したものの...
GAEでカスタムドメインの利用が可能
- サンプルで作成した環境の場合、Google Domainでドメインを取得しているため親和性が高い
- 外部のドメイン事業者で取得している場合は、DNSレコードの変更が必要
Google マネージド証明書
Googleが提供するSSL証明書が 無料 で利用可能な模様。
使用されるSSL証明書の発行元が「Let’s Encrypt」
とあるので、利用するユーザが嫌わなければこちらの採用も無料で検討してよいのではないかと考えるようになりました。
ただ、発行のリクエストから最大で48時間掛かるともあるので、導入までのリードタイムは考えないといけないです。
参考:
Google マネージド SSL 証明書の使用GCPで無料HTTPS化{Compute Engine編}
まとめ
IAPはHTTPS前提であり初期検証を行っていた構成は
そもそもHTTPのバックエンドに投げる構成ではなダメ。
また、Google公式ドキュメントを読み込んでいく中で、
自然と頭の中でオンプレミスにあるリソースへのアクセスを前提としていたので、
IAP Connector(GKE)を利用する前提かと思っていたが、
リバースプロキシをGCP内に置くとなると、ライトな構成になっていく印象を受けた。
IAP による App Engine アプリの保護IAP でオンプレミス アプリとリソースを保護する
1.NGパターン
Client (person) -[HTTPS]→ Internet -[HTTPS]→ IAP Connector -[HTTP]→ (CloudVPN) → On-Prem Server
2.On-Premに置くことを前提
Client (person) -[HTTPS]→ Internet -[HTTPS]→ IAP Connector -[HTTPS]→ (CloudVPN) -[HTTPS]→ Reverse Proxy -[HTTP]-> On-Prem Server
3.On-Premに置くことを前提
Client (person) -[HTTPS]→ Internet -[HTTPS]→ IAP Connector -[HTTPS]→ (CloudVPN) -[HTTPS]→ Reverse Proxy -[HTTP]-> On-Prem Server
1,2,3 で共通していたことは、IAP ConnectorがGKEで動くPodであることが運用課題だった。
ここに来て検証をすすめる中でGAE自体をReverse Proxyとする場合に、GKEを使う必要がなくなったように見える。
4.GAEをカスタムドメイン + Google マネージド証明書 でReverseProxyとする前提
Client (person) -[HTTPS]→ Internet -[HTTPS]→ GAE -[HTTP]→ (CloudVPN) -[HTTP]-> On-Prem Server