【正解】B
【0からの解説】
①前提知識:AlloyDB for PostgreSQL は Google Cloud のフルマネージドの PostgreSQL 互換データベースです。AlloyDB には「IAM データベース認証」があり、データベース固有のパスワードではなく、Google Cloud の IAM プリンシパル(ユーザーやサービス アカウント)の認証情報でデータベースにログインできます。さらに、AlloyDB 言語コネクタ(Python・Java・Go など向けのライブラリ。Python では
google-cloud-alloydb-connector)を使うと、mTLS による暗号化接続と IAM による接続の認可を自動で処理でき、
enable_iam_auth=True を指定すると「自動 IAM データベース認証」が有効になります。この場合、コネクタがアプリケーションの実行環境のサービス アカウント(アプリケーションのデフォルト認証情報)から OAuth 2.0 アクセス トークンを取得・更新して自動的にログインに使うため、コード内にパスワードを一切持たずに接続できます。
②要件と制約語の整理:(1) Python アプリから AlloyDB に接続、(2) データベース認証に「ユーザー名とパスワード」を使ってはならない。
③正解の理由:B の AlloyDB Python コネクタ+自動 IAM 認証であれば、データベースのユーザーは IAM プリンシパル(サービス アカウント)として作成され、認証は IAM のトークンで行われるため、パスワードの保管・ローテーションが不要になります。アクセス権も IAM ロール(AlloyDB データベース ユーザーのロールなど)で一元管理でき、セキュリティ要件を満たす Google 推奨の方法です。
【誤りの選択肢】
A:Identity-Aware Proxy(IAP)は、Web アプリケーションや VM への SSH / TCP 転送などへのアクセスを ID で制御するサービスで、AlloyDB のデータベース認証を置き換えるものではありません。IAP を経由してもデータベースへのログインには別途データベースの認証(ユーザー名・パスワードなど)が必要です。
C:--ssl-mode=ENCRYPTED_ONLY は通信の暗号化(SSL/TLS)を強制する設定であり、認証方式を変えるものではありません。暗号化されていても、データベースへのログインにはユーザー名とパスワードを使い続けることになるため、要件を満たしません。
D:サービス アカウントの名前と認証情報(サービス アカウント キーなど)をユーザー名・パスワードとして渡すのは、結局「ユーザー名とパスワード」による認証と同じ形で、長期間有効な秘密情報をアプリ内に保持することになります。サービス アカウント キーの配布・保管は Google が推奨しないセキュリティ上のリスクでもあります。IAM 認証では短期間有効なアクセス トークンを使うのが正しく、コネクタの自動 IAM 認証を使えばトークンの管理も不要です。
【参考】
AlloyDB 言語コネクタの概要 | AlloyDB for PostgreSQLAlloyDB 言語コネクタを使用して接続する | AlloyDB for PostgreSQLAlloyDB for PostgreSQL の IAM データベース認証