如何授予访问AWS SQS队列到特定EC2实例的权限?

时间:2017-10-02 23:40:49

标签: amazon-ec2 permissions amazon-sqs amazon-iam

我想使用AWS SQS队列,并通过PHP脚本访问它。 PHP脚本安装在EC2实例上。

出于测试目的,我现在正在EC2实例上使用curl请求,例如:

curl https://sqs.ap-southeast-2.amazonaws.com/1234567890/Integration_Order_In?Action=ReceiveMessage

如果不配置任何权限,请求将失败:

<?xml version="1.0"?><ErrorResponse xmlns="http://queue.amazonaws.com/doc/2012-11-05/"><Error><Type>Sender</Type><Code>AccessDenied</Code><Message>Access to the resource https://sqs.ap-southeast-2.amazonaws.com/123456789/Integration_Order_In is denied.</Message><Detail/></Error><RequestId>d47c06d5-a36b-5cac-aedb-54996975844f</RequestId></ErrorResponse>

这完全可以理解:如果未配置访问权限,则拒绝请求。浏览标题会显示底层的403错误。

可以理解的是,一切都适用于以下队列策略(队列 - &gt;权限 - &gt;编辑策略文档(高级)):

{
  "Version": "2012-10-17",
  "Id": "sqspolicy",
  "Statement": [
    {
      "Sid": "Sid1506985964774",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "SQS:*",
      "Resource": "arn:aws:sqs:ap-southeast-2:644393699576:Magento_Integration_Order_In_Tmall_ShippingLabelDownload__tmall",
      "Condition": {
        "StringEquals": {
          "aws:SourceIp": "12.34.56.78"
        }
      }
    }
  ]
}

结果很有希望:

<?xml version="1.0"?><ReceiveMessageResponse xmlns="http://queue.amazonaws.com/doc/2012-11-05/"><ReceiveMessageResult/><ResponseMetadata><RequestId>788aeac3-de4d-5d4c-85ad-b88f101f164e</RequestId></ResponseMetadata></ReceiveMessageResponse>

但是这会将权限绑定到IP地址,而我更愿意将其绑定到实例(ip地址可能会更改)。不幸的是,我添加我的实例的arn或其IAM角色的实验并未导致对SQS网址的任何访问。

情景似乎有点具体。例如,在其他方案中,将访问权限添加到EC2实例的IAM角色可能是可行的。由于几个原因,这在我的案例中效果不佳。我真的更愿意在队列级别上使用权限。

有什么想法吗?

0 个答案:

没有答案