Nag*_*ama 6 amazon-web-services amazon-iam aws-lambda
我们有这个要求来自渗透测试。我有一个 lambda 函数说“add_address”和一个角色“account_management_role”。
我想让“account_management_role”只能由“add_address”lambda函数承担。我不希望任何其他 lambda 函数承担这个角色。
我尝试了不同的东西,我尝试在 IAM 角色的“信任关系”中添加这个条目。这没有用。
任何人都知道如何让这个工作?
{
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"ArnEquals": {
"aws:SourceArn": "<ARN of lambda function>"
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
小智 5
旧的,但最近遇到了这个问题。答案是以下信任关系:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringLike": {
"lambda:FunctionArn": "arn:aws:lambda:eu-west-1:[account_id]:function:testaa"
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
看起来这是一个错误。这是我与 AWS 支持团队创建的票证收到的回复。看起来限制谁可以承担该角色的唯一方法是通过更改用户级别访问权限来限制
我继续尝试在单个 Lambda 函数中实现您想要实现的限制,但我们无法让它正常工作;我们进行了一系列测试来确定结果,但我们的测试失败了,因为我们无法指定特定功能作为承担角色的条件。这是因为初始角色假设是由 Lambda 服务本身执行的,甚至没有查找它想要调用的函数。我通过将“IfExists”修饰符添加到“StringLike”发现了这一点:这告诉 IAM 检查 AssumeRole 请求中的此特定特征,但如果它不存在,则忽略条件并继续。该函数无法在特定条件集下运行,即使提供了确切的 ARN,它仍然失败。然而,在添加 IfExists 后,该函数起作用了……但另一个试图利用该角色的不相关函数也起作用了。这意味着在 Lambda 服务承担角色之前不会检查 Lambda 函数 ARN。Blockquote 在您调用函数时,您隐式地信任 AWS Lambda 服务来承担该角色并完全按照描述执行该函数。因此,您的信任关系不应该被修改;相反,如果您想限制特定函数的访问权限,则应限制在角色传递时调用该函数的 IAM 实体,因为实体具有足够的 iam:PassRole 权限将特定角色传递给 Lambda 服务,这然后 Lambda 用于调用该函数。以下文档显示了如何将 iam:PassRole 限制为特定角色或一组角色的示例:http://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html
归档时间: |
|
查看次数: |
5418 次 |
最近记录: |