对一个AWS Lambda函数的IAM角色限制sts:AssumeRole

txo*_*mon 8 amazon-web-services amazon-iam aws-lambda

我担心安全性。IAM角色的创建存在很高的安全风险,并且只能将可以承担角色的角色指定为AWS Lambda并不足以满足IMO的要求。如果不谨慎对待,可能会导致特权升级。

如何创建特定于某些Lambda函数的IAM角色?

我还没有找到类似的东西,但我相信这是可能的。

此角色还将附加一些策略:

{
  "Action": "sts:AssumeRole",
  "Principal": {
    "Service": "lambda.amazonaws.com"
  },
  "Effect": "Allow",
  "Sid": ""
}
Run Code Online (Sandbox Code Playgroud)

通常,在其他角色中,您将使用Principal子句来确定哪些帐户可以担任该角色。

{
 "Effect": "Allow",
 "Principal": {
   "AWS": "arn:aws:iam::123456789:root"
 },
 "Action": "sts:AssumeRole"
}
Run Code Online (Sandbox Code Playgroud)

根据@Michael在评论中,我必须说出哪些用户可以在哪些角色上使用传递角色,因此问题是,我该如何确定哪些用户可以确切地传递此角色?

如果是这样,这个问题的答案将分两个步骤解决。使该角色只能由Lambda服务承担(已经存在),然后为每个用户制定一个具有PassRole限制的策略。

ste*_*r25 3

我向 AWS 支持询问了此事。他们表示,他们目前*不支持假设角色/信任策略中的条件来限制哪些函数可以通过匹配函数名称模式来承担角色。

相反,他们建议在执行策略中添加条件(而不是假设/信任策略):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "WhitelistSpecificLambdaFunction",
            "Effect": "Deny",
            "Action": "*",
            "Resource": "*",
            "Condition": {
                "StringNotLike": {
                    "aws:userid": "AROAUISMSUAFHSJDJURKJ:TestLambda"
                }
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

-- 此策略拒绝访问除“aws:userid”条件键中提及的特定 Lambda 函数之外的所有 Lambda 函数。其他 Lambda 函数将能够承担该角色,但它们将被拒绝执行任何操作,但如果它们只是打印或返回任何变量/数据,则该函数将起作用。

--> 注意:条件键“aws:userid”指定当前角色的唯一 ID,该键对应的值具有以下格式:“role-id:role-session-name”。

-- 对于我使用的示例角色,IAM 角色 ID 为“AROAUISMSUAFHSJDJURKJ”。

-- 对于 Lambda 函数,角色会话名称与 Lambda 函数名称相同。在此示例中,它是“TestLambda”,因此 aws:userid 变为“aws:userid”:“AROAUISMSUAFHSJDJURKJ:TestLambda”

* 他们将我的名字添加到现有请求中以添加此功能