如何防止开发人员恶意运行提升的 AWS Lambda 函数

时间:2021-04-29 01:52:07

标签: aws-lambda amazon-iam

GoodDev 创建 AWS 函数“DoAnything”,并将其设置为使用具有提升访问权限的“HighPrivilege”角色运行,因为她拥有对 iam:PassRole 的完全访问权限。

EvilDev 与 GoodDev 在同一家公司工作并共享同一个 AWS 账户,他的 iam:PassRole 权限有限,因此他只能分配权限有限的“LowPrivilege”角色。但是,他确实有一堆 Lambda 函数需要能够以他的较低权限集运行,因此管理员为他设置了更新函数的权限,如下所示:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "lambda:UpdateFunctionCode",
            "Resource": "arn:aws:lambda:*:123456789:function:*"
        }
    ]
}

在这种情况下,EvilDev 可以通过用自己的代码覆盖 GoodDev 的函数代码来运行他的恶意代码,使其以完全访问权限运行并造成严重破坏。

管理员可以通过将 EvilDev 的 UpdateFunctionCode 权限限制为一组命名的函数来解决这个问题,但这意味着每次他想要创建一个新函数时都要更新他的 IAM 策略(这种情况经常发生),然后将其乘以数量其他类似限制的用户,这是不切实际的。

管理员有没有办法将 EvilDev 沙箱化为仅更新以“LowPrivilege”角色运行的功能,并阻止他更新以“HighPrivilege”角色运行的功能?理想情况下,这将源自 PassRole 授予访问权限的同一组权限。

1 个答案:

答案 0 :(得分:0)

这对于 Attribute Based Access Control (ABAC) in IAM 来说是一个很好的用例。

通过将开发者的功能更新权限基于与其用户/角色相关联的标签,您无需在 EvilDev 的策略中指定功能名称,并且仍然可以阻止他更新 GoodDev 的功能。

这可以进一步抽象为包含 iam:PassRole 权限。

相关问题