веб-сервисы Amazon — не удается прочитать учетные данные из /.aws/credentials — вызов скрипта PHP AWS-SDK

Я посмотрел на каждый ответ здесь, и кажется, что моя проблема немного отличается или не было правильного решения. Я делаю следующее в моем файле PHP:

use Aws\Route53\Route53Client;

$client = Route53Client::factory(array(
'profile' => 'default',
'region' => 'us-east-1',
'version' => '2013-04-01'
));

Получение этой ошибки:

Fatal error: Uncaught Aws\Exception\CredentialsException: Cannot read credentials from /.aws/credentials

Похоже, что простое исправление будет гарантировать, что каталог HOME является правильным. Это действительно так. Файлы доступны для чтения, и мой ec2-пользователь уже является владельцем. Ключ и секрет уже установлены в файле «учетные данные». Имя профиля уже установлено по умолчанию. Попытался скопировать / .aws в другие каталоги, такие как root, / home и т. Д. И изменил права доступа, chmod, все вышеперечисленное. Еще ничего.

Затем я попытался жестко закодировать учетные данные (я знаю — не рекомендуется), просто чтобы дать ему небольшой толчок, и он полностью игнорирует, что я сделал это:

$client = Route53Client::factory(array(
'profile' => 'default',
'region' => 'us-east-1',
'version' => '2013-04-01',
'credentials' => [
'key' => $key,
'secret' => $secret,
]
));

В крайнем случае, я даже попытался включить класс CredentialProvider и передать его в свой массив — все еще ничего:

'credentials' => CredentialProvider::ini('default', '/home/ec2-user/.aws/credentials'),

Что, черт возьми, я делаю не так?

3

Решение

Не уверен, что вы делаете неправильно, но я бы посоветовал полностью обойти проблему и назначить роль экземпляра EC2 для рассматриваемого vm, и тогда вам не придется об этом беспокоиться; это лучшее / более безопасное решение.

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html

0

Другие решения

Просто удали 'profile' => 'default', и вы должны работать нормально

$client = Route53Client::factory(array(
'region' => 'us-east-1',
'version' => 'latest',
'credentials' => [
'key' => $key,
'secret' => $secret,
]
));
12

Вот что я в конечном итоге сделал для целей этого вопроса, хотя ответ EJ выше на самом деле является правильным ответом. Надеюсь, это поможет кому-то получить файл с учетными данными для чтения:

use Aws\Credentials\CredentialProvider;
use Aws\Route53\Route53Client;

$profile = 'default';
$path = '/var/www/html/.aws/credentials';
$provider = CredentialProvider::ini($profile, $path);
$provider = CredentialProvider::memoize($provider);

$client = Route53Client::factory(array(
'region' => 'us-east-1',
'version' => '2013-04-01',
'credentials' => $provider
));
0

Работая на AWS Centos 7, я попробовал все (chmod / chown / root / home / user, env, bashrc и т. Д.), Чтобы заставить /.aws/credentials работать вне каталога apache / var / www. SDK сообщил, что не может прочитать файл учетных данных.

Я посмотрел на PHP, чтобы увидеть, могу ли я установить / переопределить переменную HOME, и он все равно не прочитал файл учетных данных, пока я не поместил папку .aws в папку ‘/ var / www’ и не установил переменную HOME в своем файле php следующим образом. так:

 <%php
putenv('HOME=/var/www');

//ZIP File SDK Install requires aws-autoloader
require 'aws-autoloader.php'; //Your php code below
0
По вопросам рекламы [email protected]