diff --git a/.changelog/20600.txt b/.changelog/20600.txt new file mode 100644 index 00000000000..e0e2b2d9995 --- /dev/null +++ b/.changelog/20600.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/aws_config_delivery_channel: Add `s3_kms_key_arn` argument +``` \ No newline at end of file diff --git a/aws/resource_aws_config_delivery_channel.go b/aws/resource_aws_config_delivery_channel.go index de55d601472..fcbecb6a4c8 100644 --- a/aws/resource_aws_config_delivery_channel.go +++ b/aws/resource_aws_config_delivery_channel.go @@ -41,6 +41,11 @@ func resourceAwsConfigDeliveryChannel() *schema.Resource { Type: schema.TypeString, Optional: true, }, + "s3_kms_key_arn": { + Type: schema.TypeString, + Optional: true, + ValidateFunc: validateArn, + }, "sns_topic_arn": { Type: schema.TypeString, Optional: true, @@ -76,6 +81,9 @@ func resourceAwsConfigDeliveryChannelPut(d *schema.ResourceData, meta interface{ if v, ok := d.GetOk("s3_key_prefix"); ok { channel.S3KeyPrefix = aws.String(v.(string)) } + if v, ok := d.GetOk("s3_kms_key_arn"); ok { + channel.S3KmsKeyArn = aws.String(v.(string)) + } if v, ok := d.GetOk("sns_topic_arn"); ok { channel.SnsTopicARN = aws.String(v.(string)) } @@ -151,6 +159,7 @@ func resourceAwsConfigDeliveryChannelRead(d *schema.ResourceData, meta interface d.Set("name", channel.Name) d.Set("s3_bucket_name", channel.S3BucketName) d.Set("s3_key_prefix", channel.S3KeyPrefix) + d.Set("s3_kms_key_arn", channel.S3KmsKeyArn) d.Set("sns_topic_arn", channel.SnsTopicARN) if channel.ConfigSnapshotDeliveryProperties != nil { diff --git a/aws/resource_aws_config_delivery_channel_test.go b/aws/resource_aws_config_delivery_channel_test.go index 741e1add713..090e6aa4c1e 100644 --- a/aws/resource_aws_config_delivery_channel_test.go +++ b/aws/resource_aws_config_delivery_channel_test.go @@ -117,6 +117,7 @@ func testAccConfigDeliveryChannel_allParams(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "name", expectedName), resource.TestCheckResourceAttr(resourceName, "s3_bucket_name", expectedBucketName), resource.TestCheckResourceAttr(resourceName, "s3_key_prefix", "one/two/three"), + resource.TestCheckResourceAttrPair(resourceName, "s3_kms_key_arn", "aws_kms_key.k", "arn"), resource.TestCheckResourceAttrPair(resourceName, "sns_topic_arn", "aws_sns_topic.t", "arn"), resource.TestCheckResourceAttr(resourceName, "snapshot_delivery_properties.0.delivery_frequency", "Six_Hours"), ), @@ -320,6 +321,14 @@ resource "aws_iam_role_policy" "p" { "${aws_s3_bucket.b.arn}", "${aws_s3_bucket.b.arn}/*" ] + }, + { + "Effect": "Allow", + "Action": [ + "kms:Decrypt", + "kms:GenerateDataKey" + ], + "Resource": "${aws_kms_key.k.arn}" } ] } @@ -335,10 +344,34 @@ resource "aws_sns_topic" "t" { name = "tf-acc-test-%d" } +resource "aws_kms_key" "k" { + description = "tf-acc-test-awsconfig-%d" + deletion_window_in_days = 7 + + policy = <