Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何在us-east-2中列出桶的AWS S3文件?_Amazon Web Services_Amazon S3 - Fatal编程技术网

Amazon web services 如何在us-east-2中列出桶的AWS S3文件?

Amazon web services 如何在us-east-2中列出桶的AWS S3文件?,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,我完全知道S3是区域不可知论的,我们系统的其他部分在us-east-2中并不重要,但是 如果我尝试在没有签名或regionm的情况下进行初始化,它会告诉我现在需要使用v4签名: php > $s3Client = \Aws\S3\S3Client::factory(array('key' => 'ACCESS', 'secret' => 'SECRET', 'version' => '2006-03-01')); php > $objects = $s3Client

我完全知道S3是区域不可知论的,我们系统的其他部分在us-east-2中并不重要,但是

如果我尝试在没有签名或regionm的情况下进行初始化,它会告诉我现在需要使用v4签名:

php > $s3Client = \Aws\S3\S3Client::factory(array('key' => 'ACCESS', 'secret' => 'SECRET', 'version' => '2006-03-01'));
php > $objects = $s3Client->getListObjectsIterator(array('Bucket'=>'my-bucket')); foreach ($objects as $object) { echo $object['Key'] . "\n"; };

Warning: Uncaught Aws\S3\Exception\InvalidRequestException: AWS Error Code: InvalidRequest, Status Code: 400, AWS Request ID: REQUEST, AWS Error Type: client, AWS Error Message: The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256., User-Agent: aws-sdk-php2/2.7.0 Guzzle/3.9.2 curl/7.54.0 PHP/7.1.23 ITR
  thrown in phar:///Library/WebServer/lib/aws.phar/Aws/Common/Exception/NamespaceExceptionFactory.php on line 91
我尝试在没有区域的情况下初始化S3:

php > $s3Client = \Aws\S3\S3Client::factory(array('key' => 'ACCESS', 'secret' => 'SECRET', 'signature' => 'v4'));

Warning: Uncaught Aws\Common\Exception\InvalidArgumentException: A region must be specified when using signature version 4 in phar:///Library/WebServer/aws.phar/Aws/S3/S3Client.php:283
Stack trace:
#0 phar:///Library/WebServer/aws.phar/Aws/S3/S3Client.php(171): Aws\S3\S3Client::createSignature(Array)
#1 php shell code(1): Aws\S3\S3Client::factory(Array)
#2 {main}
  thrown in phar:///Library/WebServer/aws.phar/Aws/S3/S3Client.php on line 283
好吧,这是有道理的,我想我必须提供一个区域,即使S3不需要区域

php > $s3Client = \Aws\S3\S3Client::factory(array('key' => 'ACCESS', 'secret' => 'SECRET', 'signature' => 'v4', 'region' => 'us-east-1'));
php > $objects = $s3Client->getListObjectsIterator(array('Bucket'=>'my-bucket', 'Region' => 'us-east-1')); foreach ($objects as $object) { echo $object['Key'] . "\n"; };

Warning: Uncaught Aws\S3\Exception\S3Exception: AWS Error Code: AuthorizationHeaderMalformed, Status Code: 400, AWS Request ID: REQUEST, AWS Error Type: client, AWS Error Message: The authorization header is malformed; the region 'us-east-1' is wrong; expecting 'us-east-2', User-Agent: aws-sdk-php2/2.6.15 Guzzle/3.9.2 curl/7.54.0 PHP/7.1.23 ITR
  thrown in phar:///Library/WebServer/aws.phar/Aws/Common/Exception/NamespaceExceptionFactory.php on line 91
哦。。。哦好啊我想我需要使用us-east-2,因为我们其余的服务器和服务都是基于us-east-2构建的

php > $s3Client = \Aws\S3\S3Client::factory(array('key' => 'ACCESS', 'secret' => 'SECRET', 'signature' => 'v4', 'region' => 'us-east-2'));

Warning: Uncaught Aws\Common\Exception\InvalidArgumentException: us-east-2 is not a valid region for Amazon Simple Storage Service in phar:///Library/WebServer/aws.phar/Aws/Common/Client/AbstractClient.php:131
Stack trace:
#0 phar:///Library/WebServer/aws.phar/Aws/Common/Client/ClientBuilder.php(394): Aws\Common\Client\AbstractClient::getEndpoint(Object(Guzzle\Service\Description\ServiceDescription), 'us-east-2', 'https')
#1 phar:///Library/WebServer/aws.phar/Aws/Common/Client/ClientBuilder.php(204): Aws\Common\Client\ClientBuilder->updateConfigFromDescription(Object(Guzzle\Common\Collection))
#2 phar:///Library/WebServer/aws.phar/Aws/S3/S3Client.php(207): Aws\Common\Client\ClientBuilder->build()
#3 php shell code(1): Aws\S3\S3Client::factory(Array)
#4 {main}
  thrown in phar:///Library/WebServer/aws.phar/Aws/Common/Client/AbstractClient.php on line 131
那你为什么要告诉我使用us-east-2 AWS


我的aws.phar版本是2.6.15。

这是2.x.x版本中aws PHP SDK的一个已知问题。
您需要将SDK升级到2.8.x及以上版本。

这是AWS PHP SDK在2.x.x版本中的一个已知问题。
您需要将SDK升级到2.8.x及以上版本。

相信是sigv4需要区域,而不是S3本身,以便签名过程可以创建凭证范围(日期/区域/服务/aws_request4)。啊,是的,在阅读错误消息后,我看到了该注释。谢谢@jarmod。相信是sigv4需要区域,而不是S3本身,以便签名过程可以创建凭证作用域(日期/区域/服务/aws_请求4)。啊,是的,在阅读错误消息后,我看到了该注释。谢谢@jarmod。我现在就试试这个,非常感谢!我从我们的生产环境中获取了这个phar,我正在本地运行它,所以我完全不知道它是如何工作的。我尝试了2.7.0,没有骰子。我将尝试更高版本。2.8.0似乎在我的PHP CLI中工作!我现在要试着让它在我的本地主机上运行。再次感谢你!你是救命恩人。这是一个巨大的障碍,花了太多时间才弄清楚。我很高兴回到正轨。很高兴我能帮上忙!:)我现在就试试这个,非常感谢!我从我们的生产环境中获取了这个phar,我正在本地运行它,所以我完全不知道它是如何工作的。我尝试了2.7.0,没有骰子。我将尝试更高版本。2.8.0似乎在我的PHP CLI中工作!我现在要试着让它在我的本地主机上运行。再次感谢你!你是救命恩人。这是一个巨大的障碍,花了太多时间才弄清楚。我很高兴回到正轨。很高兴我能帮上忙!:)