⚔️

IAPを利用してCloud Run ユーザー認証を行う。

2023/12/22に公開

はじめに

この記事は、
 Cloud Run user auth for internal apps
という動画を参考に、『実際にやってみた』という記事になります。

この記事で実施する事。

  • Cloud Run Service をデプロイする。
  • Cloud Run Service の統合機能を使用して、ロードバランサを設定する。
  • Identity Aware Proxy (IAP) を設定する。
  • 特定のユーザーやグループに対して、 IAP を経由するように設定する。
  • Cloud Run Service サービスへのアクセスに IAP を利用するように設定する。
  • 匿名ユーザーや未認証によるアクセスを拒否する。
  • カスタムドメインのみから、Cloud Run Service を実行できるかを確認する。

以下はその必要となる構成になります。
030-user-auth-for-internal-apps-architecture.png

Cloud Run Service をデプロイする。

get-current-time を、git clone してください。

git clone https://github.com/tomo8332/gcp-sample.git

git cloneの実行が完了したら、cdコマンドを使って、対象のディレクトリ階層へ移動。

cd gcp-sample/cloud-run/golang/get-current-time

README.md を読んで、Cloud Run サービスのデプロイを行なってください。

Cloud Run Service の統合機能を使用して、ロードバランサを設定する。

『カスタムドメインを管理』 をクリック。
001-manage-custom-domains.png

マッピングを追加 をクリック。
002-add-mapping.png

マッピングする Cloud Run Service を選択。
003-select-the-sercice-to-be-mapped.png

カスタムドメイン の統合機能に、Google Cloud Load Balancing を選択。

統合機能を使用すると、CDN 有効化などの
既存のロードバランサの構成の一部が
上書きされる可能性があるので注意が必要。
004-select-load-balancer-for-domain-mapping.png

ドメインを入力して、SUBMIT をクリック、統合とリソースが作成されるまで待機。
005-add-domain-to-cloud-run.png

統合とリソースが作成されると、『欠損』状態のドメインマッピングが構成される。
006-deficient-integration-functions.png

『欠損』状態を解除する為、DNSレコードを選択して、データ(IPアドレス)を取得。
007-retrieve-data-from-dns-record.png

お名前.com などを使用して、
ドメインのDNS設定を行なってください。

TTL(Time To Live)は、DNSレコードのキャッシュ(一時保存)期間を表します。
具体的には、DNS情報が他のサーバーやユーザーのシステムに
どのくらいの時間キャッシュされるかを秒単位で指定します。

TTLが短いと、DNSレコードの変更が早く反映されますが、
サーバーへの負荷が増える可能性があります。

逆にTTLが長いと、負荷は減りますが、
DNSレコードの変更が反映されるまで時間がかかります。
008-register-dns-record-to-domain-name-server.png

DNS設定が完了すると、『保留中』状態に変わるので、
SSL証明書がデプロイされるまで待機。
009-pending-integration-functions.png

SSL証明書がデプロイされ、『有効』状態となれば、ドメインマッピングの設定は完了
010-enabled-integration-functions.png

Identity Aware Proxy (IAP) を設定する。

ユーザー認証については、Identity Aware Proxy (IAP) を利用します。
過去投稿の別記事でも同様の内容に触れていますので、
まずは、Identity Aware Proxy (IAP) のみに触れたい場合、
こちらのリンクへの記事を参照してください。

セキュリティ > Identity-Aware Proxy を選択。
011-left-menu-security-iap.png

Identity-Aware Proxy API を有効化。
012-enable-iap-api.png

APIが有効化されたら、Identity-Aware Proxy へ移動してください。
013-enable-iap-api-go.png

IAPへ移動すると、ログイン画面でユーザーに表示される
OAuth同意画面の設定を促されますので、設定を続けてください。
014-oath-consent-configuration.png

利用するユーザータイプに応じて、選択を切り替える。
015-external-or-internal.png

OAuthの同意画面で、

  • 同意を求めるアプリ名
  • ユーザーが同意に関して問い合わせるためのメールアドレス
  • デベロッパーの連絡先情報
    をそれぞれ入力する。

016-oauth-consent-screen-settings1.png
017-oauth-consent-screen-settings2.png

ただし、一度設定してしまうと、サポートに問い合わせるか、
プロジェクトそのものを消さない限り消せなくなっている為、
操作は慎重に行う必要があります。


OAuthの同意画面の設定が終えたら、
Identity-Aware Proxy の設定画面に戻ってください。

この時、バックエンドサービスの Cloud Run は、
エラー』ステータスを返していますが、
IAPを有効にすることで解消されます。

018-iap-resource-enable.png
019-iap-resource-enable-check.png

IAPが有効されたら、カスタムドメインを再リクエストしてください。
ログイン(認証)画面が表示されて、ログイン後も
You don't have access』が表示されたら成功です。

ここで注意しなければならない点として、admin 権限を持ったアカウントで
IAPで保護されているリソースへのアクセスはできないと言うことです。
020-dont-have-access-message.png

特定のユーザーやグループに対して、 IAP を経由するように設定する。

Identity Aware Proxy (IAP) の設定画面に戻って、
アクセスを許可したいバックエンドサービス(Cloud Run)を選択。
画面右に『プリンシパルを追加』が表示されるのでクリック。
021-iap-check-principal-add.png

アクセスを許可したいユーザーのアドレスとロールを選択して保存をクリック。

新しいプリンシパル:ユーザーのアドレス
ロール:IAP-secured Web App User

ロール IAP-secured Web App User を付与することで、
特定のユーザーグループや個々のユーザーは、
IAPで保護されたサービスに対して、
IAPを経由してアクセスする事が許可された状態になります。
022-add-principals-and-set-roles.png

Cloud Run Service サービスへのアクセスに IAP を利用するように設定する。

この設定が行われていない状態では、
IAPを経由したすべてのユーザーやグループは、
Cloud Runサービスにアクセスができてしまう状態です。

もう少し、比喩的に説明すると、IAPを経由した状態は、
街に入るための通行許可証を門番からもらった状態だと言えます。

さらにその先の城に入る為の効果を通行許可証は
持っていないはずが、Cloud Runサービス(城)に
入る為の制約がない為、通行許可証があるだけで、
城に入城できてしまうというおかしな状態となります。

そこで、Cloud Runサービス(城)に入場する為に、
そのIAP(通行許可証)に対して、入場を許可する
承認を行うのが、このステップになります。


Cloud Run へ移動して、IAPを利用する為の権限を付与する為の
サービスを選択した状態で、『情報パネルを表示』をクリック。
023-cloud-run-information-panel-display.png

『プリンシパルを追加』をクリックして、Cloud Run Service への
アクセスに、IAPを利用するように設定を行なってください。
024-cloud-run-principal-add.png

Cloud Runサービスへのアクセスに、IAPを利用する為の設定は、
下記のプリンシパルに対して、Cloud Run 起動元 の権限を付与します。

プリンシパル:service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
ロール:Cloud Run 起動元

PROJECT-NUMBER は、対象プロジェクトの番号を設定してください。

プロジェクト番号は、Google Cloud コンソールのTOPで確認ができます。
025-iap-project-number.png

匿名ユーザーや未認証によるアクセスを拒否する。

匿名ユーザーや未認証によるアクセスを拒否したい
Cloud Runサービスの詳細画面を開いて、
セキュリティ』から『認証が必要』を選択して保存。
026-cloud-run-security-update.png

続けて、『ネットワーキング』から『内部』を選択。
外部アプリケーションロードバランサからのトラフィックを許可する
にチェックを入れて、保存。
027-cloud-run-ingress-update.png

Cloud RunサービスのTOPに戻って、下記の設定が表示されていればOK。
028-cloud-run-access-authentication.png

カスタムドメインのみから、Cloud Run Service を実行できるかを確認する。

すべての作業及び設定が終えましたら、
Cloud Run Service の実行を行なってみてください。

この時、Cloud Run をデプロイした際に生成されたURLでのアクセスは、
どのユーザーアカウントからもアクセスができない状態であること、
また、カスタムドメイン を利用する場合、 Identity Aware Proxy (IAP)
経由するユーザーアカウントであれば、Cloud Run Serviceの実行が
行えることが確認できれば、作業は完了です。
029-cloud-run-request-call.png

終わりに

今回の記事は、動画を視聴しまして、
実際に『手を動かしてみた』という内容でまとめました。

Identity Aware Proxy (IAP) については、
以前にも別記事で触れていましたが、
再度、学習することで、前回の学びにおいて、
少し理解が間違えている部分があることに
気づくことができました。

Identity Aware Proxy (IAP) について
少し勘違いした理解を持たれていましたら、
この記事を参考にしていただけると幸いです。

この記事が読まれている方にとって、
参考になる記事となりましたら、『いいね』を
付けていただけますと、励みになりますので、
よろしくお願いします。

Discussion