Terraformシリーズ第六弾はS3です。CloudTrailデータイベントの設定も含めて記述していきます。
※過去のTerraform記事はこちら
第一弾:TerraformでAWSリソースをデプロイしてみる
第二弾:TerraformでAWS環境をデプロイする前に認識しておくべきこと
第三弾:TerraformでAWSのIAMまわりをデプロイする
第四弾:TerraformでAWSのネットワークまわりをデプロイする
第五弾:TerraformでAWSのEC2まわりをデプロイする
S3
#KMS作成(必要なら)
resource "aws_kms_key" "KMS名" {
policy = templatefile("ディレクトリ/ファイル名.json")
enable_key_rotation = true #キーローテ(必要なら)
}
#KMSエイリアス作成
resource "aws_kms_alias" "KMS名" {
name = "alias/KMS名"
target_key_id = aws_kms_key.example.key_id
}
#バケット作成
resource "aws_s3_bucket" "バケット名" {
bucket = "バケット名"
depends_on = [aws_kms_key.example] #KMSキーの指定
#サーバーサイド暗号化(KMS)
server_side_encryption_configuration {
rule {
apply_server_side_encryption_by_default {
kms_master_key_id = aws_kms_key.example.arn
sse_algorithm = "aws:kms"
}
}
}
versioning {
enabled = true #バージョニング(必要なら)
}
}
#パブリックアクセスのブロック(全てOFF前提)
resource "aws_s3_bucket_public_access_block" "バケット名" {
bucket = aws_s3_bucket.example.id
block_public_acls = true #パブリックACLをブロック
block_public_policy = true #パブリックバケットポリシーをブロック
ignore_public_acls = true #S3がこのバケットのパブリックACLを無視
restrict_public_buckets = true #S3がこのバケットに対してパブリックバケットポリシーを制限
}
#バケットポリシー設定
resource "aws_s3_bucket_policy" "バケット名" {
bucket = aws_s3_bucket.example.id
depends_on = [aws_s3_bucket.example]
policy = templatefile("ディレクトリ/ファイル名.json") #jsonを外だしして指定
}
※参考
AWS CloudTrail データイベント
CloudTrailでオブジェクトログを取得させたい場合は以下を設定します。ログはデータイベントが設定された各バケット→Trail→Trail出力先バケットの順で流れます。
#CloudTrail
resource "aws_cloudtrail" "s3accesslog" {
name = "Trail名-s3accesslog"
s3_bucket_name = aws_s3_bucket.example.id #Trail出力先バケット
kms_key_id = aws_kms_key.example.arn #Trail出力先バケットKMS
include_global_service_events = true #IAMなどのグローバルサービスからログファイルにイベントを公開するか
is_multi_region_trail = false #マルチリージョンでの証跡作成
enable_log_file_validation = true #ログファイルの整合性検証
depends_on = [aws_s3_bucket_policy.example]
#S3オブジェクトログ取得設定
event_selector {
read_write_type = "All" #Tarilの記録対象
include_management_events = true #管理イベントの記録
#オブジェクトログ取得対象バケット(複数前提)
data_resource {
type = "AWS::S3::Object"
values = [
"arn:aws:s3:::バケット名1/",
"arn:aws:s3:::バケット名2/"
]
}
}
}
※参考