AWS Lambda的AWS SQS权限

时间:2015-08-25 18:17:26

标签: amazon-web-services amazon-s3 amazon-sqs aws-lambda

我正在使用AWS SQS服务,而且我很难在我的SQS队列上定义权限。在我的设置中,我使用AWS Lambda服务,该服务在将对象推送到S3存储桶时触发。

然而,为了简单地回答我的问题,这就是我想要实现的目标:

  1. 将对象推送到S3存储桶
  2. S3存储桶触发AWS Lambda
  3. Lambda进行一些计算,并将事件推送到我的SQS队列(需要定义权限)
  4. 应用程序从SQS
  5. 读取

    正如您可以从之前的用例中读到的那样,我希望我的AWS Lambda方法成为唯一可以将消息发送到SQS队列的应用程序。我试图设定一个原则和条件" sourceArn"。但它们都不起作用..

    enter image description here

    有人可以帮忙吗?

2 个答案:

答案 0 :(得分:9)

我认为SourceArn字段不会被Lambda填充。我知道SourceArn适用于SNS,但Lambda实际上运行的是任意代码,而不是像SNS这样的AWS功能。

作为替代方案,您可以将策略附加到Lambda函数运行的IAM角色。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1440529349000",
            "Effect": "Allow",
            "Action": [
                "sqs:SendMessage"
            ],
            "Resource": [
                "arn:aws:sqs:us-west-2:123456789012:test-queue"
            ]
        }
    ]
}

此方法不需要直接附加到队列的策略。

答案 1 :(得分:0)

您还可以指定 SQS 访问策略,拒绝发送除 lambda 之外的消息

{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Sid": "Only API Gateway is allowed to send messages",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "SQS:SendMessage",
      "Resource": "arn:aws:sqs:eu-west-1:XXX:my_sqs_queue",
      "Condition": {
        "StringNotLike": {
          "aws:userid": [
            "AROA4XB7NRHNVE2XY7ABC:*"
          ]
        }
      }
    }
  ]
}

通过为角色 ID 提供通配符 Principal * 和条件键 aws:userid。需要在条件子句中指定以下内容

<USER ID of the Role being used by the Lambda:*>

可以使用以下 CLI 命令检索角色 AROA4XB7NRHNVE2XY7ABC 的用户 ID

aws iam get-role --role-name my_lambda_role

{
    "Role": {
       "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Action": "sts:AssumeRole",
                    "Principal": {
                        "Service": "lambda.amazonaws.com"
                    },
                    "Effect": "Allow",
                    "Sid": ""
                }
            ]
        },
        "RoleId": "AROA4XB7NRHNWU35SVABC",
        "CreateDate": "2020-01-21T11:40:55Z",
        "RoleName": "my_lambda_role",
        "Path": "/",
        "Arn": "arn:aws:iam::XXX:role/my_lambda_role"
    }
}

有关此案例的更多信息可以在here