GCPにはShielded VMという機能があります。あまり使っているという話は聞きませんが、簡単に使えてセキュリティ強化ができる機能です。
使い方
使い方は簡単で、対応したOSイメージを選択し、Shielded VMを有効化して起動するだけです。オプション費用はかかりません。
2019年12月2日現在対応しているイメージは以下の通り。
- CentOS 7
- RHEL 7
- Container Optimized OS 6.9, 7.3, 7.7, dev, beta, stable
- Ubuntu 18.04
- Windows Server 2012r2, 2016, 1803, 1809, 2019
GCP Consoleから起動する場合は、SecurityタブからShielded VM機能を有効化します。
Shielded VMを有効化すると、通常のBIOSではなくUEFI経由で起動するようになるので、dmesg
の実行結果にもUEFI経由で起動したというメッセージが出力されます。
[ 0.000000] efi: EFI v2.70 by EDK II
[ 0.000000] efi: ACPI=0x259fa000 ACPI 2.0=0x259fa014 SMBIOS=0x259cd000 MEMATTR=0x24d0c018 TPMEventLog=0x2406d018
[ 0.000000] secureboot: Secure boot enabled
Shielded VMの目的
Shielded VMの目的は大きく分けると
- 各インスタンスのブートローダーやOSの改ざん検知、システムの整合性確認
- APIリクエストなどが自分たちのインスタンスで行われたことの検証
の二つです。
前者はSecure Boot, Measured Bootによってコンポーネントの改ざんを検知することで、ルートキットなどによるブートローダーやOSなどへの攻撃を防止できます。こちらは対応しているOSイメージで設定を有効化するだけで利用できます。
後者はTPMに格納されているEndorsement Keyと呼ばれる鍵のペアを利用します。このEndorsement KeyはTPMごとに固有で、秘密鍵は取り出せませんが、公開鍵はGetShieldedInstanceIdentity APIで取得可能です。
リクエスターは秘密鍵でリクエストを署名し、APIサーバではGetShieldedInstanceIdentityで取得した公開鍵で検証することで、リクエスターが正当なサーバなのか検証できます。
まとめ
Shielded VMは設定の手間も少なく、サーバのマルウェア対策の一つとして有効で、マイクロサービス間の攻撃対策としても利用できるので、ぜひ有効にしてみましょう。