amazon-web-services - 允许开发人员在不授予管理员访问权限的情况下创建 AWS Lambda 或 SAM
问题描述
似乎不可能允许开发人员在 AWS 中创建 Lambda 并创建或维护 SAM 应用程序,而无需将 AdministratorAccess 策略附加到他们的开发人员角色。AWS 记录了一个建议的 IAM 设置,其中每个人都只是管理员,或者只有IAMFullAccess,或者包含“iam:AttachRolePolicy”的更具体的权限集,这一切都归结为仍然有足够的访问权限,可以随意向任何人授予 AdministratorAccess 权限只需 1 个 API 调用。
除了为每个 SAM 或 Lambda 部署创建一个新的 AWS 账户外,似乎没有任何安全的方法来管理它,但我真的希望我遗漏了一些明显的东西。也许有人知道标签、权限边界和 IAM 路径的组合可以缓解这种情况?
我参考的文档:https ://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-permissions.html打开:
授予用户管理无服务器应用程序的权限有三个主要选项。每个选项都为用户提供不同级别的访问控制。
- 授予管理员权限。
- 附加必要的 AWS 托管策略。
- 授予特定的 AWS Identity and Access Management (IAM) 权限。
再往下,一个示例应用程序用于指定稍微更具体的权限:
例如,以下 AWS 托管策略足以部署示例 Hello World 应用程序:
- AWSCloudFormationFullAccess
- IAM完全访问
- AWSLambda_FullAccess
- AmazonAPIGateway 管理员
- AmazonS3FullAccess
- AmazonEC2ContainerRegistryFullAccess
在文档的末尾,AWS IAM 策略文档描述了一组相当冗长的权限,但包含提到的“iam:AttachRolePolicy”权限以及可能应用的角色的通配符资源。
解决方案
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
。(替换 s 中的 AWS 帐号ARN
)。
- 现在您可以将上述策略附加到
Developers
IAM
组。(这将为所有开发人员提供 SAM 部署权限) - 或者您可以为开发人员创建另一个
IAM
组(例如)并将上述策略附加到该组。现在将适当的开发人员(需要使用 部署)添加到这个新组 ( )。SAM
SAM-Developers
SAM-Developers
SAM
IAM
SAM-Developers
- 也在 SAM 模板中定义
Permissions Boundary
。
PermissionsBoundary
这是SAM
模板中的示例。
Globals:
Function:
Timeout: 15
PermissionsBoundary: arn:aws:iam::aws:policy/PowerUserAccess
SAM
这样,如果开发人员没有任何限制性权限边界,他们应该能够使用它进行部署。
您可以AdministratorAccess
为开发人员设置权限边界或创建一个新策略,该策略结合了PowerUserAccess
“SAM”部署的权限和上述定义的策略。然后将此新策略设置为开发人员的权限边界。
此解决方案仅供参考,您可以在此基础上进行构建。PowerUserAccess
已设置为Lambda
功能角色的权限边界。这PowerUserAccess
太宽松了,您应该进一步解决此问题,以找出适合您的开发人员和 Lambda 函数的权限级别。
旁注:您可以使用此策略来允许用户管理自己的凭据。
推荐阅读
- oracle - spring boot + oracle 驱动 + 没有合适的驱动
- javascript - 如何获取持有状态的“activeCat”对象的所有信息?
- asp.net - 如何在 WebForms ASP .NET 站点中读取 ASP .Net cookie
- python - 访问在 while 循环中生成的函数的名称。(Python)
- javascript - 在 Ionic Vue 应用程序中使用选项卡时导航到不同路线的问题
- javascript - 正则表达式从 HTML 注释中获取属性,如字符串
- python - ValueError:检查目标时出错:预期dense_2的形状为(2,),但数组的形状为(75,)
- c# - 如何在 NSwagStudio 中为 C# 客户端自定义生成的 DTO
- linux - 用 tls_passthrough 脚本剥离的 mitmproxy 标头?
- azure-active-directory - 为什么我会收到“图形 API 访问令牌失败:'Group.Read.All'”