Joh*_*tes 7 security amazon-web-services amazon-iam aws-lambda aws-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
- AmazonAPI网关管理员
- AmazonS3完全访问
- AmazonEC2ContainerRegistryFullAccess
在文档的末尾,AWS IAM 策略文档描述了一组相当冗长的权限,但包含提到的“iam:AttachRolePolicy”权限以及可能应用该权限的角色的通配符资源。
AWS 有一项PowerUserAccess
针对开发人员的托管策略。它使他们能够访问大多数服务,但无法访问管理活动IAM
,包括管理Organization
和Account
管理。
IAM
组 (Say 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"
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
注意:它假设模板Lambda
中的函数名称包含其中的SAM
单词。Function
(替换 s 中的 AWS 帐号ARN
)。
Developers
IAM
组中。(这将为所有开发人员授予 SAM 部署权限)IAM
组SAM
(例如SAM-Developers
)并将上述策略附加到该SAM-Developers
组。现在将适当的开发人员(需要使用 进行部署SAM
)添加到这个新IAM
组 ( SAM-Developers
)。Permissions Boundary
也在 SAM 模板中定义。PermissionsBoundary
这是模板中的示例SAM
。
Globals:
Function:
Timeout: 15
PermissionsBoundary: arn:aws:iam::aws:policy/PowerUserAccess
Run Code Online (Sandbox Code Playgroud)
这样,开发人员应该能够SAM
在没有任何限制性权限边界的情况下进行部署。
您可以为开发人员设置权限边界AdministratorAccess
,或创建一个新策略,该策略结合了“SAM”部署的权限PowerUserAccess
和上面定义的策略。然后将这个新的Policy设置为开发人员的权限边界。
此解决方案仅供参考,您可以在此基础上进行构建。已PowerUserAccess
设置为Lambda
功能角色的权限边界。这PowerUserAccess
太宽松了,您应该进一步解决这个问题,为您的开发人员和 Lambda 函数找到合适的权限级别。
旁注:您可以使用此策略来允许用户管理自己的凭据。
归档时间: |
|
查看次数: |
1991 次 |
最近记录: |