DX開発事業部モダンエンジニアリングセクションの田村です。
Google Cloud Next’24現地参加3日目のイベントレポートをお届けいたします。

セッション情報

セッションタイトル:Serverless security like a pro

このセッションでは、サーバーレス環境でセキュリティ体制を強化する方法を学び、その実装を次のサーバーレスアプリケーションにするための方法を説明しています。

サーバーレスとは

  • Operational Model
    • インフラの管理が不要
    • フルマネージドのセキュリティ
  • Programming Model
    • サービスベースの設計
    • ステートレス

ここからはサーバーレスでの考慮事項について紹介

セキュリティの保証

ソフトウェアのセキュリティをどのように保証するか

サーバーレスでは自身のソースコードやそれらの依存関係、またCloud Runサービスの場合は自身のコンテナを適用させます。

プライベートプレビューとして、自動でベースイメージのアップデートとデプロイが可能になります。ダウンタイムは発生せず、リビルドされることがないようですので、ユーザ影響なしに更新が可能となっているようです。
脆弱性については最低でも2日以内に検知して、Googleからパッチが提供され解決することができます。

未承認のアプリや開発を避けるにはどうするか


ソフトウェアのサプライチェーンセキュリティの観点からBinary Authorizationを使用しています。
非認証のビルドがなされてデプロイがされている場合はそのデプロイメントを拒否します。署名が承認リストの中で承認されている場合は本番環境にデプロイできるようになります。

セキュリティネットワーク編

サーバーレスネットワークからプライベートネットワークへどのように接続するか


もしオンプレミス環境で優れたプラットフォームを持っている場合はVPNやinterconnectを使うことで安全に接続することができます。
他のプロジェクト内のサービスにアクセスしたい場合はServerless VPC Connectorを使用しすることで、他のVPCネットワークのリソースに対してプライベートIPアドレスを指定して接続できるようになります。Cloud RunではDirect VPC egressを使ってVPCへのトラフィックルーティングを行うことができます。

固定IPでどのようにインターネットに通信するか


外部IPアドレスがなくてもServerless VPC ConnectorでVPCネットワークに接続できることは確認しましたが、これでは更新やパッチ適用のためにインターネットにアクセスさせることができません。これを可能にするためにはCloud NATゲートウェイを構成して、接続する手段を取ることができます。

ドメインのアクセスをどのように制御するか


Secure Web Proxyを使用してサーバーレス環境からドメインへの通信を制御することができます。内部的にはCloud NATが作成されており、承認されているドメインにのみ通信を行えるように設定が可能です。

サービスにアクセスする内部抜けの通信をどのように管理するか


Load Balancerを使って内部向けの通信を制御することはできるが、External Load Balancingでは最終的にインターネットからサービスへのアクセスが拒否されています。
この例ではオンプレミス環境からVPNやinterconnectを使用し、Internal Load Balancingにて通信を制御する方法をとっています。

セキュアアクセス編

暗号化された通信になっているか


ここではサービスへのアクセスが安全かどうかを確認しています。
そもそもサーバーレス環境には自然とHTTPSとなっているため、安全なサービスアクセスがされるようになっています。


サービスをインターネット上で使用する際にはGoogle Front Endを介して通信が行われています。ここを経由するアクセスでは全てTLSにより暗号化するようになっているためセキュアなアクセスが可能になっています。

インターネットから入る通信をどのようにフィルターするか


インターネットから入る通信はLoad BalancerとCloud Armorを使用してフィルターすることができます。

Google Cloud サービスへのサーバーレスサービスのアクセスを制御するにはどうするか


サービス間のアクセス制御ではサービスアカウントによる制御を行います。カスタムサービスアカウントを使用して、最小権限を付与しておき、後でログ追跡可能な状態にしておくことでアクセス制御を安全に行なっていくことができます。

高可用性&低遅延編

リージョンでの高可用性を保証するにはどうしたら良いか


サーバーレス環境では自然とリージョン単位で高可用性となっています。複数展開をする場合はリージョンにデプロイすることで機能します。


グローバル展開のサーバーレス環境で低遅延の接続にしたい場合はLoad BalancerのAnycast IPを使用することで負荷分散を行なっていくことができます。


プライベートプレビューですが、マルチリージョンで動作させたい場合はコマンド1つでサービスを展開することができます。Global Endpointによって近いリージョンのサービスに接続がなされるようになっています。

考慮事項まとめ

以下、サーバーレス環境における考慮すべき事項となります。
セッション中にスライドで説明があったものみ抜粋しています。

  1. ソフトウェアのセキュリティをどのように保証するか
  2. 未承認のアプリや開発を避けるにはどうするか
  3. サーバーレスネットワークからプライベートネットワークへどのように接続するか
  4. 固定IPでどのようにインターネットに通信するか
  5. ドメインのアクセスをどのように制御するか
  6. サービスにアクセスする内部抜けの通信をどのように管理するか
  7. 暗号化された通信になっているか
  8. インターネットから入る通信をどのようにフィルターするか
  9. Google Cloud サービスへのサーバーレスサービスのアクセスを制御するにはどうするか
  10. リージョンでの高可用性を保証するにはどうしたら良いか

まとめ

サーバーレス環境はセキュリティがないわけでは無いが、高いレベルでのセキュリティを担保するには異なったアプローチで達成する必要があるようです。
このセッションではサーバーレスをテーマとしてさまざまなベストプラクティスを説明いただいて、私自身もまだ経験のないアーキテクチャが色々ありかなり参考になりました。
一般的なサーバーを建てる構成と違いクラウドネイティブのサービスをうまく活用してセキュリティや高可用性を担保していく必要があるため高い設計技術が求められますが、このようなベストプラクティスを参考にしながらセキュアな環境を作成できるようになればと思います。

【iret presents】Google Cloud Next’24 Recap 4月19日16時より「【iret presents】Google Cloud Next’24 Recap」を開催します。4月9~11日にラスベガスで開催される Google Cloud が主催する「Next’24」のポイントを解説する Recap イベントです。

詳細はこちら:
https://cloudpack.jp/event/googlecloud-next-2024-recap.html