【发布时间】:2021-11-14 15:52:47
【问题描述】:
解决方案:诀窍是创建另一个角色,该角色不附加到 lambda 角色,而是通过 STS 承担。
TL;DR 如何创建一个 Lambda 函数可以承担的角色,该角色引用 lambda,在创建 lambda 之前
大家好,
我将 Terraform v1.0.5 与 AWS 一起使用。我有一个 lambda,其中包含以下代码:
assumed_role = sts_client.assume_role(
...
RoleSessionName="tms_rules_settings_lambda",
...
)
为此,我必须给我的 lambda 一个策略,让它可以承担这样的角色。因此,我有以下 Terraform。
locals {
tms_rules_settings_lambda_role_name = "tms_rules_settings_lambda_role"
tms_rules_settings_lambda_func_name = "tms_rules_settings_lambda"
}
...
** The Lambda Setup**
resource "aws_lambda_function" "tms_rules_settings_lambda" {
...
function_name = local.tms_rules_settings_lambda_func_name
role = aws_iam_role.tms_rules_settings_lambda_role.arn
...
}
...
** The Lambda Role Setup**
resource "aws_iam_role" "tms_rules_settings_lambda_role" {
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Principal": {
"AWS": "arn:aws:sts::${data.aws_caller_identity.current.account_id}:assumed-role/${local.tms_rules_settings_lambda_role_name}/${local.tms_rules_settings_lambda_func_name}",
"Service": "lambda.amazonaws.com"
},
"Effect": "Allow",
"Sid": ""
}
]
}
EOF
}
这会导致以下错误:
Error: Error creating IAM Role tms_rules_settings_lambda_role:
MalformedPolicyDocument: Invalid principal in policy:
"AWS":"arn:aws:sts::267601234567:assumed-role/tms_rules_settings_lambda_role/tms_rules_settings_lambda"
我相信这是因为 lambda 和角色相互引用,而当一个不存在时它会爆炸。
当主体(lambda)不存在时,我如何为 lambda 创建角色。
非常感谢任何帮助。
【问题讨论】:
-
@Marcin 我停止尝试将角色附加到 Lambda,而是将角色附加到任何内容。 Lambda 被授予担任此角色的权限。所以我的代码承担了这个角色并做它需要做的事情。
-
感谢您告诉我。如果给出的任何答案有帮助,那么接受它是一种很好的做法。
标签: amazon-web-services aws-lambda terraform