Skip to content

Commit 9740ed3

Browse files
skinny85mergify[bot]
authored andcommitted
fix(codepipeline): do not retain the default bucket key and alias (#4400)
Currently, the KMS key and alias used for the default CodePipeline artifact bucket are created with RemovalPolicy.RETAIN. That is problematic when trying to re-deploy a stack after running `cdk destroy`, as the alias name will already be taken. Because of that, change the removal policy of both the key and the alias to RemovalPolicy.DESTROY - there is a grace period of a few days on the key before it's removed permanently, so that should be good enough if anyone needs it, and it doesn't seem like directly reading the artifacts of the pipeline is an important use case anyway, especially after it has been deleted. Fixes #4336
1 parent 123c594 commit 9740ed3

14 files changed

+56
-50
lines changed

packages/@aws-cdk/aws-codepipeline-actions/test/integ.cfn-template-from-repo.lit.expected.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,8 @@
106106
"Version": "2012-10-17"
107107
}
108108
},
109-
"DeletionPolicy": "Retain",
110-
"UpdateReplacePolicy": "Retain"
109+
"DeletionPolicy": "Delete",
110+
"UpdateReplacePolicy": "Delete"
111111
},
112112
"PipelineArtifactsBucket22248F97": {
113113
"Type": "AWS::S3::Bucket",
@@ -142,8 +142,8 @@
142142
]
143143
}
144144
},
145-
"DeletionPolicy": "Retain",
146-
"UpdateReplacePolicy": "Retain"
145+
"DeletionPolicy": "Delete",
146+
"UpdateReplacePolicy": "Delete"
147147
},
148148
"PipelineRoleD68726F7": {
149149
"Type": "AWS::IAM::Role",

packages/@aws-cdk/aws-codepipeline-actions/test/integ.lambda-deployed-through-codepipeline.lit.expected.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,8 @@
157157
"Version": "2012-10-17"
158158
}
159159
},
160-
"DeletionPolicy": "Retain",
161-
"UpdateReplacePolicy": "Retain"
160+
"DeletionPolicy": "Delete",
161+
"UpdateReplacePolicy": "Delete"
162162
},
163163
"PipelineArtifactsBucket22248F97": {
164164
"Type": "AWS::S3::Bucket",
@@ -193,8 +193,8 @@
193193
]
194194
}
195195
},
196-
"DeletionPolicy": "Retain",
197-
"UpdateReplacePolicy": "Retain"
196+
"DeletionPolicy": "Delete",
197+
"UpdateReplacePolicy": "Delete"
198198
},
199199
"PipelineRoleD68726F7": {
200200
"Type": "AWS::IAM::Role",

packages/@aws-cdk/aws-codepipeline-actions/test/integ.lambda-pipeline.expected.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@
8282
"Version": "2012-10-17"
8383
}
8484
},
85-
"DeletionPolicy": "Retain",
86-
"UpdateReplacePolicy": "Retain"
85+
"DeletionPolicy": "Delete",
86+
"UpdateReplacePolicy": "Delete"
8787
},
8888
"PipelineArtifactsBucket22248F97": {
8989
"Type": "AWS::S3::Bucket",
@@ -118,8 +118,8 @@
118118
]
119119
}
120120
},
121-
"DeletionPolicy": "Retain",
122-
"UpdateReplacePolicy": "Retain"
121+
"DeletionPolicy": "Delete",
122+
"UpdateReplacePolicy": "Delete"
123123
},
124124
"PipelineRoleD68726F7": {
125125
"Type": "AWS::IAM::Role",

packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-alexa-deploy.expected.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@
9292
"Version": "2012-10-17"
9393
}
9494
},
95-
"DeletionPolicy": "Retain",
96-
"UpdateReplacePolicy": "Retain"
95+
"DeletionPolicy": "Delete",
96+
"UpdateReplacePolicy": "Delete"
9797
},
9898
"PipelineArtifactsBucket22248F97": {
9999
"Type": "AWS::S3::Bucket",
@@ -128,8 +128,8 @@
128128
]
129129
}
130130
},
131-
"DeletionPolicy": "Retain",
132-
"UpdateReplacePolicy": "Retain"
131+
"DeletionPolicy": "Delete",
132+
"UpdateReplacePolicy": "Delete"
133133
},
134134
"PipelineRoleD68726F7": {
135135
"Type": "AWS::IAM::Role",

packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-cfn.expected.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,8 @@
115115
"Version": "2012-10-17"
116116
}
117117
},
118-
"DeletionPolicy": "Retain",
119-
"UpdateReplacePolicy": "Retain"
118+
"DeletionPolicy": "Delete",
119+
"UpdateReplacePolicy": "Delete"
120120
},
121121
"PipelineArtifactsBucket22248F97": {
122122
"Type": "AWS::S3::Bucket",
@@ -151,8 +151,8 @@
151151
]
152152
}
153153
},
154-
"DeletionPolicy": "Retain",
155-
"UpdateReplacePolicy": "Retain"
154+
"DeletionPolicy": "Delete",
155+
"UpdateReplacePolicy": "Delete"
156156
},
157157
"PipelineRoleD68726F7": {
158158
"Type": "AWS::IAM::Role",

packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-code-commit-build.expected.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -330,8 +330,8 @@
330330
"Version": "2012-10-17"
331331
}
332332
},
333-
"DeletionPolicy": "Retain",
334-
"UpdateReplacePolicy": "Retain"
333+
"DeletionPolicy": "Delete",
334+
"UpdateReplacePolicy": "Delete"
335335
},
336336
"PipelineArtifactsBucket22248F97": {
337337
"Type": "AWS::S3::Bucket",
@@ -366,8 +366,8 @@
366366
]
367367
}
368368
},
369-
"UpdateReplacePolicy": "Retain",
370-
"DeletionPolicy": "Retain"
369+
"UpdateReplacePolicy": "Delete",
370+
"DeletionPolicy": "Delete"
371371
},
372372
"PipelineRoleD68726F7": {
373373
"Type": "AWS::IAM::Role",

packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-code-commit.expected.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,8 @@
155155
"Version": "2012-10-17"
156156
}
157157
},
158-
"DeletionPolicy": "Retain",
159-
"UpdateReplacePolicy": "Retain"
158+
"DeletionPolicy": "Delete",
159+
"UpdateReplacePolicy": "Delete"
160160
},
161161
"PipelineArtifactsBucket22248F97": {
162162
"Type": "AWS::S3::Bucket",
@@ -191,8 +191,8 @@
191191
]
192192
}
193193
},
194-
"DeletionPolicy": "Retain",
195-
"UpdateReplacePolicy": "Retain"
194+
"DeletionPolicy": "Delete",
195+
"UpdateReplacePolicy": "Delete"
196196
},
197197
"PipelineRoleD68726F7": {
198198
"Type": "AWS::IAM::Role",

packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-events.expected.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,8 @@
103103
"Version": "2012-10-17"
104104
}
105105
},
106-
"DeletionPolicy": "Retain",
107-
"UpdateReplacePolicy": "Retain"
106+
"DeletionPolicy": "Delete",
107+
"UpdateReplacePolicy": "Delete"
108108
},
109109
"MyPipelineArtifactsBucket727923DD": {
110110
"Type": "AWS::S3::Bucket",
@@ -139,8 +139,8 @@
139139
]
140140
}
141141
},
142-
"DeletionPolicy": "Retain",
143-
"UpdateReplacePolicy": "Retain"
142+
"DeletionPolicy": "Delete",
143+
"UpdateReplacePolicy": "Delete"
144144
},
145145
"MyPipelineRoleC0D47CA4": {
146146
"Type": "AWS::IAM::Role",

packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-s3-deploy.expected.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,8 @@
113113
"Version": "2012-10-17"
114114
}
115115
},
116-
"DeletionPolicy": "Retain",
117-
"UpdateReplacePolicy": "Retain"
116+
"DeletionPolicy": "Delete",
117+
"UpdateReplacePolicy": "Delete"
118118
},
119119
"PipelineArtifactsBucket22248F97": {
120120
"Type": "AWS::S3::Bucket",
@@ -149,8 +149,8 @@
149149
]
150150
}
151151
},
152-
"DeletionPolicy": "Retain",
153-
"UpdateReplacePolicy": "Retain"
152+
"DeletionPolicy": "Delete",
153+
"UpdateReplacePolicy": "Delete"
154154
},
155155
"PipelineRoleD68726F7": {
156156
"Type": "AWS::IAM::Role",

packages/@aws-cdk/aws-codepipeline/lib/cross-region-support-stack.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,13 @@ export class CrossRegionSupportConstruct extends cdk.Construct {
3434
constructor(scope: cdk.Construct, id: string) {
3535
super(scope, id);
3636

37-
const encryptionKey = new kms.Key(this, 'CrossRegionCodePipelineReplicationBucketEncryptionKey');
37+
const encryptionKey = new kms.Key(this, 'CrossRegionCodePipelineReplicationBucketEncryptionKey', {
38+
removalPolicy: cdk.RemovalPolicy.DESTROY,
39+
});
3840
const encryptionAlias = new AliasWithShorterGeneratedName(this, 'CrossRegionCodePipelineReplicationBucketEncryptionAlias', {
3941
targetKey: encryptionKey,
4042
aliasName: cdk.PhysicalName.GENERATE_IF_NEEDED,
41-
removalPolicy: cdk.RemovalPolicy.RETAIN,
43+
removalPolicy: cdk.RemovalPolicy.DESTROY,
4244
});
4345
this.replicationBucket = new s3.Bucket(this, 'CrossRegionCodePipelineReplicationBucket', {
4446
bucketName: cdk.PhysicalName.GENERATE_IF_NEEDED,

packages/@aws-cdk/aws-codepipeline/lib/pipeline.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,11 @@ export class Pipeline extends PipelineBase {
223223
// If a bucket has been provided, use it - otherwise, create a bucket.
224224
let propsBucket = this.getArtifactBucketFromProps(props);
225225
if (!propsBucket) {
226-
const encryptionKey = new kms.Key(this, 'ArtifactsBucketEncryptionKey');
226+
const encryptionKey = new kms.Key(this, 'ArtifactsBucketEncryptionKey', {
227+
// remove the key - there is a grace period of a few days before it's gone for good,
228+
// that should be enough for any emergency access to the bucket artifacts
229+
removalPolicy: RemovalPolicy.DESTROY,
230+
});
227231
propsBucket = new s3.Bucket(this, 'ArtifactsBucket', {
228232
bucketName: PhysicalName.GENERATE_IF_NEEDED,
229233
encryptionKey,
@@ -234,7 +238,7 @@ export class Pipeline extends PipelineBase {
234238
new kms.Alias(this, 'ArtifactsBucketEncryptionKeyAlias', {
235239
aliasName: this.generateNameForDefaultBucketKeyAlias(),
236240
targetKey: encryptionKey,
237-
removalPolicy: RemovalPolicy.RETAIN, // alias should be retained, like the key
241+
removalPolicy: RemovalPolicy.DESTROY, // destroy the alias along with the key
238242
});
239243
}
240244
this.artifactBucket = propsBucket;

packages/@aws-cdk/aws-codepipeline/test/test.pipeline.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,8 +233,8 @@ export = {
233233
}));
234234

235235
expect(pipeline.crossRegionSupport[replicationRegion].stack).to(haveResourceLike('AWS::KMS::Alias', {
236-
"DeletionPolicy": "Retain",
237-
"UpdateReplacePolicy": "Retain",
236+
"DeletionPolicy": "Delete",
237+
"UpdateReplacePolicy": "Delete",
238238
}, ResourcePart.CompleteDefinition));
239239

240240
test.done();

packages/@aws-cdk/aws-events-targets/test/codepipeline/integ.pipeline-event-target.expected.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@
7171
"Version": "2012-10-17"
7272
}
7373
},
74-
"DeletionPolicy": "Retain",
75-
"UpdateReplacePolicy": "Retain"
74+
"DeletionPolicy": "Delete",
75+
"UpdateReplacePolicy": "Delete"
7676
},
7777
"pipelinePipeline22F2A91DArtifactsBucketC1799DCD": {
7878
"Type": "AWS::S3::Bucket",
@@ -107,8 +107,8 @@
107107
]
108108
}
109109
},
110-
"DeletionPolicy": "Retain",
111-
"UpdateReplacePolicy": "Retain"
110+
"DeletionPolicy": "Delete",
111+
"UpdateReplacePolicy": "Delete"
112112
},
113113
"pipelinePipeline22F2A91DRole58B7B05E": {
114114
"Type": "AWS::IAM::Role",

packages/decdk/test/__snapshots__/synth.test.js.snap

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1891,7 +1891,7 @@ Object {
18911891
"UpdateReplacePolicy": "Retain",
18921892
},
18931893
"PipelineArtifactsBucketEncryptionKey01D58D69": Object {
1894-
"DeletionPolicy": "Retain",
1894+
"DeletionPolicy": "Delete",
18951895
"Properties": Object {
18961896
"KeyPolicy": Object {
18971897
"Statement": Array [
@@ -2010,10 +2010,10 @@ Object {
20102010
},
20112011
},
20122012
"Type": "AWS::KMS::Key",
2013-
"UpdateReplacePolicy": "Retain",
2013+
"UpdateReplacePolicy": "Delete",
20142014
},
20152015
"PipelineArtifactsBucketEncryptionKeyAlias5C510EEE": Object {
2016-
"DeletionPolicy": "Retain",
2016+
"DeletionPolicy": "Delete",
20172017
"Properties": Object {
20182018
"AliasName": "alias/codepipeline-pipelinepipeline22f2a91d",
20192019
"TargetKeyId": Object {
@@ -2024,7 +2024,7 @@ Object {
20242024
},
20252025
},
20262026
"Type": "AWS::KMS::Alias",
2027-
"UpdateReplacePolicy": "Retain",
2027+
"UpdateReplacePolicy": "Delete",
20282028
},
20292029
"PipelineBuildCodePipelineActionRoleD77A08E6": Object {
20302030
"Properties": Object {

0 commit comments

Comments
 (0)