放置AWS PHP SDK的凭证文件的位置

Guu*_*uus 7 amazon-ec2 amazon-web-services

我创建了一个EC2 Ubuntu实例.

以下是使用适用于PHP的AWS 2.6 SDK:

$client = DynamoDbClient::factory(array(
    'key' => 'xxx',
    'secret' => 'xxx',
    'region'  => 'eu-west-1'
));
Run Code Online (Sandbox Code Playgroud)

我在中创建了一个凭证文件~/.aws/credentials.
我把它放进去了/home/ubuntu/.aws/credentials

[default]
aws_access_key_id=xxx
aws_secret_access_key=xxx
Run Code Online (Sandbox Code Playgroud)

尝试以下操作不起作用,并给出InstanceProfileCredentialsException :

$client = DynamoDbClient::factory(array(
    'profile' => 'default',
    'region'  => 'eu-west-1'
));
Run Code Online (Sandbox Code Playgroud)

有用户www-data和用户ubuntu.
我应该在什么文件夹中放置凭证文件?

Guu*_*uus 8

设置凭据的一种解决方案是:

sudo nano /etc/apache2/envvars

添加环境变量:

export AWS_ACCESS_KEY_ID="xxx"
export AWS_SECRET_ACCESS_KEY="xxx"
Run Code Online (Sandbox Code Playgroud)

sudo service apache2 restart

之后,以下工作:

$client = DynamoDbClient::factory(array(
    'region'  => 'eu-west-1'
));
Run Code Online (Sandbox Code Playgroud)


JMZ*_*JMZ 6

这已经太晚了,但是我为无法实际使用环境变量的共享服务器找到的解决方案是定义自定义 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
]);
Run Code Online (Sandbox Code Playgroud)

请注意,您甚至可以使用此方法定义不同的配置文件。文档在这里


mag*_*tik 5

如果从EC2实例调用API,则应使用IAM角色.

使用IAM角色是为在Amazon EC2上运行的应用程序提供凭据的首选技术.IAM角色无需担心应用程序的凭据管理.它们允许实例通过从EC2实例的元数据服务器检索临时凭证来"承担"角色.这些临时凭证(通常称为实例配置文件凭据)允许访问角色策略允许的操作和资源.


Mar*_*son 2

我有一个访问 SQS 并需要凭据的非 EC2 服务器。我无法使用envvars,因为有不同权限的不同人在此服务器上运行并且envvars是全球性的。出于同样的原因,我认为我不能使用存储在用户家中的AWS 凭证文件(尽管我也不知道如何使该文件适用于用户 www-data。)

我所做的是设置一个小文件 AWS_Creds.php

<?php
define ("AWS_KEY", "MY KEY HERE");
define ("AWS_SECRET", "MY SECRET");
?>
Run Code Online (Sandbox Code Playgroud)

该文件存储在 Webroot 之外并包含在其中,include ('ABSOLUTEPATH/AWS_Creds.php')并且我包含对客户端工厂的硬连线引用。

优雅的?不,完成了吗?是的。

编辑

我忘了提及:我忽略了AWS_Creds.php,这样它就不会进入我们的存储库。