首页 > 解决方案 > 允许开发人员在不授予管理员访问权限的情况下创建 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打开:

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

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

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

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

  • AWSCloudFormationFullAccess
  • IAM完全访问
  • AWSLambda_FullAccess
  • AmazonAPIGateway 管理员
  • AmazonS3FullAccess
  • AmazonEC2ContainerRegistryFullAccess

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

标签: amazon-web-servicessecurityaws-lambdaamazon-iamaws-sam

解决方案


AWS 有一个PowerUserAccess适用于开发人员的托管策略。它使他们可以访问大多数服务,并且无法访问管理活动IAM,包括OrganizationAccount管理。

  • 您可以为开发人员创建一个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组(例如)并将上述策略附加到该组。现在将适当的开发人员(需要使用 部署)添加到这个新组 ( )。SAMSAM-DevelopersSAM-DevelopersSAMIAMSAM-Developers
  • 也在 SAM 模板中定义Permissions Boundary

PermissionsBoundary这是SAM模板中的示例。

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

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

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

此解决方案仅供参考,您可以在此基础上进行构建。PowerUserAccess已设置为Lambda功能角色的权限边界。这PowerUserAccess太宽松了,您应该进一步解决此问题,以找出适合您的开发人员和 L​​ambda 函数的权限级别。

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


推荐阅读