允许开发人员在不授予管理员访问权限的情况下创建 AWS Lambda 或 SAM

时间:2021-04-18 23:05:36

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

允许开发人员在 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 其打开方式为:

<块引用>

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

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

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

<块引用>

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

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

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

1 个答案:

答案 0 :(得分:0)

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"
            }
        }
    }
]
}

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

  • 现在您可以将上述政策附加到 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 函数找出正确的权限级别。

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

相关问题