Skip to content

Commit 53b08d7

Browse files
committed
feat: deprecate 'server_side_encryption_configuration' argument
1 parent 0c9bcee commit 53b08d7

File tree

5 files changed

+67
-363
lines changed

5 files changed

+67
-363
lines changed

.changelog/22605.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:note
2+
resource/aws_s3_bucket: The `server_side_encryption_configuration` argument has been deprecated and is now read-only. Use the `aws_s3_bucket_server_side_encryption_configuration` resource instead.
3+
```

internal/service/s3/bucket.go

+57-113
Original file line numberDiff line numberDiff line change
@@ -568,38 +568,40 @@ func ResourceBucket() *schema.Resource {
568568
},
569569

570570
"server_side_encryption_configuration": {
571-
Type: schema.TypeList,
572-
MaxItems: 1,
573-
Optional: true,
571+
Type: schema.TypeList,
572+
Computed: true,
573+
Deprecated: "Use the aws_s3_bucket_server_side_encryption_configuration resource instead",
574574
Elem: &schema.Resource{
575575
Schema: map[string]*schema.Schema{
576576
"rule": {
577-
Type: schema.TypeList,
578-
MaxItems: 1,
579-
Required: true,
577+
Type: schema.TypeList,
578+
Computed: true,
579+
Deprecated: "Use the aws_s3_bucket_server_side_encryption_configuration resource instead",
580580
Elem: &schema.Resource{
581581
Schema: map[string]*schema.Schema{
582582
"apply_server_side_encryption_by_default": {
583-
Type: schema.TypeList,
584-
MaxItems: 1,
585-
Required: true,
583+
Type: schema.TypeList,
584+
Computed: true,
585+
Deprecated: "Use the aws_s3_bucket_server_side_encryption_configuration resource instead",
586586
Elem: &schema.Resource{
587587
Schema: map[string]*schema.Schema{
588588
"kms_master_key_id": {
589-
Type: schema.TypeString,
590-
Optional: true,
589+
Type: schema.TypeString,
590+
Computed: true,
591+
Deprecated: "Use the aws_s3_bucket_server_side_encryption_configuration resource instead",
591592
},
592593
"sse_algorithm": {
593-
Type: schema.TypeString,
594-
Required: true,
595-
ValidateFunc: validation.StringInSlice(s3.ServerSideEncryption_Values(), false),
594+
Type: schema.TypeString,
595+
Computed: true,
596+
Deprecated: "Use the aws_s3_bucket_server_side_encryption_configuration resource instead",
596597
},
597598
},
598599
},
599600
},
600601
"bucket_key_enabled": {
601-
Type: schema.TypeBool,
602-
Optional: true,
602+
Type: schema.TypeBool,
603+
Computed: true,
604+
Deprecated: "Use the aws_s3_bucket_server_side_encryption_configuration resource instead",
603605
},
604606
},
605607
},
@@ -835,12 +837,6 @@ func resourceBucketUpdate(d *schema.ResourceData, meta interface{}) error {
835837
}
836838
}
837839

838-
if d.HasChange("server_side_encryption_configuration") {
839-
if err := resourceBucketServerSideEncryptionConfigurationUpdate(conn, d); err != nil {
840-
return err
841-
}
842-
}
843-
844840
if d.HasChange("object_lock_configuration") {
845841
if err := resourceBucketObjectLockConfigurationUpdate(conn, d); err != nil {
846842
return err
@@ -1291,16 +1287,14 @@ func resourceBucketRead(d *schema.ResourceData, meta interface{}) error {
12911287
Bucket: aws.String(d.Id()),
12921288
})
12931289
})
1294-
if err != nil && !tfawserr.ErrMessageContains(err, "ServerSideEncryptionConfigurationNotFoundError", "encryption configuration was not found") {
1295-
return fmt.Errorf("error getting S3 Bucket encryption: %s", err)
1290+
if err != nil && !tfawserr.ErrMessageContains(err, ErrCodeServerSideEncryptionNotFound, "encryption configuration was not found") {
1291+
return fmt.Errorf("error getting S3 Bucket encryption: %w", err)
12961292
}
12971293

1298-
serverSideEncryptionConfiguration := make([]map[string]interface{}, 0)
1299-
if encryption, ok := encryptionResponse.(*s3.GetBucketEncryptionOutput); ok && encryption.ServerSideEncryptionConfiguration != nil {
1300-
serverSideEncryptionConfiguration = flattenServerSideEncryptionConfiguration(encryption.ServerSideEncryptionConfiguration)
1301-
}
1302-
if err := d.Set("server_side_encryption_configuration", serverSideEncryptionConfiguration); err != nil {
1303-
return fmt.Errorf("error setting server_side_encryption_configuration: %s", err)
1294+
if encryption, ok := encryptionResponse.(*s3.GetBucketEncryptionOutput); ok {
1295+
if err := d.Set("server_side_encryption_configuration", flattenServerSideEncryptionConfiguration(encryption.ServerSideEncryptionConfiguration)); err != nil {
1296+
return fmt.Errorf("error setting server_side_encryption_configuration: %w", err)
1297+
}
13041298
}
13051299

13061300
// Object Lock configuration.
@@ -1947,73 +1941,6 @@ func resourceBucketRequestPayerUpdate(conn *s3.S3, d *schema.ResourceData) error
19471941
return nil
19481942
}
19491943

1950-
func resourceBucketServerSideEncryptionConfigurationUpdate(conn *s3.S3, d *schema.ResourceData) error {
1951-
bucket := d.Get("bucket").(string)
1952-
serverSideEncryptionConfiguration := d.Get("server_side_encryption_configuration").([]interface{})
1953-
if len(serverSideEncryptionConfiguration) == 0 {
1954-
log.Printf("[DEBUG] Delete server side encryption configuration: %#v", serverSideEncryptionConfiguration)
1955-
i := &s3.DeleteBucketEncryptionInput{
1956-
Bucket: aws.String(bucket),
1957-
}
1958-
1959-
_, err := conn.DeleteBucketEncryption(i)
1960-
if err != nil {
1961-
return fmt.Errorf("error removing S3 bucket server side encryption: %s", err)
1962-
}
1963-
return nil
1964-
}
1965-
1966-
c := serverSideEncryptionConfiguration[0].(map[string]interface{})
1967-
1968-
rc := &s3.ServerSideEncryptionConfiguration{}
1969-
1970-
rcRules := c["rule"].([]interface{})
1971-
var rules []*s3.ServerSideEncryptionRule
1972-
for _, v := range rcRules {
1973-
rr := v.(map[string]interface{})
1974-
rrDefault := rr["apply_server_side_encryption_by_default"].([]interface{})
1975-
sseAlgorithm := rrDefault[0].(map[string]interface{})["sse_algorithm"].(string)
1976-
kmsMasterKeyId := rrDefault[0].(map[string]interface{})["kms_master_key_id"].(string)
1977-
rcDefaultRule := &s3.ServerSideEncryptionByDefault{
1978-
SSEAlgorithm: aws.String(sseAlgorithm),
1979-
}
1980-
if kmsMasterKeyId != "" {
1981-
rcDefaultRule.KMSMasterKeyID = aws.String(kmsMasterKeyId)
1982-
}
1983-
rcRule := &s3.ServerSideEncryptionRule{
1984-
ApplyServerSideEncryptionByDefault: rcDefaultRule,
1985-
}
1986-
1987-
if val, ok := rr["bucket_key_enabled"].(bool); ok {
1988-
rcRule.BucketKeyEnabled = aws.Bool(val)
1989-
}
1990-
1991-
rules = append(rules, rcRule)
1992-
}
1993-
1994-
rc.Rules = rules
1995-
i := &s3.PutBucketEncryptionInput{
1996-
Bucket: aws.String(bucket),
1997-
ServerSideEncryptionConfiguration: rc,
1998-
}
1999-
log.Printf("[DEBUG] S3 put bucket replication configuration: %#v", i)
2000-
2001-
_, err := tfresource.RetryWhenAWSErrCodeEquals(
2002-
propagationTimeout,
2003-
func() (interface{}, error) {
2004-
return conn.PutBucketEncryption(i)
2005-
},
2006-
s3.ErrCodeNoSuchBucket,
2007-
ErrCodeOperationAborted,
2008-
)
2009-
2010-
if err != nil {
2011-
return fmt.Errorf("error putting S3 server side encryption configuration: %s", err)
2012-
}
2013-
2014-
return nil
2015-
}
2016-
20171944
func resourceBucketObjectLockConfigurationUpdate(conn *s3.S3, d *schema.ResourceData) error {
20181945
// S3 Object Lock configuration cannot be deleted, only updated.
20191946
req := &s3.PutObjectLockConfigurationInput{
@@ -2371,24 +2298,41 @@ func resourceBucketLifecycleUpdate(conn *s3.S3, d *schema.ResourceData) error {
23712298
return nil
23722299
}
23732300

2374-
func flattenServerSideEncryptionConfiguration(c *s3.ServerSideEncryptionConfiguration) []map[string]interface{} {
2375-
var encryptionConfiguration []map[string]interface{}
2376-
rules := make([]interface{}, 0, len(c.Rules))
2377-
for _, v := range c.Rules {
2378-
if v.ApplyServerSideEncryptionByDefault != nil {
2379-
r := make(map[string]interface{})
2380-
d := make(map[string]interface{})
2381-
d["kms_master_key_id"] = aws.StringValue(v.ApplyServerSideEncryptionByDefault.KMSMasterKeyID)
2382-
d["sse_algorithm"] = aws.StringValue(v.ApplyServerSideEncryptionByDefault.SSEAlgorithm)
2383-
r["apply_server_side_encryption_by_default"] = []map[string]interface{}{d}
2384-
r["bucket_key_enabled"] = aws.BoolValue(v.BucketKeyEnabled)
2385-
rules = append(rules, r)
2301+
func flattenServerSideEncryptionConfiguration(c *s3.ServerSideEncryptionConfiguration) []interface{} {
2302+
if c == nil {
2303+
return []interface{}{}
2304+
}
2305+
2306+
m := map[string]interface{}{
2307+
"rules": flattenServerSideEncryptionConfigurationRules(c.Rules),
2308+
}
2309+
2310+
return []interface{}{m}
2311+
}
2312+
2313+
func flattenServerSideEncryptionConfigurationRules(rules []*s3.ServerSideEncryptionRule) []interface{} {
2314+
var results []interface{}
2315+
2316+
for _, rule := range rules {
2317+
m := make(map[string]interface{})
2318+
2319+
if rule.BucketKeyEnabled != nil {
2320+
m["bucket_key_enabled"] = aws.BoolValue(rule.BucketKeyEnabled)
23862321
}
2322+
2323+
if rule.ApplyServerSideEncryptionByDefault != nil {
2324+
m["apply_server_side_encryption_by_default"] = []interface{}{
2325+
map[string]interface{}{
2326+
"kms_master_key_id": aws.StringValue(rule.ApplyServerSideEncryptionByDefault.KMSMasterKeyID),
2327+
"sse_algorithm": aws.StringValue(rule.ApplyServerSideEncryptionByDefault.SSEAlgorithm),
2328+
},
2329+
}
2330+
}
2331+
2332+
results = append(results, m)
23872333
}
2388-
encryptionConfiguration = append(encryptionConfiguration, map[string]interface{}{
2389-
"rule": rules,
2390-
})
2391-
return encryptionConfiguration
2334+
2335+
return results
23922336
}
23932337

23942338
func flattenBucketReplicationConfiguration(r *s3.ReplicationConfiguration) []map[string]interface{} {

0 commit comments

Comments
 (0)