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 授予访问权限的同一组权限。
答案 0 :(得分:0)
这对于 Attribute Based Access Control (ABAC) in IAM 来说是一个很好的用例。
通过将开发者的功能更新权限基于与其用户/角色相关联的标签,您无需在 EvilDev 的策略中指定功能名称,并且仍然可以阻止他更新 GoodDev 的功能。
这可以进一步抽象为包含 iam:PassRole
权限。