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

时间:2017-11-13 09:41:34

标签: 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')
queue.add_permission(
    Label='TestReceivePermissions',
    AWSAccountIds=['arn:aws:iam::<account_id>:user/test_user'],
    Actions=['ReceiveMessage']
)

执行此代码时,收到以下错误:

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.

但是,我可以通过AWS控制台将相同的权限添加到队列中。我在这里错过了什么?还有其他方法我应该考虑吗?

更新:一种可行的解决方法是创建托管策略,然后将用户附加到策略,如下所示:

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)

这暂时有效,但我仍然不明白为什么其他方法无效。

0 个答案:

没有答案