Cloud Service
Identity-Aware Proxy (IAP)
アプリや VM へのアクセスを VPN ではなく利用者の ID とコンテキストで認可する、ゼロトラスト前提の入口制御サービス。AWS Verified Access に相当。
- 1.VPN の代わりに ID で入口を守るゼロトラストのアクセスプロキシ。
- 2.IAM の roles/iap で誰が入れるかを決め、アプリには本人情報を渡す。
- 3.Web アプリも SSH/RDP も TLS トンネルで公開せずに保護できる。
解決する課題
社内アプリや管理用の VM を、ネットワーク境界(VPN・踏み台・ファイアウォール)ではなく「誰がアクセスしているか」で守りたい、というゼロトラストの要求に応えます。
- VPN を張らないと社内アプリに入れない → ブラウザだけで、認証済みユーザーに公開できるようにしたい
- VM に SSH するために踏み台や公開 IP を用意したくない → 外部 IP なしで SSH/RDP したい
- アプリ側に認証コードを実装したくない → 入口(プロキシ)で一括認証し、アプリには本人情報だけ渡したい
- 「正しい人が・正しい状態の端末で」入れているかを確認したい → ID とコンテキスト(端末・場所など)で認可したい
主要概念と用語
- Identity-Aware Proxy(IAP): アプリや VM の手前に立つ Google 管理のリバースプロキシ。認証されていないリクエストを Google ログインへ誘導し、IAM で認可してから背後へ通す
- IAP-secured Web App User(
roles/iap.httpsResourceAccessor): その IAP リソースへ「入れる人」を表す IAM ロール。このロールを誰に付けるかがアクセス制御の中心 - IAP TCP Forwarding(
roles/iap.tunnelResourceAccessor): SSH/RDP など TCP の転送トンネルを通してよい人を表すロール - OAuth クライアント / IAP 同意画面: Web アプリ保護で利用者を認証するための OAuth 構成
- シグネチャ付きヘッダー(署名付き JWT): IAP が背後のアプリへ渡す、改ざん検証可能な本人情報。アプリは
x-goog-iap-jwt-assertionを検証して ID を確認する - コンテキストアウェアアクセス(Access Context Manager のアクセスレベル): ID に加えて端末状態・IP・地域などの条件で許可を絞る仕組み。BeyondCorp Enterprise の中核
- 背後のリソース: 保護対象。HTTP(S) ロードバランサー配下のバックエンド(App Engine・Cloud Run・GKE・Compute Engine)と、トンネル経由の VM
仕様・制限・クォータ
- 大きく 2 系統ある。**Web アプリ保護(HTTP(S) ロードバランサー前提)**と、TCP 転送(SSH/RDP などをトンネル)
- Web アプリ保護では原則として外部 HTTP(S) ロードバランサーが必要。バックエンドが App Engine・Cloud Run・GKE・Compute Engine いずれでも前段の LB で IAP を有効化する
- 認証は Google アカウント / Cloud Identity / Workspace が基本。外部 ID は Identity Platform などと組み合わせて扱う
- IAP は L7 の入口認可であり、アプリ内部のきめ細かい認可(業務ロール)は別途アプリ側で実装する
- TCP 転送は専用の IP レンジからトンネルされるため、そのレンジを許可するファイアウォールが必要
IAP は LB を通る経路を守ります。VM に外部 IP や別経路の公開ポートが残っていると、IAP を通さず直接到達できてしまいます。バックエンドへは IAP(および LB)経由のトラフィックだけを許可するよう、ファイアウォールと公開設定を必ず絞ってください。
内部の仕組み
リクエストはアプリに届く前に IAP で認証・認可されます。
- 未認証のリクエストは Google のログインへリダイレクトされる
- 認証後、IAP は IAM ポリシーを評価し、対象リソースに対する
roles/iap.*を持つユーザーだけを通す - コンテキストアウェアアクセスが設定されていれば、端末状態・IP・地域などのアクセスレベルも満たすか確認する
- 通過したリクエストには、IAP が署名付き JWTなどのヘッダーで本人情報を付与してアプリへ転送する
背後のアプリは、リクエストヘッダーをそのまま信用せず、IAP が付与する**署名付き JWT(x-goog-iap-jwt-assertion)**を Google の公開鍵で検証してから本人として扱うのが安全です。これにより、IAP を迂回した偽装ヘッダーを排除できます。
設計パターン / ベストプラクティス
- VPN/踏み台の置き換え: 社内 Web アプリは IAP + 外部 LB で公開し、VPN なしでブラウザアクセスにする
- 公開 IP なしの SSH/RDP: VM には外部 IP を付けず、IAP TCP 転送で運用アクセスする
- 入口認証 + アプリ内認可の分離: IAP で「入れる人」を絞り、業務上の細かい権限はアプリ側で署名付き JWT の ID を使って判定する
- グループ単位で付与:
roles/iap.*は個人ではなく Google グループへ付け、入退社に強くする - コンテキストで強化: 機微なアプリは ID に加え管理対象端末・社内 IP・地域などのアクセスレベルを必須化する
運用・監視
- Cloud Audit Logs で「誰がいつ IAP 経由でアクセスしたか/拒否されたか」を監査する
- アクセス不可の切り分けは、IAM バインディング(
roles/iap.*)→ アクセスレベル(コンテキスト)→ ファイアウォール/経路の順で確認する - LB のヘルスチェックやバックエンドの公開設定が、IAP の有効化後も成立しているかを点検する
- 端末・地域条件を厳しくしすぎると正規ユーザーが締め出されるため、段階的に締める
コスト
IAP の利用そのものに対する課金は基本的になく、背後で使うロードバランサー・VM・バックエンドサービスなどの通常料金がかかります。なお、コンテキストアウェアアクセス(端末条件などの高度な制御)は BeyondCorp Enterprise の機能として提供され、上位エディションが必要になる場合があります。
| 項目 | 課金 | 備考 |
|---|---|---|
| IAP の認可機能 | 基本的に追加課金なし | 保護対象に乗せる入口制御として提供 |
| 背後のインフラ | 通常料金 | ロードバランサー・VM・LB のデータ処理など |
| コンテキストアウェアアクセス | 上位エディション | BeyondCorp Enterprise の機能として提供される場合がある |
料金体系やエディションの区分は変わり得ます。最新の課金条件は必ず公式ドキュメントと料金ページで確認してください。
セキュリティ
- 最小権限:
roles/iap.httpsResourceAccessor/roles/iap.tunnelResourceAccessorを必要なグループだけに付与する - 迂回経路を塞ぐ: 外部 IP・直接ポートを排除し、バックエンドは IAP(と LB)経由のみ許可する
- ヘッダー検証: アプリは署名付き JWT を検証し、ヘッダーを鵜呑みにしない
- コンテキスト強化: ID に端末・IP・地域条件を重ね、フィッシングで奪われた認証情報だけでは入れないようにする
- 監査: Audit Logs で許可/拒否を継続的に確認する
IAP を有効化したからと安心して、VM に外部 IP を残したままにするのは危険です。IAP を通らない直接経路があると入口認可は無意味になります。公開 IP の撤去とファイアウォールの絞り込みを必ずセットで行ってください。
Well-Architected の観点
- セキュリティ: ネットワーク境界ではなく ID とコンテキストで認可するゼロトラストを実現し、VPN/踏み台という攻撃面を減らす。入口で一括認証し、最小権限のロール付与で「入れる人」を厳密に管理する
- アプリ側は署名付き JWT を検証して多層防御とし、Audit Logs で継続的に可観測性を確保する
試験で問われるポイント
- IAP は VPN なしでアプリ/VM を ID ベースで公開するゼロトラストの入口制御である
- Web アプリ保護には外部 HTTP(S) ロードバランサーが前提。バックエンドは App Engine・Cloud Run・GKE・Compute Engine
- 「入れる人」は IAM の
roles/iap.*で制御する(httpsResourceAccessor/tunnelResourceAccessor) - IAP TCP 転送を使えば、外部 IP なしで VM に SSH/RDP できる
- 端末・IP・地域などの条件は **コンテキストアウェアアクセス(BeyondCorp Enterprise)**で付与する
- アプリは IAP の署名付きヘッダー(JWT)を検証して本人を確認する
- AWS で近いのは Verified Access(VPN レスの ID/コンテキスト型アクセス)
関連サービス・比較
IAP に近い AWS のサービスとして Verified Access があります。どちらも「VPN を張らずに ID とコンテキストでアプリへのアクセスを認可する」発想ですが、構成要素の呼び方が異なります。
| 観点 | IAP(GCP) | AWS Verified Access |
|---|---|---|
| 基本思想 | VPN レスの ID ベースのゼロトラスト入口 | VPN レスの ID ベースのゼロトラスト入口 |
| 保護対象 | LB 配下の Web アプリと、トンネル経由の VM の SSH/RDP | 主に社内 Web アプリへの HTTP アクセス |
| 認可の決め方 | IAM の roles/iap と コンテキストアウェアアクセス | 信頼プロバイダ(ID/端末)に基づくアクセスポリシー |
| 前段の構成 | 外部 HTTP(S) ロードバランサー | エンドポイントと信頼プロバイダ |
| 端末/状態の条件 | BeyondCorp Enterprise のアクセスレベル | デバイス信頼プロバイダと連携 |
IAP は「誰が入口を通れるか」を担い、通った後の「誰が何をできるか」は Cloud IAM やアプリ側の認可が担当します。端末・場所などの条件は **Access Context Manager(BeyondCorp Enterprise)**が提供します。
ハンズオン / CLI例
# 1) Web アプリ保護: 特定ユーザーに「入れる」ロールを付与
# (IAP は前段の外部 HTTP(S) ロードバランサーで有効化済みとする)
gcloud iap web add-iam-policy-binding \
--resource-type=backend-services \
--service=my-backend-service \
--member="group:app-users@example.com" \
--role="roles/iap.httpsResourceAccessor"
# 2) TCP 転送: VM へ SSH してよいユーザーにロールを付与
gcloud projects add-iam-policy-binding my-project \
--member="user:alice@example.com" \
--role="roles/iap.tunnelResourceAccessor"
# 3) 外部 IP なしの VM へ IAP トンネル経由で SSH する
gcloud compute ssh my-vm \
--zone=asia-northeast1-a \
--tunnel-through-iap
Google Cloud Service
Identity-Aware Proxy (IAP)を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
セキュリティ・ID
比較で見る軸
クラウド: Google Cloud / カテゴリ: セキュリティ・ID / 難易度: intermediate
導入後に効く点
IAM の roles/iap で誰が入れるかを決め、アプリには本人情報を渡す。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Google Cloud
- カテゴリ
- セキュリティ・ID
- 難易度
- intermediate
- 関連資格
- —
- 設計柱
- security
判断チェックリスト
- 自社の用途が「セキュリティ・ID / security」に近いか確認する。
- 強みである「VPN の代わりに ID で入口を守るゼロトラストのアクセスプロキシ。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。