2017-10-01 11 views
1

mTurk経由でSQSにメッセージを送信するには、対応するアクセス許可をSendMessageにする必要があります。文書では、プリンシパルはmturk-requester.amazonaws.comであるべきだと言います。したがって、このポリシーは次のようになります。Boto3でアクセス許可を作成する際に問題が発生する

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

これは、Boto3.SQS.addPermissionによって実行できます。そのような:

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

が、私はAWSAccountIdsフィールドに正しいプリンシパルを追加する方法を理解することができません。 mturk-requester.amazonaws.comを使用しようとする私の試みはすべて失敗しました。

私は間違っていますか?

答えて

2

MTurkの間違ったドキュメント(the example policy document is invalid)とドキュメント化されていないBoto3の動作(つまり、複雑な構造をSQS.add_permissionに渡すことはできません)と戦っていると思います。

add_permissionの代わりにset_queue_attributesを使用してプログラムでプログラムを追加することができました。

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

AWSポリシー検証に解析されない代わり

"aws:SecureTransport":"true" 

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

の使用である主な違い。

関連する問題