我创建了一个EC2 Ubuntu实例。
以下是使用适用于PHP的AWS 2.6 SDK:
$client = DynamoDbClient::factory(array(
'key' => 'xxx',
'secret' => 'xxx',
'region' => 'eu-west-1'
));
我在~/.aws/credentials
创建了一个凭证文件
我把它放在/home/ubuntu/.aws/credentials
[default]
aws_access_key_id=xxx
aws_secret_access_key=xxx
尝试以下操作无效,并提供InstanceProfileCredentialsException
:
$client = DynamoDbClient::factory(array(
'profile' => 'default',
'region' => 'eu-west-1'
));
有一位用户www-data
和一位用户ubuntu
我应该在什么文件夹中放置凭证文件?
答案 0 :(得分:8)
设置凭据的一个解决方案是:
sudo nano /etc/apache2/envvars
添加环境变量:
export AWS_ACCESS_KEY_ID="xxx"
export AWS_SECRET_ACCESS_KEY="xxx"
sudo service apache2 restart
之后,以下工作:
$client = DynamoDbClient::factory(array(
'region' => 'eu-west-1'
));
答案 1 :(得分:5)
如果您从EC2实例调用API,则应使用IAM roles。
使用IAM角色是提供凭据的首选技术 到在Amazon EC2上运行的应用程序。 IAM角色消除了需要 担心您的应用程序的凭据管理。他们允许 实例通过从中检索临时凭证来“承担”一个角色 EC2实例的元数据服务器。这些临时凭证通常是 称为实例配置文件凭据,允许访问 角色的政策允许的行动和资源。
答案 2 :(得分:2)
我有一台非EC2服务器访问SQS并需要凭据。我无法使用envvars
,因为在此服务器上运行的人有不同的权限,envvars
是全局的。出于同样的原因,我认为我不能使用存储在用户家中的AWS credential file(尽管我也无法弄清楚如何为用户的www数据工作。)
我所做的是设置一个小文件AWS_Creds.php
<?php
define ("AWS_KEY", "MY KEY HERE");
define ("AWS_SECRET", "MY SECRET");
?>
该文件存储在webroot之外,并包含在include ('ABSOLUTEPATH/AWS_Creds.php')
中,并且我将硬连线引用包含在客户端工厂中。
优雅?没有。完成?是。
修改强>
我忘了提及:我gitignore AWS_Creds.php这样它就不会进入我们的仓库。
答案 3 :(得分:2)
基本上你可以这样使用:
$client = DynamoDbClient::factory(array(
'key' => 'aws_key',
'secret' => 'aws_secret',
'region' => 'us-east-1'
));
但在文档中:
从AWS SDK for PHP 2.6.2版开始,您可以使用AWS凭证文件来指定凭据。这是一个存储在HOME目录下的特殊INI格式文件,是管理开发环境凭据的好方法。该文件应放在〜/ .aws / credentials中,其中〜表示您的HOME目录。
和用法:
$dynamoDbClient = DynamoDbClient::factory(array(
'profile' => 'project1',
'region' => 'us-west-2',
));
更多信息:http://docs.aws.amazon.com/aws-sdk-php/guide/latest/credentials.html
答案 4 :(得分:1)
在aws / aws-sdk-php / src中观察源代码Credential.php后, php默认无法直接访问/ root文件夹。您可以在php中编写$ _SERVER [&#39; HOME&#39;] = [您的新主路径],并将凭证文件放入newHomePath / .aws / credentials。
答案 5 :(得分:1)
这太晚了,但我找到的实际使用环境变量的共享服务器的解决方案是定义一个自定义的ini文件位置,如下所示:
require (__DIR__.'/AWSSDK/aws-autoloader.php');
use Aws\Credentials\CredentialProvider;
use Aws\S3\S3Client;
$profile = 'default';
$path = '/path/to/credentials';
$provider = CredentialProvider::ini($profile, $path);
$provider = CredentialProvider::memoize($provider);
$client = new \Aws\S3\S3Client([
'version' => 'latest',
'region' => 'us-west-2',
'credentials' => $provider
]);
请注意,您甚至可以使用此方法定义不同的配置文件。 文档HERE