【问题标题】:Allow developers to create AWS Lambda or SAM without granting Administrator access允许开发人员在不授予管理员访问权限的情况下创建 AWS Lambda 或 SAM
【发布时间】:2021-07-13 04:35:09
【问题描述】:

似乎不可能允许开发人员在 AWS 中创建 Lambda 并创建或维护 SAM 应用程序,而无需将 AdministratorAccess 策略附加到他们的开发人员角色。 AWS 记录了一个建议的 IAM 设置,其中每个人都只是管理员,或者只有拥有 IAMFullAccess,或者包含“iam:AttachRolePolicy”的更具体的权限集,所有这些都归结为仍然有足够的访问权限来授予只需 1 个 API 调用即可随意授予任何人的管理员访问权限。

除了为每个 SAM 或 Lambda 部署创建一个新的 AWS 账户之外,似乎没有任何安全的方法来管理它,但我真的希望我遗漏了一些明显的东西。也许有人知道标签、权限边界和 IAM 路径的组合可以缓解这种情况?

我参考的文档:https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-permissions.html 打开:

授予用户管理权限的主要选项有三个 无服务器应用程序。每个选项为用户提供不同的 访问控制级别。

  1. 授予管理员权限。
  2. 附加必要的 AWS 托管策略。
  3. 授予特定的 AWS Identity and Access Management (IAM) 权限。

再往下,一个示例应用程序用于指定更具体的权限:

例如,以下 AWS 托管策略足以 部署示例 Hello World 应用程序:

  • AWSCloudFormationFullAccess
  • IAMFullAccess
  • AWSLambda_FullAccess
  • AmazonAPIGateway 管理员
  • AmazonS3FullAccess
  • AmazonEC2ContainerRegistryFullAccess

在文档的末尾,AWS IAM 政策文档描述了一组相当冗长的权限,但包含提到的“iam:AttachRolePolicy”权限,其中包含可能应用的角色的通配符资源。

【问题讨论】:

  • “建议的 AWS 文档” - 你能分享一个链接吗?
  • @Marcin 是的,我会将其与提取的段落一起添加,以防文档将来移动。
  • 我明白了。您要么必须每次创建这些角色,以便您的开发人员只使用它们,而不是创建或修改。如果没有,那么您可以按照您的指定使用边界策略,这是一种尝试并查看为您的用例找到正确集合的方法。
  • 另外,您可以将开发人员放在他们自己的账户中,作为 AWS org 的一部分。然后,您可以使用 SCP 策略而不是边界策略来限制它们的帐户范围的权限。
  • 我明白你的意思。我认为边界和/或 SCP 是要考虑的首选。但除了您可以在文档中找到的内容之外,我没有任何示例。

标签: amazon-web-services security aws-lambda amazon-iam aws-sam


【解决方案1】:

AWS 有一个适用于开发人员的 PowerUserAccess 托管策略。它使他们能够访问大部分服务,并且无法访问管理活动,包括 IAMOrganizationAccount 管理。

  • 您可以为开发人员创建一个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"
            }
        }
    }
]
}

注意:它假定SAM 模板中的Lambda 函数名称中包含单词Function。 (替换 ARNs 中的 AWS 帐号)。

  • 现在您可以将上述策略附加到Developers IAM 组。 (这会将 SAM 部署权限授予所有开发人员)
  • 或者您可以为SAM 开发人员创建另一个IAM 组(例如SAM-Developers)并将上述策略附加到SAM-Developers 组。现在将适当的开发人员(需要使用 SAM 进行部署)添加到这个新的 IAM 组 (SAM-Developers)。
  • 也在 SAM 模板中定义 Permissions Boundary

这是SAM 模板中的PermissionsBoundary 示例。

Globals:
  Function:
    Timeout: 15
    PermissionsBoundary: arn:aws:iam::aws:policy/PowerUserAccess

这样,开发人员应该能够使用SAM 进行部署,前提是他们没有任何限制性权限边界。

您可以为开发人员将权限边界设置为AdministratorAccess,或者创建一个新的策略,将PowerUserAccess 的权限与上述定义的“SAM”部署策略相结合。然后将此新策略设置为开发人员的权限边界。

此解决方案仅供参考,您可以在此基础上进行构建。 PowerUserAccess 已设置为Lambda 函数角色的权限边界。 PowerUserAccess 过于宽松,您应该进一步努力,为您的开发人员和 L​​ambda 函数找出正确的权限级别。

旁注:您可以使用this 策略来允许用户管理自己的凭据。

【讨论】:

  • 我能想到的所有权限边界的问题是,它们仍然允许任何人将 PowerUserAccess、AdministratorAcsss 或 FullIAMAccess 附加到任何角色,包括他们当前的角色。一旦 IAM 被触动,似乎不可能允许动态角色创建或策略附件同时公开各种获取管理员访问权限的方法。
  • 除非您将上述策略更改为将 Resource 设为 *,否则用户将无法操作除应包含 role/*FunctionRole 的模式之外的任何其他角色。现在,这些角色已为它们定义了权限边界。即使给定 IAMFullAccess 或 AdministratorAccsss,它们也不能超出权限边界,即,在此设置中,它们不能执行超出 PowerUserAccess 的任何操作。默认情况下,用户也不能承担这些新角色。明确拒绝那些由开发人员承担的功能角色
  • 确保不允许开发人员从任何带有明确拒绝的 IAM 实体中删除权限边界。注意:权限边界不授予IAM实体任何权限,而只是一个边界,以确保用户如果错误地获得了一些权限,那么他仍然不能超出这些边界。将它们视为拒绝,即使您有允许,拒绝也是最终结果。最后,您必须找出答案中提到的开发人员和功能的正确权限边界。这只是给出一个想法,如何做到这一点。
  • 我建议你试试这个,让我们知道它是怎么回事。如果在这种情况下允许任何超越 PowerUser 的权限升级,我也很想修复此策略。
猜你喜欢
  • 1970-01-01
  • 2012-07-12
  • 1970-01-01
  • 2019-09-17
  • 2012-03-15
  • 1970-01-01
  • 2015-06-19
  • 2020-10-05
  • 2019-11-28
相关资源
最近更新 更多