允许开发人员创建 AWS Lambda 或 SAM,而无需授予管理员访问权限

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,其打开方式为:

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

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

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

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

  • AWSCloudFormationFullAccess
  • IAM完全访问
  • AWSLambda_FullAccess
  • AmazonAPI网关管理员
  • AmazonS3完全访问
  • AmazonEC2ContainerRegistryFullAccess

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

GSS*_*ain 2

AWS 有一项PowerUserAccess针对开发人员的托管策略。它使他们能够访问大多数服务,但无法访问管理活动IAM,包括管理OrganizationAccount管理。

  • 您可以为开发人员创建一个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 部署权限)
  • 或者您可以为开发人员创建另一个IAMSAM(例如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太宽松了,您应该进一步解决这个问题,为您的开发人员和 L​​ambda 函数找到合适的权限级别。

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