【问题标题】:getting permission denied in amazon aws在亚马逊 AWS 中获得许可被拒绝
【发布时间】:2015-10-21 17:05:13
【问题描述】:

我正在尝试使用 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

【问题讨论】:

    标签: php amazon-web-services amazon-s3 aws-sdk


    【解决方案1】:

    根据AWS PHP documentation,凭证文件的格式如下:

    [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 的尝试超时。

    您可以在source code for the AWS PHP library 中清楚地看到所有这些。

    最终浮出水面的结果是第 3 步失败,但实际上第 1、第 2 和第 3 步都失败了。所以,我认为修复就像更正 INI 文件中的键名一样简单。

    【讨论】:

    • 我有根据亚马逊 AWS 的凭据,所以答案不相关:(
    • @Richerdfuld 为什么你认为你“根据亚马逊 AWS 拥有凭据”?
    • 理查德,贾莫德是完全正确的。您确实拥有正确格式的凭据。我建议您更改它们并尝试一下,因为它永远不会像您拥有它们那样起作用。
    猜你喜欢
    • 2015-09-26
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多