Amazon web services 无服务器:sqs:CreateQueue访问。。。否认

Amazon web services 无服务器:sqs:CreateQueue访问。。。否认,amazon-web-services,amazon-iam,serverless-framework,Amazon Web Services,Amazon Iam,Serverless Framework,我正在尝试将我的无服务器框架应用程序部署到多个阶段 我创建了一个具有所有所需权限的IAM用户,并将其访问密钥放置在~/.aws/credentials中 当我部署到stagebeta时,部署工作非常完美: sls部署-s测试版--verbose--profile myProfile 当我部署到stagedev时,我收到一个拒绝访问错误。此命令: sls deploy -s dev --verbose --profile myProfile 生成以下错误: CloudFormation - U

我正在尝试将我的无服务器框架应用程序部署到多个阶段

我创建了一个具有所有所需权限的IAM用户,并将其访问密钥放置在
~/.aws/credentials

当我部署到stage
beta
时,部署工作非常完美:

sls部署-s测试版--verbose--profile myProfile
当我部署到stage
dev
时,我收到一个拒绝访问错误。此命令:

sls deploy -s dev --verbose --profile myProfile
生成以下错误:

CloudFormation - UPDATE_FAILED - AWS::SQS::Queue - MyQueue
CloudFormation - CREATE_IN_PROGRESS - AWS::SNS::Topic - MyTopic
CloudFormation - UPDATE_FAILED - AWS::SNS::Topic - MyTopic
CloudFormation - UPDATE_FAILED - AWS::IAM::Role - IamRoleLambdaExecution
...
Serverless Error ---------------------------------------

  An error occurred: MyQueue - API: sqs:CreateQueue Access to the resource https://sqs.xx-xxxx-2.amazonaws.com/ is denied..

我的
serverless.yml
如下所示:

#serverless.yml
服务:“我的lambda”
应用程序:“我的lambda”
组织:“我的组织”
包裹:
个人:对
自定义:
topicName:“我的主题--${opt:stage,self:provider.stage}”
queueName:“我的队列--${opt:stage,self:provider.stage}”
供应商:
名称:“aws”
运行时:“nodejs12.x”
地区:“xx-xxxx-2”
简介:“我的简介”
环境:
节点_ENV:“${opt:stage,self:provider.stage}”
SNS_主题_名称:“${self:custom.topicName}”
SQS_队列_名称:“${self:custom.queueName}”
SLS_调试:“*”
功能:
myFunc:
处理程序:“index.handler”
活动:
-社交网络:
阿恩:!参考我的主题
topicName:“${self:custom.topicName}”
红河政策:
deadLetterTargetRef:“我的队列”
资源:
资源:
我的主题:
类型:“AWS::SNS::主题”
特性:
TopicName:“${self:custom.TopicName}”
我的队列:
类型:“AWS::SQS::队列”
特性:
QueueName:“${self:custom.QueueName}”
以下是我的个人资料的政策:

{
“版本”:“2012-10-17”,
“声明”:[
{
“效果”:“允许”,
“操作”:“ssm:GetParameters”,
“资源”:“arn:aws:ssm:xx-xxxx-2::parameter/Config/*”
},
{
“效果”:“允许”,
“操作”:“sns:SetSubscriptionAttributes”,
“资源”:“*”
},
{
“效果”:“允许”,
“行动”:“sns:*”,
“资源”:“arn:aws:sns:xx-xxxx-2::我的主题”
},
{
“效果”:“允许”,
“行动”:“sqs:*”,
“资源”:“arn:aws:sqs:xx-xxxx-2::我的队列”
}
]
}
我做错了什么

I created an IAM user with all the permissions I need and placed their access-key in ~/.aws/credentials.
请验证您创建的用户是否具有创建SQS队列的权限- CloudFormation告诉你它没有。如果配置了多个AWS角色,请确保将环境变量
AWS\u PROFILE
设置为正确的角色


如果您仍然遇到此错误,请发布整个IAM策略。

这是您的AWS用户配置文件策略问题

资源:
资源:
我的主题:
类型:“AWS::SNS::主题”
特性:
TopicName:“${self:custom.TopicName}”
我的队列:
类型:“AWS::SQS::队列”
特性:
QueueName:“${self:custom.QueueName}”
sls deploy在运行时,尝试创建serverless.yml config的resources下定义的所有资源

即使您为管理员提供了对配置文件的访问权限,它也不会起作用。 正如您在概要文件策略中提到的,您似乎已经创建了队列和主题

通过在serverless.yml的resources下定义它们,只需指定要再次创建这些资源

由于您现在没有管理员权限,这表明您没有创建sqs队列的权限

尝试在aws配置文件中添加管理员角色,您将再次看到队列和主题已存在的错误

请尝试删除现有资源,然后部署sls,这样就可以了。 或者干脆不使用资源,直接指定ARN

功能:
myFunc:
处理程序:index.handler
活动:
-社交网络:
阿恩:阿恩:xxx
红河政策:
死信目标:arn:aws:sqs:xxx:DLQ
参考这个
谢谢大家,但问题最终非常简单。在
serverless.yml
中,我定义了如下主题和队列名称:

自定义:
topicName:“我的主题--${opt:stage,self:provider.stage}”
queueName:“我的队列--${opt:stage,self:provider.stage}”
但在我的政策中,我写了
arn:aws:sns:xx-xxxx-2::我的主题
arn:aws:sqs:xx-xxxx-2::我的队列

解决方案非常简单,只需在我的策略中的资源中添加
--stage
后缀,或者对ARN的尾部段使用
*


感谢您的回复,所有人。

您是否提供了在两个阶段创建sqs的权限,或者只提供了测试版。根据您的模板,您需要在“my queue--beta”和“my queue--dev”上提供创建访问权限。从错误中可以看出,您似乎只批准了“我的队列--测试版”