@@ -42,6 +42,13 @@ resource "aws_identitystore_group" "triagebot" {
42
42
description = " The triagebot maintainers"
43
43
}
44
44
45
+ resource "aws_identitystore_group" "release" {
46
+ identity_store_id = local. identity_store_id
47
+
48
+ display_name = " release"
49
+ description = " The release team"
50
+ }
51
+
45
52
# The different permission sets a group may have assigned to it
46
53
47
54
resource "aws_ssoadmin_permission_set" "administrator_access" {
@@ -156,6 +163,69 @@ resource "aws_ssoadmin_permission_set_inline_policy" "triagebot_access" {
156
163
permission_set_arn = aws_ssoadmin_permission_set. triagebot_access . arn
157
164
}
158
165
166
+ // Release team permission to start a new release
167
+
168
+ resource "aws_ssoadmin_permission_set" "start_release" {
169
+ instance_arn = local. instance_arn
170
+ name = " StartRelease"
171
+ }
172
+
173
+ resource "aws_ssoadmin_permission_set_inline_policy" "start_release" {
174
+ instance_arn = local. instance_arn
175
+ permission_set_arn = aws_ssoadmin_permission_set. start_release . arn
176
+
177
+ inline_policy = jsonencode ({
178
+ Version = " 2012-10-17"
179
+ Statement = [
180
+ {
181
+ Effect = " Allow"
182
+ Action = " lambda:InvokeFunction"
183
+ Resource = " arn:aws:lambda:us-west-1:890664054962:function:start-release"
184
+ },
185
+ {
186
+ Effect = " Allow"
187
+ Action = [
188
+ " codebuild:StopBuild" ,
189
+ ]
190
+ Resource = [
191
+ " arn:aws:codebuild:us-west-1:890664054962:project/promote-release--dev" ,
192
+ " arn:aws:codebuild:us-west-1:890664054962:project/promote-release--prod" ,
193
+ ]
194
+ },
195
+ {
196
+ // This is a safeguard to ensure members of the release team can never
197
+ // start any CodeBuild job directly, but rather have to go through the
198
+ // lambda. This is because the StartBuild permission not only allows
199
+ // starting the build (which would be fine), but also override any part
200
+ // of the build definition, including the executed steps.
201
+ Effect = " Deny"
202
+ Action = " codebuild:StartBuild"
203
+ Resource = " *"
204
+ },
205
+ {
206
+ Effect = " Allow"
207
+ Action = [
208
+ // Subset of CloudwatchReadOnlyAccess
209
+ // See https://docs.aws.amazon.com/aws-managed-policy/latest/reference/CloudWatchReadOnlyAccess.html
210
+ " logs:Get*" ,
211
+ " logs:List*" ,
212
+ " logs:StartQuery" ,
213
+ " logs:Describe*" ,
214
+ " logs:FilterLogEvents" ,
215
+ " logs:StartLiveTail" ,
216
+ " logs:StopLiveTail" ,
217
+ ]
218
+ Resource = [
219
+ " arn:aws:logs:us-west-1:890664054962:log-group:/dev/promote-release" ,
220
+ " arn:aws:logs:us-west-1:890664054962:log-group:/dev/promote-release:*" ,
221
+ " arn:aws:logs:us-west-1:890664054962:log-group:/prod/promote-release" ,
222
+ " arn:aws:logs:us-west-1:890664054962:log-group:/prod/promote-release:*" ,
223
+ ]
224
+ },
225
+ ]
226
+ })
227
+ }
228
+
159
229
# The assignment of groups to accounts with their respective permission sets
160
230
161
231
locals {
@@ -184,6 +254,8 @@ locals {
184
254
permissions : [aws_ssoadmin_permission_set.view_only_access] },
185
255
{ group : aws_identitystore_group.triagebot,
186
256
permissions : [aws_ssoadmin_permission_set.triagebot_access] },
257
+ { group : aws_identitystore_group.release,
258
+ permissions : [aws_ssoadmin_permission_set.start_release] },
187
259
]
188
260
},
189
261
# crates-io Staging
0 commit comments