Я регулярно пользуюсь сервисами AWS, и мой PHP SDK автоматически получает учетные данные из моего экземпляра ec2 при подключении к Amazon.
Теперь у меня есть библиотека, которую я хочу использовать, которая также требует, чтобы мой секретный ключ AWS и ключ доступа были включены при создании экземпляра класса.
Как я могу получить текущий токен доступа и секретный ключ через AWS PHP SDK, чтобы не вводить жесткие ключи в свое приложение?
Где вы храните свои учетные данные AWS? В файле учетных данных или роли IAM?
[РЕДАКТИРОВАТЬ после того, как OP предоставил конкретные детали случая использования]Из предоставленной вами ссылки измените пример, чтобы он выглядел следующим образом. Примечание: я не проверял код, но это будет близко:
// Require Composer's autoloader
require_once __DIR__ . "/vendor/autoload.php";
use Aws\Credentials\Credentials
use Aws\Credentials\CredentialProvider;
use Aws\Exception\CredentialsException;
use EddTurtle\DirectUpload\Signature;
// Use the default credential provider
$provider = CredentialProvider::defaultProvider();
$credentials = $provider()->wait();
$upload = new Signature(
$credentials->getAccessKeyId(),
$credentials->getSecretKey(),
"YOUR_S3_BUCKET",
"eu-west-1");
[КОНЕЦ РЕДАКТИРОВАНИЯ]
Самый простой ответ, если вы используете файл учетных данных — это открыть ~ / .aws / credentials в текстовом редакторе и извлечь их. В противном случае следуйте подробностям ниже.
Внизу приведен фактический ответ о том, как извлечь ключ доступа после загрузки.
В следующем примере клиент DynamoDB будет создан с использованием учетных данных, хранящихся в ~ / .aws / credentials (обычно создаваемых интерфейсом командной строки AWS) из профиля с именем «project1»:
$client = new DynamoDbClient([
'profile' => 'project1',
'region' => 'us-west-2',
'version' => 'latest'
]);
Однако обычно вы хотите, чтобы SDK автоматически определял ваши учетные данные. AWS SDK будет искать ваши учетные данные в следующем порядке (не во всех случаях):
Обычно просто используйте этот пример и позвольте SDK найти учетные данные для вас:
use Aws\Credentials\CredentialProvider;
use Aws\S3\S3Client;
// Use the default credential provider
$provider = CredentialProvider::defaultProvider();
// Pass the provider to the client
$client = new S3Client([
'region' => 'us-west-2',
'version' => '2006-03-01',
'credentials' => $provider
]);
В SDK есть ряд поставщиков учетных данных, чтобы вы могли точно контролировать, откуда поступают ваши учетные данные.
Одним из пунктов является то, что вы упоминаете токен доступа. Это означает, что вы используете тип доступа STS Assume Role. PHP SDK также поддерживает это. Просто покопайтесь в документации по СТС:
После того как вы загрузили свои учетные данные в провайдера, вы можете использовать класс Credentials для извлечения трех компонентов (AccessKeyId, AcessKeySecret, SecurityToken):
Других решений пока нет …