我正在尝试使用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权限
答案 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}
,所以我只是推出*
来申请任何帐户和资源中的任何地区。
Id
和Sid
似乎允许任何文字。
Version
必须为2012-10-17