当前位置: 首页 > 知识库问答 >
问题:

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

彭华皓
2023-03-14

我试图按照本教程设置一个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函数处理程序和角色时,我被卡在步骤6中,出现错误

用户:arn:aws:iam::xxxx:User/Yyyy无权在资源上执行:iam:CreateRole:arn:aws:iam::xxxx:role/lambda\u basic\u 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个答案

鲁品
2023-03-14

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

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

澹台阳秋
2023-03-14

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

它们用于“将权限管理委托给受信任的员工”[2]和其他IAM实体(如角色)。也就是说,您不需要授予特定角色类似管理员的权限来创建其他角色,正如接受的答案所述。您可以授予角色iam: CreateRole权限,条件是需要对每个新创建的角色设置权限边界:{"StringEquals":{"iam: PermissionsBoundary":"arn: aws: iam::111122223333:策略/XCompanyBoundary"}}

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

为了创建具有权限边界的角色,您可以使用cli命令的可选参数--permissions boundaryaws iam create role。[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

 类似资料:
  • 我使用CarrierWaveDirect将高分辨率图像上传到s3。然后,我使用该图像处理通过Cloudfront URL公开的多个版本。 上传的高分辨率文件需要对匿名用户保持私有,但web应用程序需要访问私有文件才能对其他版本进行处理。 我目前正在通过将所有上传的文件设置为CarrierWave初始值设定项中的private config.fog_public=假 我有一个允许完全管理员访问的we

  • 我正计划使用JWT。JWT将包含权限列表,单个微服务将使用“位置”和“权限”的组合来确定。 不幸的是,我无法在Keycloak中配置客户端来分配策略和权限,也无法在Internet上找到任何示例。

  • 我正在尝试为AWS IAM用户设置访问特定AWS SQS队列的用户策略。 当我尝试使用以下策略时,我得到错误AccessDenied。 但是,当我尝试使用相同的策略时,仅将arn的queue_name部分替换为*,它可以工作: 当试图限制对特定队列的访问时,会出现什么问题?

  • 议程:在Linux和Windows之间有一个共同的项目文件夹 在我的ubuntu机器14.04中,我已将文档根目录从:更改为 我得到错误为: 被禁止的 您没有访问/此服务器的权限。 Apache/2.4。本地主机端口80上的7(Ubuntu)服务器 所以我添加了一些脚本到: 但是可以工作,但不适用于Windows NTFS分区驱动器。 即使在提到: 错误消息“禁止您没有访问/此服务器的权限” 我的

  • 使用IAM策略模拟器时,似乎必须提供对完整密钥arn的访问(),而不是别名() 有没有更好的办法来管理这个? 我知道我可以使用密钥策略管理对CMKs的访问,并且不允许从IAM进行访问,但是您不能在KMS密钥策略中使用组作为

  • 我已将以下策略附加到IAM用户: 现在,有了附加了上述策略的IAM用户的访问凭据,我试图运行以下命令: 其中,文件policy.json的内容为: 我得到了一个 调用PutBucket策略操作时发生错误(AccessDended):拒绝访问 现在我想知道为什么? 用户的策略语句允许对资源执行: 这就是我试图用我的上述政策所做的。那么,为什么访问被拒绝?