允许开发人员在 AWS 中创建 Lambda 并创建或维护 SAM 应用程序,而基本上没有将管理员访问策略附加到他们的开发人员角色似乎是不可能的。 AWS 记录了一个建议的 IAM 设置,其中每个人都只是管理员,或者只有拥有 IAMFullAccess,或者包含“iam:AttachRolePolicy”的一组更具体的权限,所有这些都归结为仍然有足够的访问权限来授予只需调用 1 个 API,即可随意授予任何人的管理员访问权限。
除了为每个 SAM 或 Lambda 部署创建一个新的 AWS 账户之外,似乎没有任何安全的方法来管理这个,但我真的希望我错过了一些明显的东西。也许有人知道标签、权限边界和 IAM 路径的组合可以缓解这种情况?
我参考的文档:https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-permissions.html 其打开方式为:
<块引用>授予用户管理权限的三个主要选项 无服务器应用程序。每个选项为用户提供不同的 访问控制级别。
再往下看,一个示例应用程序用于指定稍微更具体的权限:
<块引用>例如,以下 AWS 托管策略足以 部署示例 Hello World 应用程序:
在文档的末尾,AWS IAM 策略文档描述了一组相当冗长的权限,但包含提到的“iam:AttachRolePolicy”权限以及可能应用到的角色的通配符资源。
答案 0 :(得分:0)
AWS 有一个 PowerUserAccess
托管策略,适用于开发人员。它使他们可以访问大多数服务,但无法访问管理活动,包括 IAM
、Organization
和 Account
管理。
IAM
组(比如 Developers
)并将托管策略 PowerUserAccess
添加到组中。将开发者添加到此群组。SAM
进行部署,开发人员需要一些 IAM
权限才能创建角色、标记角色。在回滚 CloudFormation
堆栈时,他们可能需要一些删除权限。在允许开发人员为 Lambda
函数创建新角色的同时,您需要确保他们不会使用 permissions boundary
提升权限。一个好的起点是将权限边界设置为 PowerUserAccess
。 (直到您弄清楚什么是正确的权限级别)创建一个类似这样的策略
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ReadRole",
"Effect": "Allow",
"Action": [
"iam:GetRole",
"iam:GetRolePolicy",
"iam:ListRoleTags"
],
"Resource": "arn:aws:iam::ReplaceWithYourAWSAccountNumber:role/*FunctionRole*"
},
{
"Sid": "TagRole",
"Effect": "Allow",
"Action": [
"iam:UntagRole",
"iam:TagRole"
],
"Resource": "arn:aws:iam::ReplaceWithYourAWSAccountNumber:role/*FunctionRole*"
},
{
"Sid": "WriteRole",
"Effect": "Allow",
"Action": [
"iam:DeleteRole",
"iam:DeleteRolePolicy",
"iam:AttachRolePolicy",
"iam:PutRolePolicy",
"iam:PassRole",
"iam:DetachRolePolicy"
],
"Resource": "arn:aws:iam::ReplaceWithYourAWSAccountNumber:role/*FunctionRole*"
},
{
"Sid": "CreateRoleWithPermissionsBoundry",
"Effect": "Allow",
"Action": [
"iam:CreateRole"
],
"Resource": "arn:aws:iam::ReplaceWithYourAWSAccountNumber:role/*FunctionRole*",
"Condition": {
"StringEquals": {
"iam:PermissionsBoundary": "arn:aws:iam::aws:policy/PowerUserAccess"
}
}
}
]
}
注意:它假设 Lambda
模板中的 SAM
函数名称中包含单词 Function
。 (替换 ARN
中的 AWS 帐号)。
Developers
IAM
组。 (这将向所有开发人员授予 SAM 部署权限)IAM
开发人员创建另一个 SAM
组(例如 SAM-Developers
)并将上述策略附加到 SAM-Developers
组。现在将适当的开发人员(需要使用 SAM
进行部署)添加到这个新的 IAM
组 (SAM-Developers
)。Permissions Boundary
。这是 PermissionsBoundary
模板中的示例 SAM
。
Globals:
Function:
Timeout: 15
PermissionsBoundary: arn:aws:iam::aws:policy/PowerUserAccess
这样,开发人员应该能够使用 SAM
进行部署,前提是他们没有任何限制性权限边界。
您可以将开发人员的权限边界设置为 AdministratorAccess
或创建一个新策略,该策略将 PowerUserAccess
的权限与上面为“SAM”部署定义的策略相结合。然后将此新策略设置为开发人员的权限边界。
此解决方案仅供参考,您可以以此为基础。 PowerUserAccess
已设置为 Lambda
函数角色的权限边界。 PowerUserAccess
过于宽松,您应该进一步研究这一点,为您的开发者和 Lambda 函数找出正确的权限级别。
旁注:您可以使用 this 政策来允许用户管理自己的凭据。