Google Cloud で自動パスワード ローテーションを開始する方法
Shobhit Gupta
Solutions Architect
※この投稿は米国時間 2024 年 9 月 24 日に、Google Cloud blog に投稿されたものの抄訳です。
はじめに
パスワード ローテーションは広く認められているベスト プラクティスですが、その実施は面倒で、混乱を招く可能性があります。しかし、自動化することでその負担を軽減できます。このガイドでは、Google Cloud でパスワード ローテーションを自動化するためのベスト プラクティスをいくつかご紹介します。
例として、Google Cloud で Cloud SQL インスタンスのパスワードをローテーションするプロセスを自動化するリファレンス アーキテクチャを示します。この方法は、他のツールやシークレット タイプにも応用できます。
Google Cloud にパスワードを保存する
Google Cloud では、パスワードなどのシークレットの保存にさまざまなソリューションを使用できますが、シークレットを安全に保存するには、Google のフルマネージド プロダクトである Secret Manager を使用することをおすすめします。選択したツールにかかわらず、保存されたパスワードは追加の手段で保護する必要があります。Secret Manager を使用すると、次の方法を使用してシークレットを保護できます。
-
アクセスの制限: シークレットの読み取り / 書き込みは、サービス アカウントを通じて IAM ロールを介してのみ可能とする必要があります。サービス アカウントにロールを付与する際は、最小権限の原則に従う必要があります。
-
暗号化: Secret Manager は、デフォルトで AES-256 を使用して保存中のシークレットを暗号化します。また、顧客管理の暗号鍵(CMEK)を使用して、保存中のシークレットを暗号化することもできます。詳細については、Secret Manager の顧客管理の暗号鍵を有効にするをご覧ください。
-
パスワード ローテーション: セキュリティ インシデントのリスクを軽減するために、Secret Manager に保存されたパスワードは、定期的にローテーションする必要があります。
パスワード ローテーションの理由と方法
パスワードを定期的に変更することで、パスワードが漏洩した場合のリスクを軽減できます。Forrester Research の推定によれば、データ侵害の 80% が権限のある認証情報の漏洩(パスワード、トークン、鍵、証明書など)に関連しています。
パスワードを手動でローテーションすることはおすすめしません。人間がパスワードを処理すると、パスワードの不正使用などの別のリスクが生じる可能性があるためです。また、手動のローテーション プロセスでは、人為的ミスでローテーションが実際には実行されないというリスクも生じます。
より安全な方法は、ワークフローの一環としてパスワード ローテーションを自動化することです。この方法は、アプリケーション、データベース、サードパーティ サービス、SaaS ベンダーなどのパスワードに適用できます。
自動パスワード ローテーション
通常、パスワードのローテーションには、以下の手順が必要となります。
-
基盤となるソフトウェアまたはシステム(アプリケーション、データベース、SaaS など)でパスワードを変更します。
-
Secret Manager を更新して、新しいパスワードを保存します。
-
そのパスワードを使用するアプリケーションを再起動します。これにより、そのアプリケーションが最新のパスワードを使用するようになります。
自動パスワード ローテーションの一般的なアーキテクチャ
次のアーキテクチャは、基盤となるソフトウェアやシステムのパスワードをローテーションする Google Cloud のシステムの一般的な設計例で、先ほど概説したベスト プラクティスに基づいています。
自動パスワード ローテーションは、Cloud Functions と Pub/Sub によってオーケストレートされます。関数の呼び出しは、どのシステムからでも実行できます。
このワークフローを以下に示します。
-
パイプラインまたは Cloud Scheduler が pub/sub トピックにメッセージを送信します。このメッセージには、ローテーションするパスワードに関する情報が含まれます。たとえば、Secret Manager のシークレット ID、データベース インスタンスとユーザー名(データベース パスワードの場合)などです。
-
pub/sub トピックに到着したメッセージによって、メッセージを読み取り、メッセージに含まれる情報を収集する Cloud Run functions の関数がトリガーされます。
-
この関数は、対応するシステムのパスワードを変更します。たとえば、メッセージにデータベース インスタンス、データベース名、ユーザーが含まれる場合、この関数は指定されたデータベース内でそのユーザーのパスワードを変更します。
-
関数は、新しいパスワードを反映するために Secret Manager のパスワードを更新します。関数が更新するシークレット ID は、pub/sub メッセージで指定されています。
-
関数は、別の pub/sub トピックに、パスワードがローテーションされたことを示すメッセージをパブリッシュします。アプリケーションやシステムは、このトピックをサブスクライブすることで、パスワードがローテーションされたことを認識し、自動再起動などのタスクを実行できます。
このアーキテクチャに基づいて Google Cloud で Cloud SQL パスワードのローテーションを自動化する方法については、こちらのガイドでデプロイ例をご覧ください。
次のステップ
Secret Manager の詳細については、こちらのドキュメントをご覧ください。Google Cloud のアプリケーションとリソースを保護するためのその他のベスト プラクティスについては、セキュリティ ベスト プラクティス センターをご覧ください。
-ソリューション アーキテクト Shobhit Gupta