使用有限的策略访问AWS Lambda服务

时间:2016-01-22 12:21:17

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

我正在尝试按照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:用户/ 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,例如添加新角色?我只想要足够的权利。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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