通过AWS SDK拒绝访问SQS

Sup*_*oco 28 amazon-sqs amazon-web-services symfony aws-sdk

我目前正在开发一个使用Symfony2开发的网站,我需要在Amazon SQS中发送消息.为了做到这一点,我加入了我的composer.json:

"aws/aws-sdk-php": "2.4.*"
Run Code Online (Sandbox Code Playgroud)

然后,当我尝试创建队列或列表队列时,我遇到403错误说:

访问资源https://sqs.us-west-2.amazonaws.com/被拒绝.

编辑: 添加完整的错误消息

AWS错误代码:AccessDenied,状态代码:403,AWS请求ID:2fe34c11-7af8-5445-a768-070159a0953e,AWS错误类型:客户端,AWS错误消息:访问资源 https://sqs.us-west-2 .amazonaws.com /被拒绝.,User-Agent:aws-sdk-php2/2.4.11 Guzzle/3.7.4 curl/7.25.0 PHP/5.4.3

以下是我所做的示例代码:

$aws = Aws::factory(array(
  'key'    => 'my-key',
  'secret' => 'my-secret',
  'region' => 'us-west-2'
));

$sqs = $aws->get('sqs');

return new Response(var_dump($sqs->listQueues()));
Run Code Online (Sandbox Code Playgroud)

如果出现此错误,我该怎么办?

Sup*_*oco 50

在挖掘之后,我发现我使用的帐户未被授予对SQS服务的访问权限.

要授予SQS帐户访问权限,您必须转到亚马逊管理控制台.然后单击IAM.在此部分下单击"用户",然后您可以管理您创建的每个帐户的权限.

  • 顺便说一句,您附有什么政策?以下内容无效,并且仍显示403。`{“ Version”:“ 2012-10-17”,“ Statement”:[{“ Effect”:“ Allow”,“ Action”:“ sqs:*”,“ Resource “:” *“}]}` (4认同)
  • 当所有其他服务都可以与默认用户连接时,为什么还需要单独的 SQS 用户? (3认同)
  • 您好,有时这不是真正的解决方案,在我的情况下,我已授予所有必需的权限,但最终问题与集成请求中的映射模板以及标头内容类型有关 (2认同)

srg*_*nky 10

确保以下两个策略都允许访问 SQS 队列

  1. 基于资源 (SQS) 的策略:SQS 队列应允许您的身份使用该队列。您可以使用队列策略 ( https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-iam.html#scenario-sqs-policy )。默认队列策略将只允许访问队列的所有者(队列的所有者是创建队列的身份)。
  2. 基于身份的策略:访问队列的身份的策略应该有权调用队列上的操作。

确保访问不受其中任何一个的限制。

https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-using-identity-based-policies.html