無料で取得したドメインをCloud Load BalancingのIPに紐づけてIAPを使用してCloud Runにアクセス制限をかける
はじめに
Identity-Aware Proxy(IAP)を使用してCloud Runに許可されたGoogleアカウントだけがアクセスできるように、制限をかける方法と、無料で取得したドメインをCloud Load BalancingのIPに紐づける方法を紹介します。
参考にさせていただいた記事はこちら。
無料ドメイン取得
まずはCloud Load Balancingの設定で必要になるドメインを取得します。当初、無料ドメインを取得するのに、Freenomを使用しようと思っていましたが、どうやらMetaに訴えられて新規ドメイン登録の受け付けを停止しているようです。(2023/07/16現在)Dynamic DO!.jpで無料ドメインを取得します。
登録からドメインの取得方法はこちらを参考にしてください。
Cloud Runサービスの作成
GCPからCloud Runサービスを作成します。
-
既存のコンテナ イメージから 1 つのリビジョンをデプロイする
を選択し、サンプルコンテナでテスト
をクリックしてテスト用のコンテナイメージをデプロイします。
-
サービス名の入力とリージョンの選択を行います。
-
Ingress の制御で「内部」を選択し、「外部 HTTP(S) ロードバランサからのトラフィックを許可する」にチェックを入れます。
これによりCloud Runへの内部アクセスのみを許可するようにします。
-
認証で「認証が必要」を選択して、作成をクリックします。
これにより内部アクセスでも認証が必要になります。
HTTPSロードバランサの設定
IAPを使用するためには、HTTPSロードバランサの設定が必要になります。
-
ロードバランサの作成をクリックし、
アプリケーション ロードバランサ(HTTP/S)
から構成を開始
をクリックします。
-
「グローバル / リージョン」の
グローバル外部アプリケーション ロードバランサ
を選択して、続行
をクリックします。
-
新規のプロジェクトを作成後にロードバランサを作成しようとした際に以下のように表示され、作成できない場合があります。
-
この場合一度、「グローバル / リージョン」の
従来のアプリケーション ロードバランサ
を選択して、続行
をクリックします。
-
Compute Engine APIの有効化する画面が表示されるため
有効にする
をクリックします。
-
Compute Engine APIの有効化後に再度、ロードバランサ作成画面に戻り「グローバル / リージョン」の
グローバル外部アプリケーション ロードバランサ
を選択して、続行
をクリックすることで次に進めます。
-
フロントエンドの構成
-
フロントエンドの構成をクリックし名前を入力します。ついでにロードバランサの名前も入力しておきます。
-
プロトコルを
HTTPS
に変更し、IP addressからIP アドレスを作成
をクリックします。
-
「証明書」から
新しい証明書を作成
をクリックして、証明書を作成します。
名前を入力、作成モードにGoogleマネージドを選択し、ドメイン名に先ほどDynamic DO!.jpで取得したドメインを入力します。
-
完了
をクリックしてフロントエンドの構成を完了します。
バックエンドの構成
-
バックエンドの構成をクリックし、
バックエンドサービスを作成
をクリックします。
-
名前を入力し、バックエンド タイプはCloud Runを使用したいので、
サーバーレス ネットワークエンドポイント グループ
を選択します。
-
「バックエンド」からサーバーレス ネットワークエンドポイント グループを作成します。
-
名前を入力し、リージョンをCloud Runで指定したリージョンと同じにします。
Cloud Run
にチェックを入れて、「サービス」に先ほど作成したCloud Runのサービスを選択します。作成
をクリックして元の画面に戻ります。
-
Cloud CDNは後にIAPを有効に際にエラーになるため、チェックを外しておきます。
-
作成
をクリックしてバックエンドの構成を完了します。
ロードバランサの作成と確認
-
作成
をクリックしてロードバランサの作成を完了します。今回は「ルーティングルール」は設定しません。
DNSのゾーン作成
-
ロードバランサが作成できたら、ロードバランサの詳細画面に移動し、「IP:ポート」からIPアドレスをコピーしておきます。
-
Cloud DNSに移動し、ゾーンの作成をします。APIが有効になっていない場合は有効にしてください。
-
ゾーン名を入力し、ドメイン名にDynamic DO!.jpで取得したドメインを入力します。
「DNSSEC」をオン
にして作成
をクリックします。
-
ゾーンの作成が完了したら、
標準を追加
をクリックしてAレコードとドメインを紐付けます。
-
IPv4アドレス1に先ほどロードバランサで作成されたIPアドレスを入力します。
「IPアドレスの選択」からも選択できます。
-
作成
をクリックしてゾーンの作成を完了します。
IPアドレスの更新
ロードバランサで作成されたIPアドレスをDNSに反映させるために、Dynamic DO!からIPアドレスを更新します。
-
サービス状態ページにアクセスし、
IPアドレス
にロードバランサで作成されたIPアドレスを入力しIPアドレス更新
をクリックします。
IAPの有効化
-
作成したロードバランサで IAP を使用できるようにIAPの有効化をします。APIが有効になっていない場合は有効にしてください。
-
初回はOAuth同意画面の構成が必要なので、
OAuth同意画面の構成
をクリックします。
-
外部
にチェックを入れて作成
をクリックします。
-
アプリ名、ユーザーサポートメールアドレス、デベロッパーの連絡先情報を入力します。
-
他には特に入力せず、スコープ→テストユーザー→概要で進めて構成を完了します。
詳しい設定は以下を参照してください。
https://cloud.google.com/iap/docs/enabling-compute-howto?hl=ja#oauth-configure -
Identity-Aware Proxyの画面に戻り、
IAP
のトグルをオンにして有効にします。
IAMでの権限付与
現在IAPが作成されたアカウントにはCloud Runを実行できる権限がないので権限を付与します。
OAuth認証されたユーザのアクセス許可
- 「Identity-Aware Proxy」にアクセスし、
プリンシパルのを追加
からIAPアクセスを許可したいGoogleアカウントかGoogleグループ等を指定して、IAMロール(IAP-secured Web App User)を付与します。
Cloud Run実行権限を付与
IAPが作成したアカウントがCloud Runを実行できるようにするために、Cloud Run 起動元(Cloud Run Invoker)のロールを付与します。
IAPが作成したサービスアカウントのプリンシパル名は以下のような形式になっています。
service-<プロジェクト番号>@gcp-sa-iap.iam.gserviceaccount.com
-
Cloud Runのコンソールに移動し、作成したhelloサービスを選択して
プリンシパルを追加
から権限を付与します。
-
「新しいプリンシパル」に先ほどのIAPサービスアカウントのプリンシパル名を入力します。
※完全なプリンシパル名を入力しないと選択肢に出てこないので注意してください。
ロールにCloud Run 起動元
を選択して保存
をクリックします。
動作確認
-
ブラウザから
https://<ドメイン名>
にアクセスすると、Google アカウントのログイン画面が表示されるようになります。
IAP-secured Web App User ロールを付与したユーザーでログインします。
-
ログイン後にデモコンテナの画面が表示されたら成功です。
最後に
Identity-Aware Proxy(IAP)を使用してCloud Runに制限をかける方法と、無料で取得したドメインをCloud Load BalancingのIPに紐づける方法を紹介しました。
誤っている点や、もっと良い方法があればご指摘いただけると幸いです。
Discussion