CloudFormation のセキュリティのベストプラクティス
AWS CloudFormation には、独自のセキュリティポリシーを開発および実装する際に考慮する必要のあるいくつかのセキュリティ機能が用意されています。以下のベストプラクティスは一般的なガイドラインであり、完全なセキュリティソリューションに相当するものではありません。これらのベストプラクティスはお客様の環境に必ずしも適切または十分でない可能性があるので、処方箋ではなく、あくまで有用な検討事項とお考えください。
IAM を使用したアクセス制御
IAM は AWS のユーザーとそのアクセス許可を管理できる AWS サービスです。IAM と CloudFormation を使用して、スタックテンプレートの表示、スタックの作成、スタックの削除など、ユーザーが実行できる CloudFormation アクションを指定できます。さらに、CloudFormation スタックを管理するには、そのスタックのリソースに対するアクセス許可が必要です。例えば、ユーザーが CloudFormation を使用して Amazon EC2 インスタンスを、起動、更新、終了する場合、そのユーザーは関連する Amazon EC2 アクションを呼び出すアクセス許可を持っている必要があります。
ほとんどの場合、ユーザーはテンプレート内のすべてのリソースを管理するためにフルアクセスを必要とします。CloudFormation は、ユーザーに代わってこれらのリソースを作成、変更、削除するための呼び出しを行います。ユーザーと CloudFormation サービスの間でアクセス許可を分割するには、サービスロールを使用します。CloudFormation は、ユーザーのポリシーの代わりにサービスロールのポリシーを使用して呼び出しを行います。詳細については、「AWS CloudFormation サービスロール」を参照してください。
テンプレートに認証情報を埋め込まない
CloudFormation テンプレートに機密情報を埋め込むのではなく、スタックテンプレートで動的なリファレンスを使用することをお勧めします。
動的なリファレンスにより、AWS Systems Manager パラメータストアや AWS Secrets Manager などの他のサービスで保存、管理されている外部値をスタックテンプレートに指定するためのシンプルで強力な方法が提供されます。動的なリファレンスを使用すると、CloudFormation は、スタックオペレーションおよび変更セットオペレーション中に指定されたリファレンスの値を取得して、その値を適切なリソースに渡します。ただし、CloudFormation が実際の参照値を保存することはありません。詳細については、「動的参照を使用して他のサービスに格納されている値を取得する」を参照してください。
AWS Secrets Manager を使用して、データベースやその他のサービスの認証情報を安全に暗号化、保存、取得できます。AWS Systems Manager パラメータストア は、構成データ管理のための安全な階層型ストレージを提供します。
起動テンプレートのパラメータの詳細については、「CloudFormation テンプレートの Parameters セクション構文リファレンス」を参照してください。
AWS CloudTrail を使用して CloudFormation 呼び出しをログに記録する
AWS CloudTrail は、AWS アカウントで CloudFormation API コールを実行するすべてのユーザーを追跡します。API 呼び出しは、CloudFormation API、CloudFormation コンソール、バックエンドコンソール、または CloudFormation AWS AWS CLI コマンドの使用時にログに記録されます。ログ記録を有効にして Amazon S3 バケットを指定し、ログを保存します。こうすることで、必要ならばアカウントで誰がどのような CloudFormation 呼び出しを行ったかを監査できます。詳細については、「AWS CloudFormation による AWS CloudTrail API コールのログ記録」を参照してください。