以有限策略授予对 AWS Lambda 服务的访问权限

Giving access to AWS Lambda service with limited policy

我正在尝试按照此 tutorial 为 shutdown/startup 实例设置一个 lambda 函数,并将特殊标签添加到 ec2 实例。

管理员用户分配给我角色的策略允许我访问所有 lambda 函数,例如

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "cloudwatch:*",
        "cognito-identity:ListIdentityPools",
        "cognito-sync:GetCognitoEvents",
        "cognito-sync:SetCognitoEvents",
        "dynamodb:*",
        "events:*",
        "iam:ListAttachedRolePolicies",
        "iam:ListRolePolicies",
        "iam:ListRoles",
        "iam:PassRole",
        "kinesis:DescribeStream",
        "kinesis:ListStreams",
        "kinesis:PutRecord",
        "lambda:*",
        "logs:*",
        "s3:*",
        "sns:ListSubscriptions",
        "sns:ListSubscriptionsByTopic",
        "sns:ListTopics",
        "sns:Subscribe",
        "sns:Unsubscribe"
      ],
      "Resource": "*"
    }
  ]
}

我在设置 Lambda function handler and role 时卡在第 6 步,而在选择 "Basic execution role" 时出错

User: arn:aws:iam::xxxx:user/Yyyy is not authorized to perform: iam:CreateRole on resource: arn:aws:iam::xxxx:role/lambda_basic_exec

我的角色策略是这样的:

   {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents"
          ],
          "Resource": "arn:aws:logs:*:*:*"
        },       
        { 
          "Effect": "Allow",
          "Action": [
            "ec2:Describe*",
            "ec2:Start*",
            "ec2:RunInstances",
            "ec2:Stop*",
           ],
           "Resource": "*"
        }
      ]
    }

鉴于我的权利有限,这似乎是合理的。

我应该如何要求我的管理员更新分配给我的策略,以便我可以按照教程中的描述成功地为 lambda 函数设置预定事件?或者这可以通过使用 IAM 的其他方式来完成,例如通过添加新角色?我只想要足够的权利。

您有安全限制,因为您需要在策略中包含 "iam:CreateRole",以及 "iam:attachRolePolicy" 和 "iam:createPolicy" 之类的内容。因此,您基本上就是您帐户的管理员,因为您可以使用任何策略创建角色并将其附加到 EC2 实例或直接承担它。

您可以让您的管理员为 lambda 创建一个或多个角色,例如一个用于 S3 访问,一个用于 ec2 命令等。当您想要创建一个 lambda 函数时,选择其中一个 pre-created 角色而不是创建一个新角色。

自回答这个问题以来已经过去了一段时间,AWS 发生了很大变化,我想提一下 AWS 在 2018 年推出的一项新功能:IAM 实体的权限边界 [1].

它们用于“将权限管理委托给受信任的员工”[2] 和其他 IAM 实体(例如角色)。
也就是说,您无需授予特定角色 admin-like 权限即可创建其他角色,如已接受的答案所述。您可以授予角色 iam:CreateRole 权限,条件是需要在每个新创建的角色上设置权限边界:{"StringEquals": {"iam:PermissionsBoundary": "arn:aws:iam::111122223333:policy/XCompanyBoundaries"}}.

权限边界指定的策略定义了有效分配给角色的最大权限。 [1]

为了创建具有权限边界的角色,您可以例如对 cli 命令 aws iam create-role 使用可选参数 --permissions-boundary。 [3]

参考资料

[1] https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html
[2] https://aws.amazon.com/blogs/security/delegate-permission-management-to-developers-using-iam-permissions-boundaries/
[3] https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html