アプリケーションを安全にデプロイする

Last reviewed 2023-08-08 UTC

Google Cloud アーキテクチャ フレームワークのこのドキュメントでは、アプリケーションを安全にデプロイするためのベスト プラクティスについて説明します。

アプリケーションを安全にデプロイするには、設計、開発、テスト、デプロイの各ステージで適切なセキュリティ チェックを行い、ソフトウェア開発ライフサイクルを明確に定義する必要があります。アプリケーションを設計するときは、認証、認可、アクセス制御に標準化されたフレームワークを使用する階層化されたシステム アーキテクチャをおすすめします。

安全なリリースの自動化

自動化されたツールを使用しない場合、一貫したセキュリティ要件を満たすために、複雑なアプリケーション環境のデプロイ、更新、パッチの適用を行うことは容易なことではありません。そのため、これらのタスクの CI / CD パイプラインを構築することをおすすめします。これにより、多くの問題を解決できます。自動化されたパイプラインを使用すると、手動によるエラーをなくすことができます。標準化された開発フィードバック ループが提供されるので、プロダクトの迅速な反復が可能になります。たとえば、Cloud Build のプライベート プールを使用すると、金融や医療など、規制の厳しい業界向けに、安全性の高いマネージド CI / CD パイプラインをデプロイできます。

アーティファクトを作成するときに、自動化を使用してセキュリティの脆弱性をスキャンできます。さまざまな環境(開発、テスト、本番環境など)に対してポリシーを定義し、検証されたアーティファクトのみをデプロイすることもできます。

アプリケーションのデプロイが承認プロセスに従っていることを確認する

攻撃者が CI / CD パイプラインを侵害すると、スタック全体が影響を受ける可能性があります。パイプラインを保護するには、コードを本番環境にデプロイする前に、確立された承認プロセスを適用する必要があります。

Google Kubernetes Engine(GKE)または GKE Enterprise を使用する場合は、Binary Authorization を使用して、これらのチェックとバランスを取ることができます。Binary Authorization は、構成可能な署名をコンテナ イメージに適用します。これらのシグネチャ(証明書)はイメージの検証に役立ちます。デプロイ時に、Binary Authorization はこれらの証明書を使用してプロセスの完了を判断します。たとえば、Binary Authorization を使用して次のことができます。

  • 特定のビルドシステムまたは継続的インテグレーション(CI)パイプラインによってコンテナ イメージが作成されたことを確認する。
  • コンテナ イメージが脆弱性署名ポリシーを遵守していることを確認する。
  • コンテナ イメージが次のデプロイ環境(デプロイから QA まで)に昇格するための基準を満たしていることを確認する。

デプロイ前に既知の脆弱性をスキャンする

コンテナを本番環境にデプロイする前に、コンテナ イメージに対して継続的に脆弱性スキャンを実施できる自動化ツールの使用をおすすめします。

Artifact Analysis を使用して、Artifact RegistryContainer Registry に保存されているコンテナに対して脆弱性スキャンを自動的に実行します。このプロセスには、スキャンと継続分析の 2 つのタスクがあります。

まず、Artifact Analysis は、Artifact Registry または Container Registry にアップロードされた新しいイメージをスキャンします。このスキャンにより、コンテナ内のシステム パッケージに関する情報が抽出されます。

Artifact Analysis は、イメージのアップロード時に脆弱性を探します。最初のスキャンの後、Artifact Analysis は、Artifact Registry と Container Registry 内でスキャンされたイメージのメタデータに新たな脆弱性がないか継続的にモニタリングを行います。Artifact Analysis は、新しい脆弱性情報と更新された脆弱性情報を脆弱性ソースから受け取ると、次の処理を行います。

  • スキャンしたイメージのメタデータを更新して、最新の状態に保つ。
  • 新しいメモ用の新しい脆弱性オカレンスを作成する。
  • 有効ではなくなった脆弱性を削除する。

アプリケーション コードで既知の脆弱性をモニタリングする

アプリケーション コードの既知の脆弱性(OWASP Top 10 など)を常にモニタリングできる自動化ツールの使用をおすすめします。OWASP Top 10 の回避策をサポートする Google Cloud プロダクトと機能については、Google Cloud の OWASP Top 10 の緩和策をご覧ください。

Web Security Scanner を使用すると、App Engine、Compute Engine、Google Kubernetes Engine ウェブ アプリケーションの脆弱性を特定できます。このスキャナは、アプリケーションをクロールして、開始 URL の範囲内にあるすべてのリンクをたどり、できる限り多くのユーザー入力とイベント ハンドラを処理しようとします。クロスサイト スクリプティング(XSS)、Flash インジェクション、混合コンテンツ(HTTPS 内の HTTP)、古いライブラリや安全でないライブラリなど、一般的な脆弱性を自動的にスキャンして検出できます。Web Security Scanner は、これらの脆弱性を正確かつ早期に特定します。

境界を越えるデータの移動を制御する

境界を越えるデータの移動を制御するために、Google マネージド サービスのリソースの周囲にセキュリティ境界を構成できます。VPC Service Controls を使用して、CI / CD パイプライン内のすべてのコンポーネントとサービス(Container Registry、Artifact Registry、Artifact Analysis、Binary Authorization など)をセキュリティ境界内に配置します。

VPC Service Controls を使用すると、Google マネージド サービスから不正なデータ転送やコピー(データの引き出し)が行われるリスクを軽減できます。VPC Service Controls を使用すると、Google マネージド サービスのリソースにセキュリティ境界を構成し、境界をまたがるデータの移動を制御できます。サービス境界が適用されると、境界ポリシーに違反するリクエスト(境界外部から保護されたサービスに対するリクエストなど)が拒否されます。サービスが自動適用境界で保護されている場合、VPC Service Controls は次の処理を行います。

  • サービスは境界の外にデータを送信できません。保護されたサービスは境界内で通常どおり機能しますが、境界からリソースやデータを送信することはできません。この制限により、境界内のプロジェクトにアクセスする悪意のある関係者がデータを漏洩するのを防ぐことができます。
  • 境界外から保護されたサービスへのリクエストは、境界に割り当てられたアクセスレベルの条件が満たされている場合にのみ受け入れられます。
  • このサービスは境界ブリッジを使用して、他の境界内のプロジェクトにアクセス可能にすることができます。

コンテナ イメージを暗号化する

Google Cloud では、顧客管理の暗号鍵(CMEK)を使用してコンテナ イメージを暗号化できます。CMEK 鍵は Cloud Key Management Service(Cloud KMS)で管理されます。CMEK を使用する場合、鍵を無効化または破棄することで、暗号化されたコンテナ イメージへのアクセスを一時停止または恒久的に無効にできます。

次のステップ

次のリソースを使用してサプライ チェーンとアプリケーションのセキュリティを保護する方法を確認する。