У меня проблема с моими учетными данными 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򎘰
Ошибка изменилась, но заставить ее работать не удалось:
Не удается прочитать учетные данные из /.aws/credentials
Я также увидел, что мы можем использовать поставщика CredentialsProvider по умолчанию вместо указания пути.
Я попробовал, но все равно получаю ту же ошибку:
Не удается прочитать учетные данные из /.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) на одном сервере, а на другом - нет.
Если кто-то что-то знает об этом, дайте мне знать.