LoginSignup
2
0

More than 1 year has passed since last update.

TerraformでAWSのS3をデプロイする

Last updated at Posted at 2023-01-29

Terraformシリーズ第六弾はS3です。CloudTrailデータイベントの設定も含めて記述していきます。:wastebasket:

※過去の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/"
      ]
    }
  }
}

※参考

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0