在 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 中不解析。