LoginSignup
30
23

More than 3 years have passed since last update.

【初心者】GCP Identity-Aware Proxy (IAP), Access Context Managerを使ってみる (WEBサーバへのアクセス制限)

Posted at

目的

  • Google の提唱する BeyondCorp って何かな?と思っていたが、BeyondCorpはいろんな技術の組み合わせであり、Identity-Aware Proxy (IAP)やAccess Context Managerがその中の主要な構成要素とのこと。それらがどんなものか簡単に確認する。

GCP Identity-Aware Proxy (IAP) とは(自分の理解)

  • 既存のWEBサービスに対して認証機能を挟むことができる仕組み。
  • GCPのサービス(GCE, GAE, GKE)で作られているWEBサービスであれば、その前にIAPをそのまま追加できる。オンプレや他のクラウドで提供されているWEBサービスの場合、IAPコネクターというコンポーネントを追加することにより対応可能になる。

GCP Access Context Manager とは(自分の理解)

  • GCPリソースへのアクセスをエンドポイント(=アクセス元のPCやスマホ)のIPアドレスやOS等を条件として指定し、アクセスを制御できる仕組み。

やったこと

  • 「PC - インターネット - LB - GCEインスタンス(nginx)」という構成を作り、インターネットから普通にGCPインスタンスにWEBアクセスができるようにする。(インターネット上からアクセス制限なしでWEBアクセスできる状態)
  • LBの前にIAPを挟む設定を追加する。これにより、WEBサーバへのアクセス時に認証が行われるようにする。
  • IAPにAccess Context Managerの設定を追加する。これにより認証の前にSRCIP制限がかかるようにする。

構成図

構成図.png

手順

事前準備

プロジェクトの作成

  • プロジェクトを作成する。なお、Access Context Managerを使うには、組織に所属しているプロジェクトである必要がある。

iap01c.png

GCEインスタンスの作成

  • CentOS8のインスタンス「mksamba-nginx」を作成し、nginxをインストールしておく。

iap02b.png

# yum install nginx
# systemctl enable nginx
# systemctl start nginx

インスタンスグループの作成

  • 「非マネージドインスタンスグループ」として「mksamba-instancegroup」を作成し、インスタンス「mksamba-nginx」を所属させる。

iap03b.png

ロードバランサ(HTTPS負荷分散)の作成

  • ロードバランサ(HTTPS負荷分散)を作成する。
    • backend: 「mksamba-backend」を作成し、インスタンスグループ「mksamba-instancegroup」を指定する。
    • frontend: 「mksamba-frontend」を作成する。
      • プロトコル: https
      • IPアドレス: 「IPアドレスを作成」で固定IPを取得
      • 証明書:「新しい証明書の作成」- 「Google管理の証明書を作成する」で証明書を取得
  • 今回はLBに紐づけるホスト名をmksambalb.xxx.com(仮名)とし、AWS Route53の設定にて、上記手順で取得した固定IPをそのmksambalb.xxx.comのAレコードとして登録しておいた。取得した固定IPとAレコードの登録内容が一致していれば証明書が発行される。

iap04a.png

iap06a.png

  • ファイアウォールルールを追加する。(LB-GCEインスタンス間の通信を許可)
    • Src: 35.191.0.0/16, 130.211.0.0/22 (LoadBalancerのSRCIP)
    • Dst: インスタンス
    • Port: 80/tcp

iap07b.png

IAP設定前の動作確認

  • LBに紐づけたURLにアクセスして、普通にnginxの画面が表示されることを確認する。

iap08a.png

IAP設定の追加

  • IAMと管理 -> Idendity-Aware Proxyを選択し、IAPの画面へ移動する。
  • IAPを有効化する。

iap09a.png

  • IAPの画面にて、まずOAuth同意画面を作成する。
    • User Type: 外部 (Googleアカウントならどんなアカウントでも認証に使える設定)
    • アプリケーション名: mksamba-nginx

iap10a.png
iap11a.png

  • IAPの画面に戻り、バックエンドサービス「mksamba-backend」(先に作成したLB+GCEインスタンス)に対し、IAPのスイッチをONにして有効化する。

iap12a.png

  • mksamba-backend を選択し、「新しいメンバー」として適当なGoogleアカウント(例: xxxx@gmail.com)、「ロール」として「Cloud IAP - IAP-secured Web App User」を追加する。

iap14a.png

IAPの動作確認

  • IAPの設定後、再度LBのURLにアクセスすると、nginxの画面ではなく、googleの認証画面が表示される。

iap15a.png

  • 「IAP-secured Web App User」 として登録したgoogleアカウントのID/Passを入力し認証をパスすると、nginxの画面が表示される。

iap08a.png

  • 登録されてないgoogleアカウントのID/Passを入力すると、「You don't have Access」のエラー画面となる。

iap16a.png

Access Context Managerの設定

  • セキュリティ -> Access Context Manager の画面を選択する。(プロジェクトではなく組織を選択する必要がある)。

iap18b.png

  • AccessControlLevel(アクセスを制限するルールみたいなもの)を新規作成する。今回は一番シンプルなルールであるSRCIP制限を設定する。(特定のCIDRからのアクセスのみ許可する設定)

iap19b.png

  • IAPの設定画面で、認証時の条件を追加する。前ステップのIAPの検証では「IAP-secured Web App User」としてGoogleアカウントを設定するのみだったが、今回はそこに「アクセスレベル」の設定を加える。

iap21a.png

Access Context Managerの動作確認

  • Access Context Managerの設定後、再度LBのURLにアクセスすると、設定したSRCIPからのアクセスの場合はGoogleの認証画面が表示される。また、設定したSRCIP以外からのアクセスの場合は接続エラー画面(認証失敗時と同じ)が表示される。

所感

  • 初心者として以下の点につまづいた。
    • GCEがIAPに対応している、ということで、最初、単体のインスタンスをWEBサーバにしたが、IAP(https)の設定対象(リソース)として出てこなかった。LBとインスタンスグループが必要なことが後から分かった。
    • Access Context Manager を使用する場合、組織が必須ということに気づかなかった。組織なしのプロジェクトで作業していてその点で行き詰まり、組織配下のプロジェクトで作業をやり直した。
  • まだあまりBeyondなかっこいい感じになってないので、他の構成要素についても勉強していきたい。
30
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
23