我的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򎘰
错误已更改但我无法正常工作:
无法从/.aws/credentials
中读取凭据我还看到我们可以使用CredentialsProvider的默认提供程序而不是指示路径。
我试过了,我也一直收到同样的错误:
无法从/.aws/credentials
中读取凭据万一你需要这些信息,我正在使用aws / aws-sdk-php(3.2.5)。我正在尝试使用的服务是AWS Elastic Transcoder。我的EC2实例是一个Ubuntu 14.04。它运行使用Capifony部署的Symfony应用程序。
在我尝试使用此生产服务器之前,我在开发服务器中尝试了它,它只能与〜/ .aws / credentials文件一起使用。此开发服务器正是生产服务器的副本。但是,它不使用Capifony进行部署。它只是该项目的正常git克隆。它只有一个EBS卷,而生产服务器有一个用于操作系统,一个用于应用程序。
啊!我还检查了两个服务器上凭据文件的权限/所有者是否相同,并且它们是相同的。我尝试了一个777,看看它是否能改变一些东西,但没有。
有人有想法吗?
答案 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'})
...