2017-10-01 3 views
1

Um Nachrichten über mTurk an SQS zu senden, sollte die entsprechende Berechtigung an SendMessage gegeben werden. In der Dokumentation heißt es, dass der Auftraggeber mturk-requester.amazonaws.com sein sollte. So ist die Politik, die funktioniert wie folgt aussieht:Probleme beim Erstellen von Berechtigungen in Boto3

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

Dies kann über Boto3.SQS.addPermission erfolgen. Wie folgt aus:

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

aber ich kann nicht verstehen, wie ich die richtige Principal AWSAccountIds Feld hinzufügen kann. Alle meine Versuche, mturk-requester.amazonaws.com dort zu verwenden, scheiterten.

Was mache ich falsch?

Antwort

2

Ich denke, Sie kämpfen einige fehlerhafte MTurk Dokumentation (d. H. the example policy document is invalid), sowie einige nicht dokumentiert Boto3 Verhalten (d. H. Sie können eine komplexe Struktur nicht an SQS.add_permission übergeben).

Ich konnte die Richtlinie mithilfe von set_queue_attributes anstelle von programmgesteuert hinzufügen.

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)}) 

Der Hauptunterschied ist die Verwendung von

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

statt

"aws:SecureTransport":"true" 

zu sein, die in der AWS-Politik Validator analysieren nicht.

Verwandte Themen