はじめに
OSS の Identity Aware Proxy なるものが存在すると聞いて手を動かしてみました。
検証メモとなります。
確認ポイント
手を動かす前に確認すべきポイントを列挙します。
- オンプレとクラウドの繋ぎ(エージェント導入有無)
- サポートプロトコル
- ポスチャ機能有無(シグナル・振る舞いと同義)
最低限、ここら辺の理解をゴールにします。
POMERIUM とは
公式サイトをベースに概要を掴みます。
モダンアーキテクチャは常に3つの要素を確認/評価し続ける。パケット毎に毎回評価し、アクセス許可・拒否を判定するイメージです。
- user identity : 誰がアクセスしているのか
- device identity : どのデバイスがアクセスしているのか
- context : どんな文脈でアクセスしているのか
概要
- タイトル通り OSS の Identity Aware Proxy
- 認証・認可を行う OSS。IdP は Pomerium ローカルの DB、外部 IdP でもOK
- VPN の悩みを解消・zero trsut~という雰囲気
- プランは大別して二つ
- Open Source(OSS 版)
- Teams/Enterprise(機能制限なしの有償版)
有償版は、サポート・API・SAML/LDAP SSO が利用可能です。また、CI/CD 関連機能も有償版限定となります。
ポリシー設定は Teams プランから利用できます。user・group・domain・taime・duration・request context・devicecontext・MFA・その他が利用できます。
※ request context はどこまで・何を設定できるか確認したかった内容ですが、机上調査で手打ちですね...
なお、Audit log は Teams プラン以上から利用可能です。本番環境は Teams 以上が現実解になりそうです。。。
コスト
- Pomerium にログインするユーザ数で費用が発生するようです
- 30日間の返金サポートがあります。返金理由は不問だそうです(本当ですか...?)
- authorization は
Istio
,Google Cloud
と連携可能
導入実績/事例
- 公式サイト上は100以上の企業で導入されていると謳っています
アーキテクチャ
//公式より
Promerium はユーザとアプリの間に位置します。(名前の通りプロキシですね)
先に説明の通り、Inbound 及び Outbound トラフィックを処理できます。
また、IdP は Promerium 自身 or IDaaS を利用できます
※ 検証以外は Promerium 自身の IdP 利用はあまり無さそうですね
//公式より
本番環境では各コンポーネントは分けてデプロイした方がいいみたいです。
external attack surface
を減らす目的です。
//公式より
続いで認証シーケンスです。分かり易いですね。
ふと気になったのですが、Databroker が死んだら一発アウトなのでしょうか...
概要は見えてきましたので、そろそろ手を動かしていきます。
Let's get started!!
Quick-Startを基にコンテナを起動していきます。検証に必要なファイルは以下の通りです。
- TLS 証明書
- Pomerium 設定ファイル
- docker compose ファイル
まずは mkcert 等で自己証明書を用意します。
mkcert "*.localhost.pomerium.io"
次に Promerium 設定ファイルを公式からコピーします。
cat <<EOF >./config.yaml
# See detailed configuration settings : https://www.pomerium.com/docs/reference/
# this is the domain the identity provider will callback after a user authenticates
authenticate_service_url: https://authenticate.localhost.pomerium.io
####################################################################################
# Certificate settings: https://www.pomerium.com/docs/reference/certificates.html #
# The example below assumes a certificate and key file will be mounted to a volume #
# available to the Docker image. #
####################################################################################
certificate_file: /pomerium/cert.pem
certificate_key_file: /pomerium/privkey.pem
##################################################################################
# Identity provider settings : https://www.pomerium.com/docs/identity-providers/ #
# The keys required in this section vary depending on your IdP. See the #
# appropriate docs for your IdP to configure Pomerium accordingly. #
##################################################################################
idp_provider: google
idp_client_id: REPLACE_ME
idp_client_secret: REPLACE_ME
# Generate 256 bit random keys e.g. `head -c32 /dev/urandom | base64`
cookie_secret: V2JBZk0zWGtsL29UcFUvWjVDWWQ2UHExNXJ0b2VhcDI=
# https://pomerium.com/reference/#routes
routes:
- from: https://verify.localhost.pomerium.io
to: http://verify:8000
policy:
- allow:
or:
- email:
is: user@example.com
pass_identity_headers: true
EOF
最後に compose ファイルも公式からコピーします。
cat <<EOF >./docker-compose.yml
version: "3"
services:
pomerium:
image: pomerium/pomerium:latest
volumes:
## Mount your domain's certificates : https://www.pomerium.com/docs/reference/certificates
- ./_wildcard.localhost.pomerium.io.pem:/pomerium/cert.pem:ro
- ./_wildcard.localhost.pomerium.io-key.pem:/pomerium/privkey.pem:ro
## Mount your config file : https://www.pomerium.com/docs/reference/
- ./config.yaml:/./config.yaml:ro # 適宜修正
ports:
- 443:443
## https://verify.localhost.pomerium.io --> Pomerium --> http://verify
verify:
image: pomerium/verify:latest
expose:
- 8000
EOF
Pomerium 設定ファイルが誤っているようでエラーが出ています。
後日時間を取って追記しようと思います。
また、GitLab の前に置く構成が気になるので、その辺りも触りたいと思います!
参考文献
-
Pomeriumデモ
- Google Cloud に Debian11, Redis + Postgres インスト,IdP は Okta
- 公式サイトの Backgroud ページのリンク集は有益です
- NIST SP 800-207 Zero Trust Architecture
- UK National Cyber Security Centre Zero trust architecture design principles
- Q&A with the writers of NIST SP 800-207