【问题标题】:Giving access to AWS Lambda service with limited policy通过有限的政策授予对 AWS Lambda 服务的访问权限
【发布时间】:2016-04-29 01:08:34
【问题描述】:

我正在尝试按照tutorial 设置一个 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 步,同时选择“基本执行角色”时出错

用户:arn:aws:iam::xxxx:user/Yyyy 无权执行: iam:CreateRole 在资源上: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 以其他方式完成,例如通过添加新角色?我只想要足够的权利。

【问题讨论】:

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


    【解决方案1】:

    您有一个安全约束,因为您的策略中需要“iam:CreateRole”,以及“iam:attachRolePolicy”和“iam:createPolicy”之类的内容。因此,您基本上将成为您帐户的管理员,因为您可以使用任何策略创建角色并将其附加到 EC2 实例或直接承担它。

    您可以做的是让您的管理员为 lambda 创建一个或多个角色,例如,一个用于 S3 访问,一个用于 ec2 命令等。当您想要创建 lambda 函数时,请选择这些预先创建的角色之一创造一个新的。

    【讨论】:

    • 所以iam:CreateRole, attachRolePolicy and createPolicy 是我所需要的。这不会扩展我的权利,例如我可能会为自己添加一项允许扩展我的权利等的政策吗?
    • 是的,这就是问题所在,有了这些权利,它就扩展了您的权利,几乎就像管理员一样。例如,正如我在回答中解释的那样(或者至少我试图解释 :)),使用这些权限,您可以创建一个具有管理员权限的角色,担任该角色,从而获得该帐户的管理员权限。这就是为什么我建议您的管理员为您预先创建角色,并且在教程的第 6 步中,您将选择其中一个角色,而不是选择创建新角色的选项。那有意义吗?对不起,如果我的英语不够清楚:)
    • 谢谢。您是否认为通过 Roles > Add Role > Role Name [abc] > AWS Service Roles (Select AWS Lambda ) 从 IAM 控制台添加新角色,该角色将在此处列出?
    • 是的,它看起来与“使用现有角色”中“lambda_exec_role”的步骤 6 的屏幕截图相同
    • 如果您查看我更新的 lambda_exec_role 政策会很棒,谢谢
    【解决方案2】:

    自从这个问题得到解答并且 AWS 发生了很大变化之后,我想提一下 AWS 在 2018 年推出的一项新功能:IAM 实体的权限边界 [1]。

    它们用于“将权限管理委派给受信任的员工”[2] 和其他 IAM 实体(例如角色)。
    也就是说,您不需要授予特定角色类似管理员的权限来创建其他角色,因为接受的答案状态。您可以授予角色 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

    【讨论】:

      猜你喜欢
      • 2020-08-27
      • 1970-01-01
      • 1970-01-01
      • 2019-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多