【问题标题】:issues with creating permissions in Boto3在 Boto3 中创建权限的问题
【发布时间】:2017-10-03 15:12:02
【问题描述】:

为了通过 mTurk 向 SQS 发送消息,应授予SendMessage 的相应权限。在文档中,他们说 Principal 应该是 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',
  ]
 )

但我不明白如何将正确的 Principal 添加到 AWSAccountIds 字段。我在那里使用mturk-requester.amazonaws.com 的所有尝试都失败了。

我做错了什么?

【问题讨论】:

    标签: amazon-web-services aws-sdk boto boto3 mechanicalturk


    【解决方案1】:

    我认为您正在与一些错误的 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 策略验证器中不解析。

    【讨论】:

    • 值得注意的是,这适用于与许多其他服务集成,而不仅仅是 mturk。我将它与 SNS 一起使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 2022-09-29
    • 2013-03-22
    相关资源
    最近更新 更多