Cloud Functions の安全性を強化する鍵となるもの、それはシークレットです
Google Cloud Japan Team
※この投稿は米国時間 2021 年 8 月 25 日に、Google Cloud blog に投稿されたものの抄訳です。
Google Cloud Functions は、シンプルかつ直感的なデベロッパー エクスペリエンスにより、Google Cloud、Firebase、Google アシスタント、または任意のウェブ、モバイル、バックエンド アプリケーションからコードを実行します。多くの場合、そのコードは、アップストリームの API やサービスに対する認証またはその呼び出しのために、API キー、パスワード、証明書などのシークレットを必要とします。
Google Secret Manager は、このようなシークレットを管理するフルマネージドの安全で便利なストレージ システムですが、デベロッパーはこれまで Cloud Functions でのシークレットの管理には環境変数やファイルシステムを利用してきました。その主な理由は、これまでは Secret Manager と統合するにはデベロッパーがカスタムコードを記述する必要があったことです。このたび、お客様からのフィードバックにお応えして、Cloud Functions と Secret Manager のネイティブ統合を発表いたします。
このネイティブ統合には、次のような重要なメリットが数多くあります。
コード変更が不要。Cloud Functions でソース アップロードにバンドルされた環境変数やファイルを介してすでにシークレットを使用している場合、必要なのはデプロイ時にフラグを追加することだけです。Cloud Functions サービスが実行時にシークレットを解決して挿入するため、平文値はプロセス内でのみ表示されます。
簡単な環境分離。シークレットはコードから分離されて実行時に解決されるため、開発、ステージング、本番といった複数の環境間で簡単に同じコードベースを使用できます。
Twelve-Factor App パターンをサポート。シークレットは実行時に環境変数に挿入できるため、ネイティブ統合は12 の要素からなる Twelve-Factor App パターンをサポートすると同時に、より強力なセキュリティを保証します。
一元化されたシークレット ストレージ、アクセス、監査。Secret Manager を一元化されたシークレット管理ソリューションとして利用することで、アクセス制御、監査、アクセスログの管理が容易になります。
Cloud Functions と Secret Manager のネイティブ統合は、現在 Google Cloud のすべてのお客様にプレビュー版でご利用いただけます。この新しい統合についてもう少し詳しく見てみましょう。
例
HTTP を介して呼び出された次の Cloud Functions 関数が、アップストリーム API を呼び出すためにシークレット トークンを使用するとします。
Cloud Functions と Secret Manager のネイティブ統合がなければ、この関数は以下を介してデプロイされます。
このアプローチにはいくつもの欠点がありますが、その最大の欠点は、Google Cloud プロジェクトの閲覧権限があれば誰でも、Cloud Functions の関数に設定された環境変数を閲覧できることです。
このコードのセキュリティを向上させるには、同じプロジェクトでシークレットを Secret Manager に移行します。
最後に、関数内のコードは変更せずに、フラグを少しだけ変えて再デプロイします。
Secret Manager を使用すれば、ハードコードされたシークレットから移行して安全なシークレット ストレージを使用するのは実に簡単です。さらにセキュリティを強化するには、Cloud Functions の各関数を専用のサービス アカウントで実行して最小権限の原則を実践することを検討してください。詳細については、Secret Manager のベスト プラクティス ガイドをご覧ください。
セキュリティを簡単に
セキュリティと適切なシークレット管理は、最新ソフトウェアを開発するうえで中核となるものです。お客様に Cloud Functions の関数のセキュリティを向上させる方法を提供できることを大変嬉しく思います。新しいネイティブ統合について詳しくは、Cloud Functions のドキュメントをご覧ください。また、Cloud Functions の詳細やSecret Manager の詳細も併せてご覧ください。
-デベロッパー アドボケイト兼プロダクト マネージャー Seth Vargo
-プロダクト マネージャー Vinod Ramachandran