Skip to content
This repository was archived by the owner on Jan 16, 2025. It is now read-only.

Commit 5514c72

Browse files
v-rosanpalm
andauthored
feat(runners): allow to use a shared encrypted AMI (#2933)
* feat: allow to use a shared encrypted AMI * update README.md * fix fmt * add ami_kms_key_arn to pool module * add ami_kms_key_arn to multi-runner module * remove unneeded permissions from lambda-scale-down.json --------- Co-authored-by: Niek Palm <[email protected]>
1 parent a59be76 commit 5514c72

File tree

13 files changed

+122
-88
lines changed

13 files changed

+122
-88
lines changed

Diff for: main.tf

+1
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ module "runners" {
202202
ami_filter = var.ami_filter
203203
ami_owners = var.ami_owners
204204
ami_id_ssm_parameter_name = var.ami_id_ssm_parameter_name
205+
ami_kms_key_arn = var.ami_kms_key_arn
205206

206207
sqs_build_queue = aws_sqs_queue.queued_builds
207208
github_app_parameters = local.github_app_parameters

Diff for: modules/multi-runner/runners.tf

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ module "runners" {
2929
ami_filter = each.value.runner_config.ami_filter
3030
ami_owners = each.value.runner_config.ami_owners
3131
ami_id_ssm_parameter_name = each.value.runner_config.ami_id_ssm_parameter_name
32+
ami_kms_key_arn = each.value.runner_config.ami_kms_key_arn
3233

3334
sqs_build_queue = { "arn" : each.value.arn }
3435
github_app_parameters = local.github_app_parameters

Diff for: modules/multi-runner/variables.tf

+1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ variable "multi_runner_config" {
3939
ami_filter = optional(map(list(string)), null)
4040
ami_owners = optional(list(string), ["amazon"])
4141
ami_id_ssm_parameter_name = optional(string, null)
42+
ami_kms_key_arn = optional(string, "")
4243
create_service_linked_role_spot = optional(bool, false)
4344
delay_webhook_event = optional(number, 30)
4445
disable_runner_autoupdate = optional(bool, false)

Diff for: modules/runners/README.md

+79-86
Large diffs are not rendered by default.

Diff for: modules/runners/main.tf

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ locals {
1717
userdata_template = var.userdata_template == null ? local.default_userdata_template[var.runner_os] : var.userdata_template
1818
kms_key_arn = var.kms_key_arn != null ? var.kms_key_arn : ""
1919
s3_location_runner_distribution = var.enable_runner_binaries_syncer ? "s3://${var.s3_runner_binaries.id}/${var.s3_runner_binaries.key}" : ""
20-
2120
default_ami = {
2221
"windows" = { name = ["Windows_Server-2022-English-Core-ContainersLatest-*"] }
2322
"linux" = var.runner_architecture == "arm64" ? { name = ["amzn2-ami-kernel-5.*-hvm-*-arm64-gp2"] } : { name = ["amzn2-ami-kernel-5.*-hvm-*-x86_64-gp2"] }
@@ -38,7 +37,8 @@ locals {
3837
"linux" = "${path.module}/templates/start-runner.sh"
3938
}
4039

41-
ami_filter = coalesce(var.ami_filter, local.default_ami[var.runner_os])
40+
ami_kms_key_arn = var.ami_kms_key_arn != null ? var.ami_kms_key_arn : ""
41+
ami_filter = coalesce(var.ami_filter, local.default_ami[var.runner_os])
4242

4343
enable_job_queued_check = var.enable_job_queued_check == null ? !var.enable_ephemeral_runners : var.enable_job_queued_check
4444
}

Diff for: modules/runners/policies/lambda-scale-up.json

+11
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,17 @@
5252
"kms:Decrypt"
5353
],
5454
"Resource": "${kms_key_arn}"
55+
%{ endif ~}
56+
%{ if ami_kms_key_arn != "" ~}
57+
},
58+
{
59+
"Effect": "Allow",
60+
"Action": [
61+
"kms:DescribeKey",
62+
"kms:ReEncrypt*",
63+
"kms:Decrypt"
64+
],
65+
"Resource": "${ami_kms_key_arn}"
5566
%{ endif ~}
5667
}
5768
]

Diff for: modules/runners/pool.tf

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ module "pool" {
1515
instance_target_capacity_type = var.instance_target_capacity_type
1616
instance_types = var.instance_types
1717
kms_key_arn = local.kms_key_arn
18+
ami_kms_key_arn = local.ami_kms_key_arn
1819
lambda = {
1920
log_level = var.log_level
2021
log_type = var.log_type

Diff for: modules/runners/pool/main.tf

+1
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ resource "aws_iam_role_policy" "pool" {
7272
github_app_id_arn = var.config.github_app_parameters.id.arn
7373
github_app_key_base64_arn = var.config.github_app_parameters.key_base64.arn
7474
kms_key_arn = var.config.kms_key_arn
75+
ami_kms_key_arn = var.config.ami_kms_key_arn
7576
})
7677
}
7778

Diff for: modules/runners/pool/policies/lambda-pool.json

+11
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,17 @@
4343
"kms:Decrypt"
4444
],
4545
"Resource": "${kms_key_arn}"
46+
%{ endif ~}
47+
%{ if ami_kms_key_arn != "" ~}
48+
},
49+
{
50+
"Effect": "Allow",
51+
"Action": [
52+
"kms:DescribeKey",
53+
"kms:ReEncrypt*",
54+
"kms:Decrypt"
55+
],
56+
"Resource": "${ami_kms_key_arn}"
4657
%{ endif ~}
4758
}
4859
]

Diff for: modules/runners/pool/variables.tf

+1
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ variable "config" {
5151
}))
5252
role_permissions_boundary = string
5353
kms_key_arn = string
54+
ami_kms_key_arn = string
5455
role_path = string
5556
ssm_token_path = string
5657
})

Diff for: modules/runners/scale-up.tf

+1
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ resource "aws_iam_role_policy" "scale_up" {
8888
github_app_id_arn = var.github_app_parameters.id.arn
8989
github_app_key_base64_arn = var.github_app_parameters.key_base64.arn
9090
kms_key_arn = local.kms_key_arn
91+
ami_kms_key_arn = local.ami_kms_key_arn
9192
})
9293
}
9394

Diff for: modules/runners/variables.tf

+6
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,12 @@ variable "ami_id_ssm_parameter_name" {
142142
default = null
143143
}
144144

145+
variable "ami_kms_key_arn" {
146+
description = "Optional CMK Key ARN to be used to launch an instance from a shared encrypted AMI"
147+
type = string
148+
default = null
149+
}
150+
145151
variable "enable_userdata" {
146152
description = "Should the userdata script be enabled for the runner. Set this to false if you are using your own prebuilt AMI"
147153
type = bool

Diff for: variables.tf

+6
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,12 @@ variable "ami_id_ssm_parameter_name" {
307307
default = null
308308
}
309309

310+
variable "ami_kms_key_arn" {
311+
description = "Optional CMK Key ARN to be used to launch an instance from a shared encrypted AMI"
312+
type = string
313+
default = null
314+
}
315+
310316
variable "lambda_s3_bucket" {
311317
description = "S3 bucket from which to specify lambda functions. This is an alternative to providing local files directly."
312318
type = string

0 commit comments

Comments
 (0)