diff --git a/aws/resource_aws_s3_bucket.go b/aws/resource_aws_s3_bucket.go index b0b26680318..5f409ea692a 100644 --- a/aws/resource_aws_s3_bucket.go +++ b/aws/resource_aws_s3_bucket.go @@ -1590,9 +1590,13 @@ func resourceAwsS3BucketServerSideEncryptionConfigurationUpdate(s3conn *s3.S3, d for _, v := range rcRules { rr := v.(map[string]interface{}) rrDefault := rr["apply_server_side_encryption_by_default"].([]interface{}) + sseAlgorithm := rrDefault[0].(map[string]interface{})["sse_algorithm"].(string) + kmsMasterKeyId := rrDefault[0].(map[string]interface{})["kms_master_key_id"].(string) rcDefaultRule := &s3.ServerSideEncryptionByDefault{ - SSEAlgorithm: aws.String(rrDefault[0].(map[string]interface{})["sse_algorithm"].(string)), - KMSMasterKeyID: aws.String(rrDefault[0].(map[string]interface{})["kms_master_key_id"].(string)), + SSEAlgorithm: aws.String(sseAlgorithm), + } + if kmsMasterKeyId != "" { + rcDefaultRule.KMSMasterKeyID = aws.String(kmsMasterKeyId) } rcRule := &s3.ServerSideEncryptionRule{ ApplyServerSideEncryptionByDefault: rcDefaultRule, diff --git a/aws/resource_aws_s3_bucket_test.go b/aws/resource_aws_s3_bucket_test.go index 43969e836b0..a31be8114e8 100644 --- a/aws/resource_aws_s3_bucket_test.go +++ b/aws/resource_aws_s3_bucket_test.go @@ -434,6 +434,28 @@ func TestAccAWSS3Bucket_enableDefaultEncryption_whenTypical(t *testing.T) { }) } +func TestAccAWSS3Bucket_enableDefaultEncryption_whenAES256IsUsed(t *testing.T) { + rInt := acctest.RandInt() + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckAWSS3BucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAWSS3BucketEnableDefaultEncryptionWithAES256(rInt), + Check: resource.ComposeTestCheckFunc( + testAccCheckAWSS3BucketExists("aws_s3_bucket.arbitrary"), + resource.TestCheckResourceAttr("aws_s3_bucket.arbitrary", "server_side_encryption_configuration.#", "1"), + resource.TestCheckResourceAttr("aws_s3_bucket.arbitrary", "server_side_encryption_configuration.0.rule.#", "1"), + resource.TestCheckResourceAttr("aws_s3_bucket.arbitrary", "server_side_encryption_configuration.0.rule.0.apply_server_side_encryption_by_default.#", "1"), + resource.TestCheckResourceAttr("aws_s3_bucket.arbitrary", "server_side_encryption_configuration.0.rule.0.apply_server_side_encryption_by_default.0.sse_algorithm", "AES256"), + resource.TestCheckResourceAttr("aws_s3_bucket.arbitrary", "server_side_encryption_configuration.0.rule.0.apply_server_side_encryption_by_default.0.kms_master_key_id", ""), + ), + }, + }, + }) +} + func TestAccAWSS3Bucket_disableDefaultEncryption_whenDefaultEncryptionIsEnabled(t *testing.T) { rInt := acctest.RandInt() resource.Test(t, resource.TestCase{ @@ -1490,6 +1512,21 @@ resource "aws_s3_bucket" "arbitrary" { `, randInt, randInt) } +func testAccAWSS3BucketEnableDefaultEncryptionWithAES256(randInt int) string { + return fmt.Sprintf(` +resource "aws_s3_bucket" "arbitrary" { + bucket = "tf-test-bucket-%d" + server_side_encryption_configuration { + rule { + apply_server_side_encryption_by_default { + sse_algorithm = "AES256" + } + } + } +} +`, randInt) +} + func testAccAWSS3BucketEnableDefaultEncryptionWithDefaultKey(randInt int) string { return fmt.Sprintf(` resource "aws_s3_bucket" "arbitrary" {