2
votes

SQSPolicy échoue lors de la création de la pile

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]


2 commentaires

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


3 Réponses :


1
votes

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]  


0 commentaires

1
votes

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


0 commentaires

-1
votes

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.


0 commentaires