diff --git a/infrastructure/terraform/modules/lambda/README.md b/infrastructure/terraform/modules/lambda/README.md index d99cb52..b259c4f 100644 --- a/infrastructure/terraform/modules/lambda/README.md +++ b/infrastructure/terraform/modules/lambda/README.md @@ -30,6 +30,7 @@ output "processor_lambda_error_rate_alarm_arn" { | Name | Description | Type | Default | Required | | ---- | ----------- | ---- | ------- | :------: | +| [additional\_assume\_role\_policy\_statements](#input\_additional\_assume\_role\_policy\_statements) | Additional IAM policy statements to attach to the Lambda execution role |
list(object({
sid = string
effect = string
principal = object({
type = string
identifiers = list(string)
})
condition = optional(list(object({
test = string
variable = string
values = list(string)
})))
}))
| `[]` | no | | [application\_log\_level](#input\_application\_log\_level) | The detail level of the logs the application sends to CloudWatch | `string` | `"INFO"` | no | | [aws\_account\_id](#input\_aws\_account\_id) | The AWS Account ID (numeric) | `string` | n/a | yes | | [component](#input\_component) | The name of the tfscaffold component | `string` | n/a | yes | diff --git a/infrastructure/terraform/modules/lambda/data_iam_policy_document_lambda_assumerole.tf b/infrastructure/terraform/modules/lambda/data_iam_policy_document_lambda_assumerole.tf index bea133b..99c9c03 100644 --- a/infrastructure/terraform/modules/lambda/data_iam_policy_document_lambda_assumerole.tf +++ b/infrastructure/terraform/modules/lambda/data_iam_policy_document_lambda_assumerole.tf @@ -16,4 +16,31 @@ data "aws_iam_policy_document" "lambda_assumerole" { "sts:AssumeRole", ] } + + dynamic "statement" { + for_each = var.additional_assume_role_policy_statements + + content { + sid = statement.value.sid + effect = statement.value.effect + + principals { + type = statement.value.principal.type + identifiers = statement.value.principal.identifiers + } + + actions = [ + "sts:AssumeRole", + ] + dynamic "condition" { + for_each = statement.value.condition + + content { + test = condition.value.test + variable = condition.value.variable + values = condition.value.values + } + } + } + } } diff --git a/infrastructure/terraform/modules/lambda/variables.tf b/infrastructure/terraform/modules/lambda/variables.tf index a39fe10..cb09d02 100644 --- a/infrastructure/terraform/modules/lambda/variables.tf +++ b/infrastructure/terraform/modules/lambda/variables.tf @@ -400,3 +400,21 @@ variable "reserved_concurrent_executions" { description = "The reserved concurrency for the Lambda function. Set to -1 to remove the concurrency limit, or 0 to prevent the Lambda from being invoked." default = -1 } + +variable "additional_assume_role_policy_statements" { + type = list(object({ + sid = string + effect = string + principal = object({ + type = string + identifiers = list(string) + }) + condition = optional(list(object({ + test = string + variable = string + values = list(string) + }))) + })) + description = "Additional IAM policy statements to attach to the Lambda execution role" + default = [] +}