はじめのProfessional Cloud Developer認定取得講座⑥Cloud RunからプライベートIPのCloud SQLへ安全に接続するガイド、TTFB(Time To First Byte)を極限まで短縮するインフラ設計ガイド、OAuth 2.0 徹底活用ガイドを説明します!

クラウド

Google Cloud の Professional Cloud Developer 認定取得を目指す中で、「セキュアな接続設計」「パフォーマンス最適化」「認証・認可の正しい実装」は避けて通れない重要テーマです。

本記事では、Cloud Run からプライベート IP の Cloud SQL へ安全に接続する方法、TTFB(Time To First Byte)を極限まで短縮するインフラ設計、そして OAuth 2.0 の実践的な活用方法について、実務視点でわかりやすく解説します。

単なる試験対策にとどまらず、実際のシステム設計・開発に直結する知識として整理しているため、これからクラウドネイティブなアプリケーション開発を行う方にも役立つ内容です。

是非、最後までご覧いただけると嬉しいです。

Cloud RunからプライベートIPのCloud SQLへ安全に接続するガイド

Google Cloudを利用する際、データベース(Cloud SQL)をインターネットから完全に分離し、内部ネットワーク内のみでアクセス可能にすることは、データ保護の観点から非常に重要です。一方、Cloud Runは本来パブリックなインフラストラクチャ上で動作するため、これらを安全に繋ぐには適切なネットワーク設計が必要になります。

1. 接続方式の選択肢

Cloud RunからプライベートなCloud SQLにアクセスする方法は主に以下の3つがあります。

  1. ダイレクト VPC エグレス (推奨):Cloud Runインスタンスを直接VPCネットワークに接続します。設定が簡素でパフォーマンスに優れています。
  2. サーバーレス VPC アクセス コネクタ:以前からの標準的な方法ですが、コネクタ用のインスタンス管理が必要になります。
  3. Private Service Connect (PSC):異なるVPC間やプロジェクト間でも、エンドポイント(内部IP)を介してサービスを公開・利用できる最新の仕組みです。

2. Private Service Connect (PSC) の構成

最新のベストプラクティスの一つが、Private Service Connect (PSC) の利用です。これにより、VPC ネットワーク ピアリングを使用せずに、プライベートな接続を確立できます。

PSCを利用するメリット

  • IP空間の衝突回避:ピアリングと異なり、ネットワーク間でIPアドレスが重複していても接続可能です。
  • 管理の分離:データベース側とアプリケーション側の管理責任を明確に分離できます。
  • 柔軟性:異なるプロジェクトや組織にあるCloud SQLインスタンスに対しても、内部IP(エンドポイント)経由で安全にアクセスできます。

設定の概要

  1. Cloud SQL側:インスタンス作成時に「Private Service Connect」を有効にし、許可されたプロジェクトからの接続を受け入れます。
  2. ネットワーク側:VPC内にPSC用のエンドポイント(転送ルール)を作成します。
  3. Cloud Run側:作成したエンドポイントを介して通信するように設定します。

3. Cloud SQL 言語コネクタの活用

ネットワーク経路を確保した後は、アプリケーションコードからどのように接続するかが重要です。Googleが提供するCloud SQL 言語コネクタ(Cloud SQL Connectors)の使用が強く推奨されます。

なぜコネクタを使うのか?

  • IAMベースの認証:データベースのパスワードを管理する代わりに、IAM権限を利用して接続を認可できます。
  • 自動暗号化:通信は自動的にTLSで暗号化されます。
  • 簡素な実装:Java、Python、Go、Node.js 用のライブラリが提供されており、複雑な証明書管理が不要になります。

4. ステップ・バイ・ステップ:接続の実装手順

以下に、Cloud RunからプライベートなCloud SQLへ接続するための主要なステップをまとめます。

ステップ1:Cloud SQLインスタンスの準備

Cloud SQLインスタンスを作成する際、「接続」設定でパブリックIPをオフにし、プライベートIP(またはPSC)を有効にします。

ステップ2:Cloud RunのVPC設定

Cloud Runサービスをデプロイする際、「ネットワーク」タブで以下の設定を行います。

  • ネットワークへの送信トラフィック:「VPC に直接トラフィックを送信する」を選択。
  • ダイレクト VPC エグレス:対象のVPCとサブネットを指定します。これにより、Cloud RunがVPC内のリソースに直接アクセスできるようになります。

ステップ3:IAM権限の付与

Cloud Runの実行サービスアカウントに対し、以下のロールを付与します。

  • roles/cloudsql.client(Cloud SQL クライアント)
  • roles/cloudsql.instanceUseer(Cloud SQL インスタント利用者)

ステップ4:アプリケーションの実装

例えばPythonの場合、cloud-sql-python-connector ライブラリを使用して以下のように接続します。

<Python>

from google.cloud.sql.connector import Connector
import sqlalchemy

# コネクタの初期化
connector = Connector()

def getconn():
    conn = connector.connect(
        "PROJECT:REGION:INSTANCE", # インスタンス接続名
        "pg8000",                  # ドライバー名
        user="my-user",
        db="my-db",
        enable_iam_auth=True,      # IAM認証を有効化
        ip_type="private"          # プライベートIPを指定
    )
    return conn

# SQLAlchemyエンジンの作成
pool = sqlalchemy.create_engine(
    "postgresql+pg8000://",
    creator=getconn,
)

Cloud RunからプライベートIPのCloud SQLへ安全に接続するガイドのまとめ

Cloud RunからプライベートIPのCloud SQLへ接続する際は、「ダイレクト VPC エグレス」でネットワークの導線を確保し、「Cloud SQL 言語コネクタ」でアプリケーションレイヤーの安全性を担保するのが現在の王道です。さらに、複雑なネットワーク要件がある場合や、将来的な拡張性を重視する場合は、Private Service Connect (PSC) の導入を検討してください。これにより、セキュアで管理しやすいモダンなサーバーレスアーキテクチャを実現できます。

TTFB(Time To First Byte)を極限まで短縮するインフラ設計ガイド

Webサービスの体感速度を左右する重要な指標「TTFB(Time To First Byte)」は、単なるサーバー性能だけでは改善できません。TTFBとは、ユーザーがリクエストを送ってから最初の1バイトを受信するまでの時間を指します。ネットワーク・プロトコル・バックエンド処理といった複数のレイヤーを横断した最適化が求められます。
本記事では、Google Cloudの強力なインフラを活用し、TTFBを極限まで短縮するための実践的な設計手法を解説します。単なる理論ではなく、「なぜ速くなるのか」まで踏み込んで理解できる構成となっています。

1. TTFBを遅延させる「真犯人」とは?

TTFBを悪化させる要因は、大きく分けて3つあります。

  • ネットワークの距離:ユーザーとサーバー間の物理的な距離。
  • プロトコルのオーバーヘッド:TCP接続やTLS(SSL)ハンドシェイクにかかる往復時間(RTT)。
  • バックエンドの処理遅延:サーバーの負荷増大によるレスポンス待ち。

これらを「Googleの物量と技術」で力技かつスマートに解決するのが、今回の設計のキモです。

2. ネットワークの基盤:Premium Tierの選択

まず、Google Cloudの「Premium Tier(プレミアムティア)」を選択することが大前提となります。

機能Standard TierPremium Tier (推奨)
経路公衆インターネットを長く通るGoogleのグローバル専用ネットワークを通る
入口 (PoP)バックエンドに近い場所でネットワークに入るユーザーに最も近い場所でネットワークに入る
安定性混雑の影響を受けやすい極めて低遅延で安定

Premium Tierでは、世界中に張り巡らされたGoogleの光ファイバー網を利用します。ユーザーのトラフィックは、最寄りのエッジ地点(PoP)から即座にGoogleネットワークへ引き込まれるため、公衆インターネットの不安定な揺らぎを最小限に抑え、TTFBの基礎体力を底上げできます。

3. HTTP(S) LBによるプロトコルレイヤーの最適化

外部アプリケーション負荷分散(HTTP(S) LB)は、単なる「交通整理」ではありません。Google Front End (GFE) と呼ばれる世界規模のプロキシ層が、TTFB改善において決定的な役割を果たします。

TLS終端の高速化

通常、TLSハンドシェイクはサーバーとの間で行われますが、HTTP(S) LBを使うと、ユーザーに物理的に近いエッジ地点でTLSを終端します。

  • メリット:遠くのサーバーと何度も往復(RTT)する必要がなくなり、暗号化接続が爆速で完了します。

HTTP/3 (QUIC) の活用

Google Cloudの負荷分散器は、最新のプロトコルであるHTTP/3をサポートしています。

  • UDPベースのQUICプロトコルにより、HTTP/2で問題となっていたTCPレベルのHOL(Head-of-Line)ブロッキングが解消され、パケットロスが発生しても他のストリームをブロックしません。また、再接続時には0-RTTによる接続再開が可能なため、初回接続後の体験が大幅に向上します。これにより、モバイルネットワークなどの不安定な環境でもTTFBが安定します。

4. MIG(マネージドインスタンスグループ)による処理の安定化

ネットワークが速くても、バックエンドのサーバーがいっぱいであれば意味がありません。ここでMIGの出番です。MIGとは、複数の仮想マシンをグループとして管理し、自動でスケールや復旧を行うことで安定した処理能力を提供する仕組みです。

オートスケーリングで「待ち」をなくす

CPU利用率や負荷分散器のキャパシティに基づき、インスタンスを自動で増減させます。急激なスパイクが発生しても、新しいリソースが即座に投入されるため、リクエストがキューに溜まってTTFBが悪化するのを防ぎます。

自己修復(セルフヒーリング)

特定のインスタンスが「重く」なったり、ハングアップしたりした場合、ヘルスチェックが異常を検知してそのインスタンスを自動で再作成します。

  • TTFBへの影響:応答の遅い「ハズレ」インスタンスにリクエストが割り振られる確率を最小化し、テールレイテンシ(遅い応答の割合)を抑え込みます。

5. 理論を形に:最強のTTFB安定化アーキテクチャ

これらを組み合わせると、以下のようなリクエストフローが完成します。

  1. ユーザー:最寄りのGoogleエッジ(Premium Tier)に接続。
  2. エッジ(GFE):ユーザーの目と鼻の先でTLSハンドシェイクを完了。HTTP/3でさらに高速化。
  3. Google内部:高速な専用網を通って、最適なリージョンのMIGへリクエストを転送。
  4. MIG:常にヘルスチェックで健康状態が保たれたサーバー群が、オートスケーリングで余裕を持ってリクエストを処理。
  5. 結果:物理距離、プロトコル、サーバー負荷のすべてが最適化され、極めて低く安定したTTFBが実現。

TTFB(Time To First Byte)を極限まで短縮するインフラ設計ガイドのまとめ

TTFBの最適化は、何か一つの魔法の設定で決まるものではありません。

  1. Premium Tier で「道」を整え、
  2. HTTP(S) LB で「手続き(TLS/HTTP)」を効率化し、
  3. MIG で「処理能力」を担保する。

この三位一体の設計こそが、Google Cloudにおけるモダンなインフラ構築の正解と言えるでしょう。ユーザーに「このサイト、速いな」と感じさせる第一歩は、この低レイヤーの積み重ねから始まります。

OAuth 2.0 徹底活用ガイド

「ユーザーのGoogle Driveにあるファイルを読み込みたい」「ユーザーの権限でCloud Storageにバックアップを保存したい」 こうした要件を満たす際、ユーザーからパスワードを直接預かるのはセキュリティ上、絶対にNGです。そこで使われるのがOAuth 2.0という「合鍵(アクセストークン)」を発行する仕組みです。

1. OAuth 2.0 の基本メカニズム

GoogleのOAuth 2.0は、アプリケーションがユーザーの同意を得て、ユーザーに代わってGoogleのサービスにアクセスするための業界標準プロトコルです。

基本的なアクセスフロー(Webサーバーアプリの場合)

  1. 認可の開始:アプリはユーザーをGoogleのログイン画面(認可エンドポイント)にリダイレクトします。この際、「どの権限(スコープ)が欲しいか」を伝えます。
  2. ユーザーの同意:ユーザーはGoogleの画面でログインし、アプリが求める権限を許可するかどうかを選択します。
  3. 認可コードの発行:同意すると、Googleはアプリに「認可コード」を発行し、アプリにリダイレクトして戻します。
  4. トークンの取得:アプリは認可コードと自身の「クライアント秘密鍵」をGoogleのトークンエンドポイントに送り、引き換えに「アクセストークン」と(必要に応じて)「リフレッシュトークン」を取得します。
  5. APIの呼び出し:アプリはこのアクセストークンをHTTPヘッダーに含めることで、ユーザーに代わってAPIを呼び出せるようになります。
💡 Note: アクセストークンには有効期限(通常1時間)があります。期限が切れた後は、リフレッシュトークンを使ってユーザーの再ログインなしで新しいアクセストークンを取得するのが一般的です。

2. 「スコープ(Scopes)」による権限の最小化

OAuth 2.0を利用する上で最も重要な概念の一つがスコープです。スコープとは、「アプリがユーザーのデータに対して何をしてよいか」を定義するアクセス権の範囲のことです。

スコープ選択の鉄則:最小権限の原則

アプリがハッキングされた際の被害を最小限に抑えるため、アプリの動作に必要な最小限のスコープのみを要求するのが鉄則です。

  • 広範なスコープの例:https://www.googleapis.com/auth/cloud-platform (Google Cloudの全サービスに対する管理権限。非常に強力なため、必要な場合を除き避けるべきです)
  • 限定的なスコープの例:https://www.googleapis.com/auth/devstorage.read_only (Cloud Storageのデータを読み取るだけの権限)

ユーザーは、アプリが過剰な権限を求めていると不信感を抱き、利用をやめてしまう可能性があります。ドキュメントを確認し、適切なスコープを選択しましょう。

3. クロスクライアントIDによるシームレスな体験

現代のアプリケーションは、WebだけでなくiOSやAndroidなど、複数のプラットフォームで提供されるのが一般的です。ここで役立つのがクロスクライアントID(Cross-Client Identity)の仕組みです。

通常、プラットフォームごとに異なるOAuth 2.0 クライアントID(Web用、Android用、iOS用など)を作成します。しかし、これらが「同じ論理アプリ」に属していることをGoogleに認識させることで、以下のようなメリットが得られます。

  • シングルサインオンの実現:ユーザーがAndroidアプリで一度ログインして同意すれば、同じアプリのWeb版にアクセスした際に、再度同じ権限の同意画面を出さずに済みます。
  • バックエンドでの安全な検証:モバイルアプリで取得したIDトークンを自社のバックエンドサーバーに送り、サーバー側でGoogleのAPIを叩いて「このユーザーは本当に本人か」を安全に検証できます。

同一のGoogle Cloudプロジェクト内で複数のクライアントIDを作成し、WebアプリのクライアントIDをモバイルアプリの「許可されたオーディエンス(authorized_audiences)」として明示的に設定することで、これらがリンクされます。これにより、モバイルアプリが取得したIDトークンをバックエンドサーバーが安全に検証できるようになります。

4. 信頼を維持するためのポリシーと検証

Google IDを扱う以上、Googleが定めるOAuth 2.0 ポリシーを遵守しなければなりません。これらはユーザーのプライバシーとデータを保護するために厳格に運用されています。

主な遵守事項

  • 正確なアプリ情報の提供:同意画面に表示されるアプリ名やロゴは、実際のサービスと一致していなければなりません。
  • プライバシーポリシーの明記:ユーザーのデータをどのように収集・利用・保護するのかを明記したプライバシーポリシーを公開し、同意画面からリンクする必要があります。
  • アプリの検証(Verification):慎重なスコープ(Sensitive Scopes)や制限付きスコープ(Restricted Scopes)を使用する場合、Googleによる審査(検証プロセス)を通過するまで、検証が完了するまでは、テストユーザーとして明示的に登録した100名までしか利用できません。また、未検証のアプリにアクセスしたユーザーには「このアプリはGoogleで確認されていません」という警告画面が表示されます。

OAuth 2.0 徹底活用ガイドのまとめ

ユーザーのGoogle IDを使ってGoogle Cloud APIを利用する設計は、ユーザーの手間を減らし、強力なエコシステムをアプリに組み込む素晴らしい方法です。実装の際は、「認可コードフロー」で安全にトークンを扱い、「最小限のスコープ」でユーザーの信頼を勝ち取り、「クロスクライアントID」でマルチプラットフォームの体験を向上させましょう。

まとめ

今回は、下記3点について説明しました。

  1. Cloud RunからプライベートIPのCloud SQLへ安全に接続するガイド
  2. TTFB(Time To First Byte)を極限まで短縮するインフラ設計ガイド
  3. OAuth 2.0 徹底活用ガイド

本記事では、Professional Cloud Developer として押さえておくべき「セキュリティ」「パフォーマンス」「認証」の3つの重要テーマについて解説しました。Cloud Run と Cloud SQL の安全な接続では、ネットワークとアプリケーションの両レイヤーでの対策が不可欠であり、TTFB最適化ではインフラ全体を俯瞰した設計力が求められます。そして OAuth 2.0 の活用においては、ユーザー体験とセキュリティのバランスを意識した実装が重要です。

これらは単なる試験対策の知識ではなく、実務で高品質なクラウドアプリケーションを構築するための本質的なスキルです。各要素を個別に理解するだけでなく、相互に関連付けて設計できるかどうかが、Professional Cloud Developer としての大きな差になります。本記事の内容をベースに、ぜひ実践的なアーキテクチャ設計へとつなげてみてください。

これからも、Macのシステムエンジニアとして、日々、習得した知識や経験を発信していきますので、是非、ブックマーク登録してくれると嬉しいです!

それでは、次回のブログで!

タイトルとURLをコピーしました