it-swarm.com.ru

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

У меня проблема с учетными данными 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, чтобы увидеть, может ли он что-то изменить, но ничего.

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

13
ana-lu

Похоже, вы делаете это неправильно. Вам не нужно развертывать учетные данные в экземпляре EC2, чтобы этот экземпляр взаимодействовал с другими сервисами AWS, и если факт не должен когда-либо внедрять учетные данные в экземпляр EC2.

Вместо этого, когда вы создаете свой экземпляр, вы связываете с ним роль IAM. Эта роль имеет политики, контролирующие доступ к другим сервисам AWS. 

Вы можете создать пустую роль, запустить экземпляр, а затем изменить роль позже. Вы не можете назначить роль после запуска экземпляра.

Теперь вы можете добавлять роли к экземпляру после того, как он был назначен.

По-прежнему считается оптимальной практикой не развертывать фактические учетные данные в экземпляре EC2.

8
chris

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

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

3
ana-lu

SDK читает из файла, расположенного в ~/.aws/credentials , но похоже, что вы сохраняете файл в ~/.aws/credentials/default.ini. Если вы переместите файл, ошибка, с которой вы столкнулись, должна быть устранена.

1
giaour

2 способа решения этой проблемы для меня Node.js

Он собирается получить мои учетные данные от /home/{USER}/.aws/credentials usin ' профиль по умолчанию

const aws = require('aws-sdk');
aws.config.credentials = aws.SharedIniFileCredentials({profile: 'default'})
...

Жестко закодированный способ

var lambda = new aws.Lambda({
  region: 'us-east-1',
  accessKeyId: <KEY>
  secretAccessKey: <KEY>
});
0
Marcelo Rafael