Назад | Перейти на главную страницу

Учетные данные AWS не работают - ~ / .aws / credentials

У меня проблема с моими учетными данными AWS. Я использовал файл учетных данных, который я создал в ~ / .aws / credentials, так же, как он написан в документе AWS. Однако apache просто не может его прочитать.

Сначала я получал эту ошибку:

Ошибка при получении учетных данных с сервера метаданных профиля экземпляра. Если вы не работаете в Amazon EC2, вы должны указать свой идентификатор ключа доступа AWS и секретный ключ доступа в параметрах «ключ» и «секрет» при создании клиента или предоставить экземпляр объекта Aws \ Common \ Credentials CredentialsInterface.

Затем я попробовал несколько решений, которые нашел в Интернете. Например, я пытался проверить свою переменную HOME. Это был / home / ubuntu. Я также попытался переместить свой файл учетных данных в каталог / var / www, даже если это не каталог моего веб-сервера. Ничего не получилось. Я все еще получал ту же ошибку.

В качестве второго решения я увидел, что мы можем напрямую вызвать 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. Он запускает приложение Symfony, развернутое с помощью Capifony.

Прежде чем я попробую на этом производственном сервере, я попробовал его на сервере разработки, где он отлично работает только с файлом ~ / .aws / credentials. Этот сервер разработки является точной копией рабочего сервера. Однако он не использует Capifony для развертывания. Это просто обычный git-клон проекта. И у него только один том EBS, в то время как на производственном сервере один для ОС и один для приложения.

Ах! И я также проверил, были ли разрешения / владельцы файла учетных данных одинаковыми на обоих серверах, и они одинаковы. Я попробовал 777, чтобы посмотреть, может ли он что-то изменить, но ничего.

Есть у кого-нибудь идеи?

У меня тоже естьCannot read credentials from /.aws/credentials' ошибка. Решение указано в сообщении об ошибке.

/.aws/credentials это файл и каталог непосредственно из корневого каталога / и это то место, где его ищет SDK. Пользователь, под которым работает Apache (пользователь apache на centos7) не имеет собственного дома, поэтому нет ~ / home.

Некоторое предупреждение об этом должно быть в документации aws!

Создайте файл учетных данных точно так, как /.aws/credentials и нет ~/user/.aws/credentials

Прекрасно работает.

Если вы настроили selinux на принудительное исполнение, вам нужно будет рекурсивно изменить контекст безопасности ./aws, чтобы он соответствовал контексту httpd. В противном случае apache не сможет прочитать файл учетных данных.

sudo chcon -Rv --type = httpd_sys_content_t /.aws

$ ls -Z /.aws/credentials -rwxr-xr-x. корень root unlimited_u: object_r: httpd_sys_content_t: s0 /.aws/credentials

Если вы работаете из экземпляра EC2, рекомендуется использовать роли IAM вместо хранения учетных данных. Перейдите в IAM> роли> создать роли, создайте свою роль и прикрепите политику с необходимыми разрешениями к этой роли (я могу помочь в этом, если вам нужно). Затем создайте машину EC2, и когда вы перейдете к «Шагу 3: Настройка деталей экземпляра», прикрепите эту роль к своей машине. С этого момента вам не нужно будет хранить какие-либо учетные данные на своем компьютере, каждый вызов aws API будет подписываться «автоматически».

если вы хотите прикрепить роль к существующей машине, вам нужно создать AMI из машины и создать новую виртуальную машину из этого AMI с прикрепленной ролью.

Что я делаю, так это то, что я всегда прикрепляю к своим виртуальным машинам хотя бы пустую роль, чтобы при необходимости я мог позже присоединить политику к этой роли и разрешить моей машине вызывать API.

Если это может кому-то помочь, мне удалось заставить мой файл .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) на одном сервере, а на другом - нет.

Если кто-то что-то знает об этом, дайте мне знать.