在 Boto3 中创建权限的问题
issues with creating permissions in Boto3
为了通过 mTurk 向 SQS 发送消息,应给予 SendMessage
相应的权限。在文档中,他们说校长应该是 mturk-requester.amazonaws.com
。所以有效的政策看起来像:
"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
的尝试都失败了。
我做错了什么?
我认为您正在与一些错误的 MTurk 文档(即 the example policy document is invalid)以及一些记录不足的 Boto3 行为(即您无法将复杂结构传递给 SQS.add_permission
)作斗争.
我能够使用 set_queue_attributes
而不是 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)})
主要区别在于
的使用
"Condition": {
"Bool": {
"aws:SecureTransport": "true"
}
}
而不是
"aws:SecureTransport":"true"
在 AWS Policy Validator 中不解析。
为了通过 mTurk 向 SQS 发送消息,应给予 SendMessage
相应的权限。在文档中,他们说校长应该是 mturk-requester.amazonaws.com
。所以有效的政策看起来像:
"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
的尝试都失败了。
我做错了什么?
我认为您正在与一些错误的 MTurk 文档(即 the example policy document is invalid)以及一些记录不足的 Boto3 行为(即您无法将复杂结构传递给 SQS.add_permission
)作斗争.
我能够使用 set_queue_attributes
而不是 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)})
主要区别在于
的使用"Condition": {
"Bool": {
"aws:SecureTransport": "true"
}
}
而不是
"aws:SecureTransport":"true"
在 AWS Policy Validator 中不解析。