特定メンバーのみ Web アプリにアクセスできる仕組みが欲しいと思い、Identity-Aware Proxy による IAM(Google アカウント)認証を試してみました。
IAM でメンバーを統合管理できる、且つ、IAM 上でロールの付与/削除するだけでメンバーへのアクセス制限ができるので、運用コストも掛からないです。
(最近、仕事で記事を書く機会があり、その際、この記事をストックしたままだったことを思い出したので、これを機に公開)
Identity-Aware Proxy とは
- 認証機能
- ユーザとアプリケーション間の通信を仲介する
- 脱 VPN を実現する手段の一つ
- IAM と連携してアクセス制御できる
- 現状、App Engine/Cloud Run/Compute Engine/Kubernetes Engin で公開されたサービスに適用できる
以下は Cloud Run サービスへ適用する際の構成です。※ 公式引用
Identity-Aware Proxy 適用後のイメージ
公開されたサービスにアクセスすると、Google 認証画面が表示され、
ログインを試みると、権限が無いメンバーに限りアクセスエラーになります。
手順
- Cloud Run サービスのデプロイ
- Load Balancer の作成
- Identity-Aware Proxy の設定
- IAM の定義
前提として、以下は完了している想定で進めます。
- 公開するサービス用の静的 IP アドレスの予約
- 公開するサービス用の DNS の設定(A レコードの追加)
Cloud Run サービスのデプロイ
イメージ Push
gcloud config set project PROJECT_ID
gcloud builds submit --tag=asia.gcr.io/<PROJECT_ID>/<IMAGE_NAME>
デプロイ
gcloud run deploy <SERVICE_NAME> \
--image=asia.gcr.io/<PROJECT_ID>/<IMAGE_NAME> \
--port=<PORT> \
--region=asia-northeast1 \
--ingress=internal-and-cloud-load-balancing \
--allow-unauthenticated
- --port=
- デフォルトでは 8080 ポートになるので、適宜変更する。
- --ingress=internal-and-cloud-load-balancing
- Cloud Run サービスへのネットワークアクセス制限の設定です。Load Balancer を経由して、Cloud Run サービスへのアクセスを許可します。
- --allow-unauthenticated
- 未認証アクセスを許可します。これにより、Cloud Run 側でリクエストの認証を行わないようになります。代わりに、Identity-Aware Proxy で認証させます。
Load Balancer の作成
冒頭の構成図の通り、HTTPS Load Balancer を経由させます。
フロントエンドの構成
以上でフロントエンドの構成は「完了」です。
バックエンドの構成
以上で Load Balancer の作成は「完了」です。
証明書のステータスが「ACTIVE」になるまで待つ。
Identity-Aware Proxy の設定
Identity-Aware Proxy のコンソールに遷移すると、作成した Load Balancer のバックエンドが一覧に表示されるので「IAP」の有効化を行います。
IAM の定義
アクセスを許可したいメンバーに対して、「IAP で保護されたウェブアプリ ユーザー」ロールを付与すれば完了です。