☁️くもをもくもくまなぶ

クラウドコンピューティングサービスの学んだことを中心につらつらと書いています

GCPで実現するBeyondCorp RemoteAccess

本記事

🆗 GCPのリソース
🆖 ゼロトラストネットワークの概念および説明

BeyondCorp Remote Access

BeyondCorp - 企業セキュリティに対する新しいアプローチ
Googleが提唱している ゼロトラストネットワーク の実現方法の一つです。

検証環境

検証のゴール

  • 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アカウント全員
Image in a image block
  • 画面に表示する項目
    • アプリ名 ... 画面に表示する
    • ユーザサポートメール ... 外部公開してもよい問い合わせ先メールアドレス(Google グループでサポート用グループメールアドレス発行を推奨)
    • デベロッパーの連絡先情報 ... なにか問題があったときの連絡先
Image in a image block
認証ユーザの設定
  • IAPで認証するユーザの設定
Image in a image block
  • IAPの有効化前確認
Image in a image block

画面中央の IAP を有効化するとIAPの保護対象となる

Access Context Manager
設定ユーザへの権限設定
  • プロジェクト内部の権限ではなく組織全体の権限適用
    • ●が3つなのは、プロジェクト(リソース管理グループ)を表す
      • 不要になったらプロジェクト毎、削除(シャットダウン)することで課金制御が可能
    • 🏢が組織を表す
      • 組織全体の権限を制御するときはこちらで制御しなければならない

ハマるポイント
プロジェクト内で権限を付与したからといって、
組織全体に関わるリソース(Access Context Manager)に対して、
アクセス権限を与えたことにならない。

Image in a image block

画面上部が必ず組織全体のアイコンになっていることを確認しアクセス権限を付与すること

Image in a image block

そこで初めてAccess Context Managerへのアクセスが可能となる

Image in a image block
認証可能なデバイスの設定
全体
  • 条件を作成
    • 基本モード ... GUIで設定
    • 詳細モード ... JSONといったコードベースで設定
Image in a image block
リージョン(アクセス元の国)

JP で日本を絞り込み検索するとよい

Image in a image block
OSのポリシー

バージョン指定は数値設定となり制御で細かい設定が可能な一方メンテナンスコストが高くなるため、 バージョン指定は可能な限り設定しないことがよい印象。

Image in a image block
サンプルポリシー
Image in a image block
ここまで設定したものの...
GAEでカスタムドメインの利用が可能
  • サンプルで作成した環境の場合、Google Domainでドメインを取得しているため親和性が高い
  • 外部のドメイン事業者で取得している場合は、DNSレコードの変更が必要
Image in a image block
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