-
Notifications
You must be signed in to change notification settings - Fork 2
/
codepipeline-base.yaml
174 lines (161 loc) · 4.88 KB
/
codepipeline-base.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
---
AWSTemplateFormatVersion: 2010-09-09
Parameters:
Project:
Type: String
Default: "PROJECT" # Replace with your custom project name
PullAccounts:
Type: CommaDelimitedList
Default: "arn:aws:iam::DEV_ACCOUNT_ID:root,arn:aws:iam::QA_ACCOUNT_ID:root, arn:aws:iam::PROD_ACCOUNT_ID:root"
# Enter the account ids where the ECS clusters will be.
KMSAdmin:
Type: String
Default: "IAM_USER_ARN" # Replace with ARN of an IAM user who should have administrative rights on the key
Resources:
KMSKey:
Type: AWS::KMS::Key
Properties:
Description: "KMS Key for use with codepipeline"
EnableKeyRotation: true
KeyPolicy:
Version: "2012-10-17"
Id: !Join [ "-", [ "kms", !Ref Project, "codepipeline","key" ] ]
Statement:
-
Sid: "AllowAdmin"
Effect: "Allow"
Principal:
AWS: !Ref KMSAdmin
Action:
- "kms:*"
Resource: "*"
-
Sid: "AllowAccount"
Effect: "Allow"
Principal:
AWS: !Sub "arn:aws:iam::${AWS::AccountId}:root"
Action:
- "kms:Encrypt"
- "kms:Decrypt"
- "kms:ReEncrypt*"
- "kms:GenerateDataKey*"
- "kms:DescribeKey"
Resource: "*"
-
Sid: "AllowOthers"
Effect: "Allow"
Principal:
AWS: !Ref PullAccounts
Action:
- "kms:Encrypt"
- "kms:Decrypt"
- "kms:ReEncrypt*"
- "kms:GenerateDataKey*"
- "kms:DescribeKey"
Resource: "*"
ArtifactBucket:
Type: AWS::S3::Bucket
DeletionPolicy: Retain
Properties:
BucketName: !Join [ "-", [ "s3", !Ref Project, "artifacts","bucket" ] ]
VersioningConfiguration: {"Status": "Enabled"}
BucketEncryption:
ServerSideEncryptionConfiguration:
-
ServerSideEncryptionByDefault:
SSEAlgorithm: aws:kms
KMSMasterKeyID: !Ref KMSKey
ArtifactBucketPolicy:
DependsOn: ArtifactBucket
Type: "AWS::S3::BucketPolicy"
Properties:
Bucket:
!Ref ArtifactBucket
PolicyDocument:
Version: "2012-10-17"
Statement:
-
Sid: AllowAccess
Action:
- s3:Get*
- s3:Put*
- s3:ListBucket
Effect: Allow
Resource:
- !Join ["",["arn:aws:s3:::",!Ref 'ArtifactBucket',"/*"]]
- !Join ["",["arn:aws:s3:::",!Ref 'ArtifactBucket']]
Principal:
AWS: !Ref PullAccounts
-
Sid: DenyUnencryptedObjectUploads
Action:
s3:PutObject
Effect: Deny
Resource: !Join ["",["arn:aws:s3:::",!Ref 'ArtifactBucket',"/*"]]
Principal: '*'
Condition:
StringNotEquals:
s3:x-amz-server-side-encryption: "aws:kms"
-
Sid: DenyInsecureConnections
Action:
- s3:*
Effect: Deny
Resource: !Join ["",["arn:aws:s3:::",!Ref 'ArtifactBucket',"/*"]]
Principal: '*'
Condition:
Bool:
aws:SecureTransport: false
Repository:
Type: AWS::ECR::Repository
DeletionPolicy: Retain
Properties:
RepositoryName: !Join [ "-", [ "ecr", !Ref Project, "repository" ]]
RepositoryPolicyText:
Version: 2012-10-17
Statement:
-
Sid: AllowAll
Effect: Allow
Principal:
AWS:
- !Sub "arn:aws:iam::${AWS::AccountId}:root"
Action:
- "ecr:*"
-
Sid: AllowPull
Effect: Allow
Principal:
AWS: !Ref PullAccounts
Action:
- "ecr:BatchCheckLayerAvailability"
- "ecr:BatchGetImage"
- "ecr:DescribeImages"
- "ecr:GetAuthorizationToken"
- "ecr:GetDownloadUrlForLayer"
- "ecr:ListImages"
Outputs:
ArtifactBucketArn:
Value: !GetAtt ArtifactBucket.Arn
Export:
Name: !Join [ ":", [ !Ref "AWS::StackName", ArtifactBucketArn ]]
ArtifactBucket:
Value: !Ref ArtifactBucket
Export:
Name: !Join [ ":", [ !Ref "AWS::StackName", ArtifactBucket ]]
RepositoryArn:
Value: !GetAtt Repository.Arn
Export:
Name: !Join [ ":", [ !Ref "AWS::StackName", RepositoryArn ]]
Repository:
Value: !Ref Repository
Export:
Name: !Join [ ":", [ !Ref "AWS::StackName", Repository ]]
KMSKeyArn:
Value: !GetAtt KMSKey.Arn
Export:
Name: !Join [ ":", [ !Ref "AWS::StackName", KMSKeyArn ]]
KMSKey:
Value: !Ref KMSKey
Export:
Name: !Join [ ":", [ !Ref "AWS::StackName", KMSKey ]]