在amazon aws中获得许可被拒绝


getting permission denied in amazon aws

我正在尝试通过使用AWS凭证文件连接到amazon s3,为此我做了以下事情

  1. 我已经在.aws'credentials创建了credentials.ini文件。有有效的AWSAccessKeyIdAWSSecretKey

    [default]
    AWSAccessKeyId=somekey
    AWSSecretKey=somesecretkey
    
  2. 我正在做以下使用键并列出所有对象

.

$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

根据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文件中的关键名称一样简单。