Python 向SQS队列添加权限-PrincipalId无效

Python 向SQS队列添加权限-PrincipalId无效,python,boto3,amazon-sqs,amazon-iam,Python,Boto3,Amazon Sqs,Amazon Iam,我正在为特定的内联用户创建一个SQS队列并向该队列添加权限,但是add_permission调用以意外的方式失败 import boto3 queue_name = 'test-queue' sqs_client = boto3.client('sqs') response = sqs_client.create_queue(QueueName=queue_name) queue = boto3.resource('sqs').Queue(response.get('QueueUrl') q

我正在为特定的内联用户创建一个SQS队列并向该队列添加权限,但是
add_permission
调用以意外的方式失败

import boto3

queue_name = 'test-queue'
sqs_client = boto3.client('sqs')

response = sqs_client.create_queue(QueueName=queue_name)
queue = boto3.resource('sqs').Queue(response.get('QueueUrl')
queue.add_permission(
    Label='TestReceivePermissions',
    AWSAccountIds=['arn:aws:iam::<account_id>:user/test_user'],
    Actions=['ReceiveMessage']
)

目前这是可行的,但我仍然不明白为什么另一种方法不起作用。

AWSAccountIds
对于一个需要ARN数组作为参数的键来说似乎是个奇怪的名称。我同意。我认为典型的用例是允许其他AWS帐户访问资源。然而,文件说,委托人也可以是用户。正如我所提到的,我可以通过AWS控制台将ARN添加到策略中。你找到这个了吗?我自己刚碰到的
botocore.exceptions.ClientError: An error occurred (InvalidParameterValue) when calling the AddPermission operation: Value [arn:aws:iam::<account_id>:user/test_user] for parameter PrincipalId is invalid. Reason: Unable to verify.
import json, boto3

sqs = boto3.resource('sqs')
iam = boto3.resource('iam')

queue_name = 'test-queue'
USER_NAME = 'test_user'

queue = sqs.create_queue(QueueName=queue_name)
policy = iam.create_policy(
    PolicyName='{}-ReceiveAccess'.format(queue_name),
    PolicyDocument=json.dumps({
        'Version': '2012-10-17',
        'Statement': [
            {
                'Effect': 'Allow',
                'Action': [
                    'sqs:ReceiveMessage*'
                ],
                'Resource': [queue.attributes['QueueArn']]
            }
        ]
    })
)

policy.attach_user(UserName=USER_NAME)