我似乎无法弄清楚是什么导致了这次失败。我提到了一篇文章。谁能告诉我可能导致此错误的原因是什么?
AllowSNS2SQSPolicy:
Type: AWS::SQS::QueuePolicy
Properties:
Queues: [ !Ref SQSQueue ]
PolicyDocument:
Version: "2012-10-17"
Id: SQSPolicy
Statement:
- Sid: Allow-SNS-SendMessage
Effect: Allow
Principal:
AWS:
- 'arn:aws:ecs:${AWS::Region}:${AWS::AccountId:}:cluster/foo'
Action:
- 'sqs:SendMessage'
- 'sqs:ReceiveMessage'
Resource: !GetAtt [SQSQueue, Arn]
错误信息:
参数策略值无效。 (服务:AmazonSQS;状态代码:400,错误代码:InvalidAttributeValue...
不确定您是否解决了问题,但这也许对其他人有帮助。
我遇到了这个问题,只是通过允许任何用户访问该资源来解决它。我不知道为什么,但指定
Principal
时我无法让 Json 策略工作?我也没有找到任何使用除 Principal: "*"
... 之外的任何示例
即使您允许所有人访问该资源,您仍然可以使用
Condition
来限制对您的资源的访问。
AllowSNS2SQSPolicy:
Type: AWS::SQS::QueuePolicy
Properties:
Queues: [ !Ref SQSQueue ]
PolicyDocument:
Version: "2012-10-17"
Id: SQSPolicy
Statement:
- Sid: Allow-SNS-SendMessage
Effect: Allow
Principal: '*'
Action:
- 'sqs:SendMessage'
- 'sqs:ReceiveMessage'
Resource: !GetAtt [SQSQueue, Arn]
Condition:
ArnEquals:
aws:SourceArn: !GetAtt YourEcsClusterResource.Arn
这应该可以解决它:
AllowSNS2SQSPolicy:
Type: AWS::SQS::QueuePolicy
Properties:
Queues: [ !Ref SQSQueue ]
PolicyDocument:
Version: "2012-10-17"
Id: SQSPolicy
Statement:
- Sid: Allow-SNS-SendMessage
Effect: Allow
Principal:
AWS:'arn:aws:ecs:${AWS::Region}:${AWS::AccountId:}:cluster/foo'
Action:
- 'sqs:SendMessage'
- 'sqs:ReceiveMessage'
Resource: !GetAtt [SQSQueue, Arn]
我的第一个愚蠢错误:我写了
"Principal": <my ARN>
而不是
"Principal": {
"AWS": <my ARN>
}
第二个错误,不是那么愚蠢:我尝试使用 lambda arn 作为主体,但不得不使用 lambda role arn。因此,对于最初的问题,我建议不要使用 ecs arn,而是使用 ecs role arn。