Доступ к сервисам aws без ключа и секрета в php - PullRequest
0 голосов
/ 12 июня 2018

Для ясности, мы создали политику EC2, поэтому мой сайт может напрямую обращаться к таким службам, как хранилище параметров, S3, Amazon SES и т. Д.

На данный момент все мои учетные данные хранятся в AWS.Хранилище параметров, а затем сайт использует эти учетные данные, например, учетные данные БД, diff.Ключи API и т. Д. Таким образом, только жестко закодированные учетные данные выбирают параметры из хранилища параметров.Теперь клиент хочет удалить эти жестко закодированные учетные данные, поэтому мы создали Политику EC2.

До сих пор у нас есть код, подобный приведенному ниже, для извлечения параметров:

$config = array(
        'version' => 'latest',
        'region' => '*****',
        'credentials' => array(
            'key' => '*******',
            'secret' => '******',
        )
    );
$s3_instance = new \Aws\Ssm\SsmClient($config);

$result = $s3_instance->getParameters([
    'Names' => $credential_group,
    'WithDecryption' => true
]);
//converting S3 private data to array to read
$keys = $result->toArray();
var_dump($keys);

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

Примечание: я использую библиотеку AWS PHP для выполнения выше.

Обновление

Дальнейшее чтение документации, https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html

Использование учетных данныхиз переменных среды
Если вы не предоставляете учетные данные клиентскому объекту во время его создания, SDK попытается найти учетные данные в вашей среде.Первое место, в котором SDK проверяет учетные данные, - это переменные среды.SDK использует функцию функции getenv () для поиска переменных среды AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY и AWS_SESSION_TOKEN.Эти учетные данные называются учетными данными среды.

Итак, после этого я попробовал следующее:

var_dump (getenv ('AWS_ACCESS_KEY_ID'));

Но это возвращает bool (false).Так нужно ли мне вручную устанавливать их в учетных данных среды?
Какие вещи мне нужно изменить в приведенном выше коде?

Обновление

На основе этого документа: https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_configuration.html#credentials

Я внес следующие изменения (удалил часть учетных данных из массива):

$config = array(
    'version' => 'latest',
    'region' => '*****'
);

Затем система выдает следующие предупреждения:

Предупреждение: include (Test_Role_Cognitoaccess_from_instanceRole.php):не удалось открыть поток

Предупреждение: include (): не удалось открыть 'Test_Role_Cognitoaccess_from_instanceRole.php' для включения (include_path = '.: / usr / share / pear: / usr / share / php')

Предупреждение: include (Test_Role_Cognitoaccess_from_instanceRole.php): не удалось открыть поток

Предупреждение: include (): не удалось открыть 'Test_Role_Cognitoaccess_from_instanceRole.php' для включения (include_path = '.: / Usr / share / pear /:usr / share / php ')

1 Ответ

0 голосов
/ 12 июня 2018

Как вы уже упоминали, что вы прикрепили политику к роли IAM EC2 для доступа к другим сервисам AWS.

Вам следует попытаться создать поставщика учетных данных по умолчанию, он автоматически выберет ключи из роли.

$provider = CredentialProvider::chain(CredentialProvider::env(), CredentialProvider::ini(), CredentialProvider::instanceProfile(), CredentialProvider::ecsCredentials());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...