Search

S3

data "aws_caller_identity" "s3_current" {} resource "random_string" "s3_random" { length = 4 upper = false lower = true numeric = false special = false } resource "aws_kms_key" "s3" { key_usage = "ENCRYPT_DECRYPT" deletion_window_in_days = 7 policy = jsonencode({ Version = "2012-10-17" Id = "key-default-1" Statement = [ { Sid = "Enable IAM User Permissions" Effect = "Allow" Principal = { AWS = "arn:aws:iam::${data.aws_caller_identity.s3_current.account_id}:root" }, Action = "kms:*" Resource = "*" } ] }) tags = { Name = "s3-kms" } } resource "aws_kms_alias" "s3" { target_key_id = aws_kms_key.s3.key_id name = "alias/s3-kms" } resource "aws_s3_bucket" "s3" { bucket = "skills-static-${random_string.s3_random.result}" server_side_encryption_configuration { rule { apply_server_side_encryption_by_default { kms_master_key_id = aws_kms_key.s3.arn sse_algorithm = "aws:kms" } } } tags = { Name = "skills-static-${random_string.s3_random.result}" } } resource "aws_s3_bucket_object" "static_folder" { bucket = aws_s3_bucket.s3.bucket key = "static/" } resource "aws_s3_object" "static" { bucket = aws_s3_bucket.s3.id key = "/static/index.html" source = "./src/index.html" etag = filemd5("./src/index.html") content_type = "text/html" } resource "aws_s3_bucket_website_configuration" "source" { bucket = aws_s3_bucket.s3.id index_document { suffix = "index.html" } } resource "aws_kms_key_policy" "s3_update" { key_id = aws_kms_key.s3.id policy = jsonencode({ Version = "2012-10-17" Id = "key-default-1" Statement = [ { Sid = "Enable IAM User Permissions" Effect = "Allow" Principal = { AWS = "arn:aws:iam::${data.aws_caller_identity.s3_current.account_id}:root" }, Action = "kms:*" Resource = "*" }, { Sid = "AllowCloudFrontServicePrincipalSSE-KMS for home account" Effect = "Allow" Principal = { AWS = "arn:aws:iam::${data.aws_caller_identity.s3_current.account_id}:root" Service = "cloudfront.amazonaws.com" }, Action = ["kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey*"] Resource = "*" Condition = { StringEquals = { "AWS:SourceArn" = "arn:aws:cloudfront::${data.aws_caller_identity.s3_current.account_id}:distribution/${aws_cloudfront_distribution.cf.id}" } } } ] }) depends_on = [aws_cloudfront_distribution.cf] } output "s3" { value = aws_s3_bucket.s3.id }
JSON
복사