セキュリティ対策のベスト プラクティス

このドキュメントでは、Terraform for Google Cloud を安全に使用するためのガイドラインと推奨事項について説明します。Terraform を使用するには、対象のクラウド インフラストラクチャに対して機密性の高いアクセス権が必要です。セキュリティのベスト プラクティスに従うことで、関連するリスクを最小限に抑え、クラウド全体のセキュリティを改善できます。

このガイドでは Terraform の概要は説明しません。Google Cloud で Terraform を使用する方法については、Terraform を使ってみるをご覧ください。

リモート状態を使用する

Google Cloud を使用している場合は、Cloud Storage の状態バックエンドを使用することをおすすめします。このアプローチでは、チームとして共同作業できる状態が制限されます。また、状態と潜在的な機密情報をすべてバージョン管理から分離します。

リモート状態として使用されるバケットには、ビルドシステムおよび高い権限を持つ管理者のみがアクセスできるようにします。

開発環境の状態を誤ってソース管理に commit しないようにするには、Terraform の状態ファイルに gitignore を使用します。

状態を暗号化する

Google Cloud バケットは保存時に暗号化されますが、顧客指定の暗号鍵を使用して保護レイヤを追加できます。これを行うには、GOOGLE_ENCRYPTION_KEY 環境変数を使用します。状態ファイルに保存されるシークレットはないはずですが、常に追加の防御手段として状態を暗号化してください。

シークレットを状態に保持しない

Terraform には、状態ファイルに平文でシークレット値に保存するリソースやデータ プロバイダが多数あります。可能な限り、状態をシークレットに保存することは避けてください。シークレットを平文で保存するプロバイダの例を次に示します。

機密出力をマークする

手動で機密性の高い値を暗号化する代わりに、Terraform の組み込みの機密状態管理サポートを使用します。機密性の高い値を出力にエクスポートするときは、値を必ず「機密」とマークしてください。

職掌分散を確保する

ユーザーがアクセスできない自動システムから Terraform を実行できない場合は、権限とディレクトリを分離して職掌分散を確保してください。たとえば、ネットワーク プロジェクトは、そのプロジェクトにアクセスが制限されているネットワーク Terraform サービス アカウントまたはユーザーに対応します。

適用前のチェックを実行する

自動化されたパイプラインで Terraform を実行する場合、適用前に gcloud terraform vet などのツールを使用して、ポリシーに対するプランの出力を確認します。これにより、セキュリティ回帰の発生を事前に検出できます。

継続的な監査を実施する

terraform apply コマンドの実行後、自動セキュリティ チェックを実行します。これらのチェックにより、インフラストラクチャが安全な状態からずれないようにすることができます。この種のチェックでは、次のツールが有効です。

次のステップ