S3通知SQS:"无法验证以下目标配置"

时间:2017-04-14 14:09:28

标签: php aws-sdk

我正在尝试使用SQS创建S3存储桶通知。

$downArn = $client->getQueueArn($downUrl);

$client->addPermission([
    'QueueUrl' => $downUrl,
    'Label' => 'S3Watcher',
    'AWSAccountIds' => [
        'AWS' => '*' // This will throw error; Setting to plain * does not work too
    ],
    'Actions' => ['*']
]);

$s3->putBucketNotificationConfiguration([
    'Bucket' => 's3-to-sqs-test',
    'QueueConfigurations' => [
        [
            'Id' => 'Files upload watcher',
            'QueueArn' => $downArn,
            'Events' => [
                's3:ObjectCreated:Put',
            ],
        ],
    ]
]);

问题是,未经许可,我无法创建通知,我收到错误

  

无法验证以下目标配置

当手动转到SQS并添加权限时,我可以为所有用户标记Everybody (*),但我不能在PHP方面做同样的事情。

TL; DR 如何使用PHP AWS SDK为每个Principal(AWSAccountIds)添加SQS权限

1 个答案:

答案 0 :(得分:0)

SDK v2中的AWS SDK限制。您可以在创建SQS时将Attributes > Policy设置为JSON字符串来绕过此。

$client
    ->createQueue([
        'QueueName' => $name,
        'Attributes' => [
            'Policy' => json_encode([
                'Version' => '2012-10-17',
                'Id' => $id,
                'Statement' => [
                    [
                        'Sid' => 'Sid1',
                        'Effect' => 'Allow',
                        'Principal' => '*',
                        'Action' => 'SQS:*',
                        'Resource' => 'arn:aws:sqs:*:*:*',
                    ]
                ],
            ]),
        ]
    ])

Resource格式为arn:aws:{service}:{region}:{accountID}:{resourceName},所以我只是推出*来申请任何帐户和资源中的任何地区。

IdSid似乎允许任何文字。

Version必须为2012-10-17