AWS凭据无效 - 〜/ .aws / credentials

时间:2015-08-07 17:22:15

标签: amazon-web-services amazon-ec2 credentials amazon-elastic-transcoder

我的AWS凭据出现问题。我使用了我在〜/ .aws / credentials上创建的凭证文件,就像它在AWS文档上编写一样。但是,apache无法读取它。

首先,我收到了这个错误:

从实例配置文件元数据服务器检索凭据时出错。如果您未在Amazon EC2内部运行,则在创建客户端或提供实例化的Aws \ Common \ Credentials CredentialsInterface对象时,必须在“密钥”和“机密”选项中提供AWS访问密钥ID和秘密访问密钥。

然后我尝试了一些我在互联网上找到的解决方案。例如,我试图检查我的HOME变量。这是/ home / ubuntu。我还尝试将我的凭证文件移动到/ var / www目录,即使它不是我的Web服务器目录。没有任何效果。我仍然得到同样的错误。

作为第二个解决方案,我看到我们可以直接调用CredentialsProvider并在客户端上指明目录。

https://forums.aws.amazon.com/thread.jspa?messageID=583216&#583216

错误已更改但我无法正常工作:

无法从/.aws/credentials

中读取凭据

我还看到我们可以使用CredentialsProvider的默认提供程序而不是指示路径。

http://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/credentials.html#using-credentials-from-environment-variables

我试过了,我也一直收到同样的错误:

无法从/.aws/credentials

中读取凭据

万一你需要这些信息,我正在使用aws / aws-sdk-php(3.2.5)。我正在尝试使用的服务是AWS Elastic Transcoder。我的EC2实例是一个Ubuntu 14.04。它运行使用Capifony部署的Symfony应用程序。

在我尝试使用此生产服务器之前,我在开发服务器中尝试了它,它只能与〜/ .aws / credentials文件一起使用。此开发服务器正是生产服务器的副本。但是,它不使用Capifony进行部署。它只是该项目的正常git克隆。它只有一个EBS卷,而生产服务器有一个用于操作系统,一个用于应用程序。

啊!我还检查了两个服务器上凭据文件的权限/所有者是否相同,并且它们是相同的。我尝试了一个777,看看它是否能改变一些东西,但没有。

有人有想法吗?

4 个答案:

答案 0 :(得分:8)

听起来你做错了。您不需要将凭据部署到EC2实例,以使该实例与其他AWS服务交互,并且如果事实不应该将凭证部署到EC2实例。

相反,在创建实例时,您将IAM角色与其关联。该角色具有控制对其他AWS服务的访问的策略。

您可以创建一个空角色,启动实例,然后稍后修改该角色。实例启动后,您无法分配角色。

现在,您可以在分配实例后为其添加角色。

不将实际凭据部署到EC2实例仍被视为最佳做法。

答案 1 :(得分:3)

如果这可以帮助某人,我设法让我的.ini文件工作,这样做:

    $profile = 'default';
    $path = '/mnt/app/www/.aws/credentials/default.ini';
    $provider = CredentialProvider::ini($profile, $path);
    $provider = CredentialProvider::memoize($provider);
    $client = ElasticTranscoderClient::factory(array(
        'region'  => 'eu-west-1',
        'version' => '2012-09-25',
        'credentials' => $provider
    ));

CredentialProvider在此文档中进行了解释:

http://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/credentials.html#ini-provider

我仍然不明白为什么我的应用程序无法在一台服务器上读取主目录(〜/ .aws / credentials / default.ini)上的文件,但在另一台服务器上却无法读取。

如果有人对此有所了解,请告诉我。

答案 2 :(得分:1)

SDK从a file located at ~/.aws/credentials读取,但您似乎正在~/.aws/credentials/default.ini保存文件。如果您移动文件,则应清除您遇到的错误。

答案 3 :(得分:0)

对我来说解决此问题的2种方法 Node.js

它将通过default profile

<ul class="navbar"> <li class="listitem" class="drpdm1"><a>123456</a> <ul class="ddc1"> <li><a>123456</a></li> <li><a>123456</a></li> <li><a>123456</a></li> </ul> </li> <li class="listitem" class="drpdm2"><a>654321</a> <ul class="ddc2"> <li><a>123456</a></li> <li><a>123456</a></li> <li><a>123456</a></li> </ul> </li> <li class="listitem"><a>7891911</a></li> <li class="listitem"><a>1231231</a></li> </ul> 获取我的凭据
/home/{USER}/.aws/credentials

硬编码方式

const aws = require('aws-sdk');
aws.config.credentials = aws.SharedIniFileCredentials({profile: 'default'})
...