【问题标题】:Access denied to SQS via AWS SDK通过 AWS 开发工具包拒绝访问 SQS
【发布时间】:2013-12-13 10:52:11
【问题描述】:

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

"aws/aws-sdk-php": "2.4.*"

然后,当我尝试创建队列或列出队列时,我收到 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/ 被拒绝。,用户代理: 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()));

我做错了什么来得到这个错误?

【问题讨论】:

  • 我通过将 curl 选项添加到配置数组中来确保这不是代理问题。

标签: symfony amazon-web-services aws-sdk amazon-sqs


【解决方案1】:

挖掘后我发现我使用的帐户没有被授予访问 SQS 服务的权限。

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

【讨论】:

  • 宾果游戏!!我对用户的访问权限有同样的问题谢谢 Supa
  • 当所有其他服务都可以连接默认用户时,为什么还需要单独的 SQS 用户?
  • 顺便说一句,您附加的政策是什么?以下不起作用,仍然显示 403.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sqs:*", "Resource": "*" } ] }
  • 如果您因为云的形成而面临这种情况。尝试在我的权限选项卡中更新 sqs 队列的权限。为我工作
  • 嗨,有时不是真正的解决方案,在我的情况下,我已授予所有必需的权限,但最终问题是与集成请求中的映射模板以及标题内容类型有关
【解决方案2】:

确保以下两个策略都允许访问 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

【讨论】:

    【解决方案3】:

    我遇到了同样奇怪的问题,我已经设置了所有内容,包括策略和权限,几个小时后我发现我收到 403 错误,因为在我的应用程序中配置了错误的 aws 区域,它应该是 @987654321 @ 默认是us-east-1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-07
      • 2019-04-17
      • 1970-01-01
      相关资源
      最近更新 更多