#amazon-web-services #amazon-ec2
#amazon-веб-сервисы #amazon-ec2
Вопрос:
Я создал экземпляр EC2 Ubuntu.
Следующее работает с использованием AWS 2.6 SDK для PHP:
$client = DynamoDbClient::factory(array(
'key' => 'xxx',
'secret' => 'xxx',
'region' => 'eu-west-1'
));
Я создал файл учетных ~/.aws/credentials
данных.
Я вставил это в /home/ubuntu/.aws/credentials
[default]
aws_access_key_id=xxx
aws_secret_access_key=xxx
Попытка выполнить следующее не работает и выдает InstanceProfileCredentialsException
:
$client = DynamoDbClient::factory(array(
'profile' => 'default',
'region' => 'eu-west-1'
));
Есть пользователь www-data
и пользователь ubuntu
.
В какую папку я должен поместить файл учетных данных?
Комментарии:
1. на моей стороне это работает отлично. $client = DynamoDbClient::factory(array(‘key’=>’keystring’,’secret’=>’sercretkeysting’,’region’ => Region::US_EAST_1 #заменить на нужный регион)); попробуйте этот формат для доступа.
Ответ №1:
Одним из решений для установки учетных данных является:
sudo nano /etc/apache2/envvars
добавление переменных среды:
export AWS_ACCESS_KEY_ID="xxx"
export AWS_SECRET_ACCESS_KEY="xxx"
sudo service apache2 restart
После этого выполняется следующее:
$client = DynamoDbClient::factory(array(
'region' => 'eu-west-1'
));
Ответ №2:
Если вы вызываете API из экземпляра EC2, вам следует использовать роли IAM.
Использование ролей IAM является предпочтительным методом предоставления учетных данных приложениям, работающим на Amazon EC2. Роли IAM устраняют необходимость беспокоиться об управлении учетными данными в вашем приложении. Они позволяют экземпляру «брать на себя» роль, извлекая временные учетные данные с сервера метаданных экземпляра EC2. Эти временные учетные данные, часто называемые учетными данными профиля экземпляра, предоставляют доступ к действиям и ресурсам, разрешенным политикой роли.
Ответ №3:
Это слишком поздно, но решение, которое я нашел для общих серверов, где вы не можете использовать переменные среды, — это определить местоположение пользовательского ini-файла, например:
require (__DIR__.'/AWSSDK/aws-autoloader.php');
use AwsCredentialsCredentialProvider;
use AwsS3S3Client;
$profile = 'default';
$path = '/path/to/credentials';
$provider = CredentialProvider::ini($profile, $path);
$provider = CredentialProvider::memoize($provider);
$client = new AwsS3S3Client([
'version' => 'latest',
'region' => 'us-west-2',
'credentials' => $provider
]);
Обратите внимание, что с помощью этого метода можно даже определять разные профили.
Документация ЗДЕСЬ
Ответ №4:
У меня есть сервер, отличный от EC2, который обращается к SQS и нуждается в учетных данных. Я не могу использовать envvars
, потому что на этом сервере работают разные люди с разными правами, и envvars
он является глобальным. По той же причине я не думаю, что смогу использовать файл учетных данных AWS, хранящийся в домашнем хранилище пользователя (хотя я также не мог понять, как заставить это работать с пользовательскими www-данными.)
Что я сделал, так это создал небольшой файл AWS_Creds.php
<?php
define ("AWS_KEY", "MY KEY HERE");
define ("AWS_SECRET", "MY SECRET");
?>
Файл хранится за пределами веб-корня и включен, include ('ABSOLUTEPATH/AWS_Creds.php')
и я включаю жесткую проводную ссылку на фабрику клиентов.
Элегантно? Нет. Готово? ДА.
Редактировать
Я забыл упомянуть: я gitignore AWS_Creds.php чтобы он не попал в наше репо.
Комментарии:
1. Это действительно делает это, и я бы предпочел только решение, которое хранит ключи (независимо от того, насколько ограничен IAM политикой) из репозитория Git.
Ответ №5:
в основном вы можете использовать так :
$client = DynamoDbClient::factory(array(
'key' => 'aws_key',
'secret' => 'aws_secret',
'region' => 'us-east-1'
));
но в документации :
Начиная с AWS SDK для PHP версии 2.6.2, вы можете использовать файл учетных данных AWS для указания своих учетных данных. Это специальный файл в формате INI, который хранится в вашем ДОМАШНЕМ каталоге и является хорошим способом управления учетными данными для вашей среды разработки. Файл должен быть размещен в ~/.aws/credentials, где ~ представляет ваш ДОМАШНИЙ каталог.
и использование :
$dynamoDbClient = DynamoDbClient::factory(array(
'profile' => 'project1',
'region' => 'us-west-2',
));
дополнительная информация: http://docs.aws.amazon.com/aws-sdk-php/guide/latest/credentials.html
Ответ №6:
После просмотра исходного кода Credential.php в aws / aws-sdk-php/src php не может напрямую обращаться к папке /root по умолчанию. Вы можете написать $_SERVER[‘HOME’]=[ваш новый домашний путь] в вашем php и поместить файл учетных данных в newHomePath/.aws/credentials .
Комментарии:
1. $ _SERVER [‘HOME’] вообще не был установлен в моей установке
Ответ №7:
require('vendor/autoload.php');
use AwsEc2Ec2Client;
$credentials = new Aws Credentials Учетные данные (‘Ваш ключ доступа’,
‘Ваш секретный ключ’); // Поместите сюда оба ключа
$ec2Client = new AwsEc2Ec2Client([
'version' => 'latest',
'region' => 'ap-south-1',
'credentials' => $credentials
]);
$result = $ec2Client->describeKeyPairs();
echo '<pre>';
print_r($result);
Справочный сайт: https://docs.aws.amazon.com/aws-sdk-php/v2/guide/credentials.html#passing-credentials-into-a-client-factory-method