I’m having some issues writing a concat statement to dynamically build an AWS policy statement.
I need to add a dynamic list of Secrets Manager secrets to an IAM Role statement, but I’m getting stuck here.
Can anyone help?
I’m getting this error:
Error: Invalid template interpolation value
on terraform/lambda.tf line 89, in resource "aws_iam_role_policy" "iam_policy_for_lambda_secrets":
88:
89: concat(
90: ["arn:aws:secretsmanager:${lookup(local.region, local.environment)}:111111111111:secret:customer*"],
91: [
92: for name in lookup(local.lambda_secrets_access, local.environment):
93: "arn:aws:secretsmanager:${lookup(local.region, local.environment)}:111111111111:secret:${name}"
94: ]
95: )
96:
|----------------
| local.environment is "dev"
| local.lambda_secrets_access is object with 2 attributes
| local.region is object with 2 attributes
Cannot include the given value in a string template: string required.
My variables:
// Lookup for Region
region = {
"dev" = "eu-west-1"
}
// Region lookup relation to workspace
environment = "${terraform.workspace}"
// List of extra Secrets Manager secrets to gain access to
lambda_secrets_access = {
"dev" = ["my-secret-i-want-access-JHKku8"]
}
This is my problematic code:
resource "aws_iam_role_policy" "iam_policy_for_lambda_secrets" {
name = "policy_name"
role = aws_iam_role.iam_role_for_lambda.id
policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "secretsmanager:GetSecretValue",
"Resource": ${
concat(
["arn:aws:secretsmanager:${lookup(local.region, local.environment)}:111111111111:secret:customer*"],
[
for name in lookup(local.lambda_secrets_access, local.environment):
"arn:aws:secretsmanager:${lookup(local.region, local.environment)}:111111111111:secret:${name}"
]
)
}
}
]
}
EOF
}