2017-10-01 8 views
1

Pour pouvoir envoyer des messages via mTurk à SQS, l'autorisation correspondante à SendMessage doit être donnée. Dans la documentation, ils disent que le principal devrait être mturk-requester.amazonaws.com. Ainsi, la politique qui fonctionne ressemble:Problèmes de création d'autorisations dans Boto3

"Principal": { 
    "Service": "mturk-requester.amazonaws.com" 
}, 

Cela peut se faire via Boto3.SQS.addPermission. Comme ça:

response = client.add_permission(
    QueueUrl='string', 
    Label='string', 
    AWSAccountIds=[ 
     'string', 
    ], 
    Actions=[ 
     'string', 
    ] 
) 

mais je ne comprends pas comment je peux ajouter le principal correct AWSAccountIds champ. Toutes mes tentatives pour utiliser mturk-requester.amazonaws.com ont échoué.

Qu'est-ce que je fais mal?

Répondre

2

Je pense que vous êtes confronté à une documentation MTurk erronée (c'est-à-dire the example policy document is invalid), ainsi qu'à un comportement Boto3 sous-documenté (par exemple, vous ne pouvez pas passer une structure complexe à SQS.add_permission).

J'ai été en mesure d'ajouter par programme la stratégie en utilisant set_queue_attributes au lieu de add_permission.

import re 
import json 

q = client.create_queue(QueueName='queue1001') 

q_parts = re.search('(\d+)/(.+)$', q['QueueUrl']) 
aws_id = q_parts.group(1) 
q_name = q_parts.group(2) 

policy = { 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Principal": { 
     "Service": "mturk-requester.amazonaws.com" 
     }, 
     "Action": "SQS:SendMessage", 
     "Resource": "arn:aws:sqs:us-east-1:{}:{}".format(aws_id, q_name), 
     "Condition": { 
     "Bool": { 
      "aws:SecureTransport": "true" 
     } 
     } 
    } 
    ] 
} 

client.set_queue_attributes(QueueUrl=q['QueueUrl'], Attributes={'Policy': json.dumps(policy)}) 

La principale différence étant l'utilisation de

"Condition": { 
    "Bool": { 
    "aws:SecureTransport": "true" 
    } 
} 

au lieu de

"aws:SecureTransport":"true" 

qui ne parse pas dans la politique AWS Validator.