【发布时间】:2019-12-13 00:44:28
【问题描述】:
我正在尝试创建一个在 SQS 队列中记录 JSON 请求主体的 API。
我在 SQS 中设置了 FIFO 和非 FIFO 布局的基本队列。我每次都有同样的问题。我对 SQS 队列的策略如下:
{
"Version": "2012-10-17",
"Id": "arn:aws:sqs:us-east-1:2222222222222:API-toSQS.fifo/SQSDefaultPolicy",
"Statement": [
{
"Sid": "Sid22222222222",
"Effect": "Allow",
"Principal": "*",
"Action": "SQS:*",
"Resource": "arn:aws:sqs:us-east-1:2222222222222:API-toSQS.fifo"
}
]
}
我制定了一项政策,我授予所有对 SQS 的写作能力访问权限。我已经为 API Gateway 创建了一个角色,我在其中分配了上述策略。这是我分配给此角色的策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"sqs:DeleteMessage",
"sqs:ChangeMessageVisibility",
"sqs:DeleteMessageBatch",
"sqs:SendMessageBatch",
"sqs:PurgeQueue",
"sqs:DeleteQueue",
"sqs:SendMessage",
"sqs:CreateQueue",
"sqs:ChangeMessageVisibilityBatch",
"sqs:SetQueueAttributes"
],
"Resource": "*"
}
]
}
我已经设置了一个 API 网关。我创建了一个 POST 方法。我已经尝试启用 CORS 选项(它创建一个 OPTIONS 方法)并且我在没有启用 CORS 的情况下完成了它。我的安全策略的 ARN 是正确的,我已对其进行了三次检查。我选择了覆盖路径并在那里拥有我的 SQS 队列的完整 https URL,我也对此进行了三次检查。我的终点当然是 SQS。
对于集成请求,我有一个 Content-Type 的 HTTP 标头,然后是 'application/x-www-form-urlencoded' 的映射自
在映射模板中,我将 passthrough 设置为 never,并将 Content-Type 设置为 application/json,还包括模板 Action=SendMessage&MessageBody=$input.body,根据我找到的演练从 body 转换为 url。
我在 API Gateway 测试区收到以下错误
<AccessDeniedException>
<Message>Unable to determine service/operation name to be authorized</Message>
</AccessDeniedException>
是否有 AWS 专家可以引导我朝着正确的方向前进?
澄清我的问题是它应该添加我的测试体
{"peanutbutter":"jelly"}
到 SQS 队列,但没有运气。
我可以整天从邮递员向 SQS 发送 url 编码的消息,但我希望我的业务合作伙伴能够通过 http(邮递员、节点等,等等)发送一个干净的 JSON 对象。
谢谢!
【问题讨论】:
-
@KenWhite 可以。现在改变
标签: aws-api-gateway amazon-iam amazon-sqs