在亚马逊 AWS 中出现权限拒绝的情况

4

我正在尝试通过使用AWS凭据文件连接到Amazon S3,为此我已经完成了以下步骤:

  1. I have created credentials.ini file at .aws\credentials. It have valid AWSAccessKeyId and AWSSecretKey

    [default]
    AWSAccessKeyId=somekey
    AWSSecretKey=somesecretkey
    
  2. I am doing following to use key and list all object

.

$s3 = new Aws\S3\S3Client([
    'version' => 'latest',
    'region'  => 'us-west-2'
]);


$result = $s3->listBuckets();
var_dump($result);

我遇到了一个错误。

Warning: parse_ini_file(C:\Users\user\.aws\credentials): failed to open stream: Permission denied in C:\xampp\htdocs\aws\vendor\aws\aws-sdk-php\src\Credentials\CredentialProvider.php on line 216

Fatal error: Uncaught exception 'Aws\Exception\CredentialsException' with message 'Error retrieving credentials from the instance profile metadata server. (cURL error 28: Connection timed out after 1000 milliseconds (see http://curl.haxx.se/libcurl/c/libcurl-errors.html))' in C:\xampp\htdocs\aws\vendor\aws\aws-sdk-php\src\Credentials\InstanceProfileProvider.php:79 Stack trace: #0 C:\xampp\htdocs\aws\vendor\guzzlehttp\promises\src\Promise.php(199): Aws\Credentials\InstanceProfileProvider->Aws\Credentials\{closure}(Array) #1 C:\xampp\htdocs\aws\vendor\guzzlehttp\promises\src\Promise.php(152): GuzzleHttp\Promise\Promise::callHandler(2, Array, Array) #2 C:\xampp\htdocs\aws\vendor\guzzlehttp\promises\src\TaskQueue.php(60): GuzzleHttp\Promise\Promise::GuzzleHttp\Promise\{closure}() #3 C:\xampp\htdocs\aws\vendor\guzzlehttp\guzzle\src\Handler\CurlMultiHandler.php(96): GuzzleHttp\Promise\TaskQueue->run() #4 C:\xampp\htdocs\aws\vendor\guzzlehttp\guzzle\src\Handler\CurlMultiHandler.php(123): GuzzleHttp\Handler\CurlMultiHandler->tick in C:\xampp\htdocs\aws\vendor\aws\aws-sdk-php\src\Credentials\InstanceProfileProvider.php on line 79
1个回答

3
根据AWS PHP文档,凭证文件的格式如下:
[default]
aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID
aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY

在您的情况下,我认为以下是所发生的事情:
1.首先,PHP库试图从环境中获取凭据,但它们不存在,所以...
2.接下来,它尝试从INI文件中获取它们,但您已经拼错了键名,所以...
3.最后,它尝试从EC2元数据服务器获取它们,但看起来您不是在EC2实例上运行,因此没有元数据服务器,这次尝试使用curl超时。
您可以在AWS PHP库的源代码中清楚地看到所有这些。
传递给您的最终结果是第3步失败了,但实际上第1、2和3步都失败了。因此,我认为修复问题就像简单地更正INI文件中的键名一样简单。

我有亚马逊AWS的凭证,所以这个答案不相关 :( - Richerd fuld
@Richerdfuld,你为什么认为你“拥有亚马逊AWS的凭证”? - jarmod
1
Richard,Jarmod 是完全正确的。你的凭据格式是不正确的。我建议你改变它们并尝试一下,因为按照现在的方式永远行不通。 - CargoMeister

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接