Je n'arrive pas à comprendre ce qui cause cet échec. J'ai fait référence à un article . Quelqu'un peut-il me dire ce qui peut être à l'origine de cette erreur?
Invalid value for parameter Policy. (Service: AmazonSQS; Status Code: 400, Error Code: InvalidAttributeValue...
Message d'erreur:
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]
3 Réponses :
Cela devrait le résoudre:
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]
Je ne sais pas si vous avez résolu le problème ou non, mais peut-être que cela aidera quelqu'un d'autre.
J'ai eu ce problème et je viens de le résoudre en permettant à n'importe quel utilisateur d'accéder à la ressource. Je ne sais pas pourquoi, mais je n'ai pas pu faire fonctionner les stratégies Json lorsqu'un Principal
est spécifié? Je n'ai trouvé aucun exemple qui utiliserait autre chose que Principal: "*"
...
Même si vous autorisez tout le monde à accéder à la ressource, vous pouvez toujours utiliser Condition
pour limiter l'accès à votre ressource.
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
Voici le peu de documentation qui m'a aidé: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqsDeveloperGuide/ -examples-of-sqs-policies.html
Ma première erreur stupide: j'ai écrit
"Principal":
au lieu de
"Principal": { "AWS": <my ARN> }
Deuxième erreur, pas si stupide: j'ai essayé d'utiliser lambda arn comme principal mais j'ai dû utiliser le lambda role arn à la place. Donc, pour la question initiale, je suggère d'utiliser non pas le rôle ecs arn mais le rôle ecs arn.
Qu'est-ce que vous essayez d'accomplir avec votre cluster ECS en tant que principal?
J'essaye de faire en sorte que le cluster ECS puisse accéder à la file d'attente Sqs