Как получить сохраненные секреты с помощью PHP в шаблоне запуска EC2 ⇐ Php
-
Anonymous
Как получить сохраненные секреты с помощью PHP в шаблоне запуска EC2
Я много читал о том, как правильно использовать SecretsManager и учетные данные AWS для доступа к моим секретам через прикрепленную роль экземпляра и профиль в /.aws/credentials, содержащий мои учетные данные AWS. Но теперь я застрял в том, как все это сделать при запуске нового экземпляра с использованием шаблона запуска. Я хочу делать все при запуске экземпляра, поэтому я хочу иметь возможность получать свои секреты с помощью роли IAM, которая имеет доступ к SecretsManager при запуске моего экземпляра. Я предполагал, что сделаю это в области «Пользовательские данные». Однако, чтобы получить файл /.aws/credentials, мне нужно вручную вставить эти данные в CLI, когда он предложит мне команду «aws configure».
Как мне сделать все это автоматически? Я, кстати, совсем не уверен, что делаю это правильно, поскольку пытался накопить множество различных руководств, документации AWS и результатов по stackoverflow.
Я пытаюсь получить секреты из моего SecretsManager в PHP, и это функции, которые я пытаюсь использовать, прямо сейчас я столкнулся с сообщением «не могу найти ~/.aws/credentials», потому что мой шаблон запуска не создав его самостоятельно
$client = новый SecretsManagerClient([ 'профиль' => 'по умолчанию', 'версия' => '2017-10-17', 'регион' => 'eu-central-1', ]); пытаться { $result = $client->getSecretValue([ 'SecretId' => $secret_name, ]); } catch (AwsException $e) { $error = $e->getAwsErrorCode(); if ($error == 'DecryptionFailureException') { // Secrets Manager не может расшифровать защищенный секретный текст с помощью предоставленного ключа AWS KMS. // Обработка исключения здесь и/или его повторное создание при необходимости. бросить $е; } if ($error == 'InternalServiceErrorException') { // Произошла ошибка на стороне сервера. // Обработка исключения здесь и/или его повторное создание при необходимости. бросить $е; } if ($error == 'InvalidParameterException') { // Вы указали неверное значение параметра. // Обработка исключения здесь и/или его повторное создание при необходимости. бросить $е; } if ($error == 'InvalidRequestException') { // Вы указали значение параметра, которое недопустимо для текущего состояния ресурса. // Обработка исключения здесь и/или его повторное создание при необходимости. бросить $е; } if ($error == 'ResourceNotFoundException') { // Мы не можем найти ресурс, который вы запросили. // Обработка исключения здесь и/или его повторное создание при необходимости. бросить $е; } } // Расшифровывает секрет, используя связанный KMS CMK. // В зависимости от того, является ли секрет строкой или двоичным кодом, одно из этих полей будет заполнено. if (isset($result['SecretString'])) { $secret = $result['SecretString']; } еще { $secret = base64_decode($result['SecretBinary']); } вернуть json_decode($secret, true); }
Я много читал о том, как правильно использовать SecretsManager и учетные данные AWS для доступа к моим секретам через прикрепленную роль экземпляра и профиль в /.aws/credentials, содержащий мои учетные данные AWS. Но теперь я застрял в том, как все это сделать при запуске нового экземпляра с использованием шаблона запуска. Я хочу делать все при запуске экземпляра, поэтому я хочу иметь возможность получать свои секреты с помощью роли IAM, которая имеет доступ к SecretsManager при запуске моего экземпляра. Я предполагал, что сделаю это в области «Пользовательские данные». Однако, чтобы получить файл /.aws/credentials, мне нужно вручную вставить эти данные в CLI, когда он предложит мне команду «aws configure».
Как мне сделать все это автоматически? Я, кстати, совсем не уверен, что делаю это правильно, поскольку пытался накопить множество различных руководств, документации AWS и результатов по stackoverflow.
Я пытаюсь получить секреты из моего SecretsManager в PHP, и это функции, которые я пытаюсь использовать, прямо сейчас я столкнулся с сообщением «не могу найти ~/.aws/credentials», потому что мой шаблон запуска не создав его самостоятельно
$client = новый SecretsManagerClient([ 'профиль' => 'по умолчанию', 'версия' => '2017-10-17', 'регион' => 'eu-central-1', ]); пытаться { $result = $client->getSecretValue([ 'SecretId' => $secret_name, ]); } catch (AwsException $e) { $error = $e->getAwsErrorCode(); if ($error == 'DecryptionFailureException') { // Secrets Manager не может расшифровать защищенный секретный текст с помощью предоставленного ключа AWS KMS. // Обработка исключения здесь и/или его повторное создание при необходимости. бросить $е; } if ($error == 'InternalServiceErrorException') { // Произошла ошибка на стороне сервера. // Обработка исключения здесь и/или его повторное создание при необходимости. бросить $е; } if ($error == 'InvalidParameterException') { // Вы указали неверное значение параметра. // Обработка исключения здесь и/или его повторное создание при необходимости. бросить $е; } if ($error == 'InvalidRequestException') { // Вы указали значение параметра, которое недопустимо для текущего состояния ресурса. // Обработка исключения здесь и/или его повторное создание при необходимости. бросить $е; } if ($error == 'ResourceNotFoundException') { // Мы не можем найти ресурс, который вы запросили. // Обработка исключения здесь и/или его повторное создание при необходимости. бросить $е; } } // Расшифровывает секрет, используя связанный KMS CMK. // В зависимости от того, является ли секрет строкой или двоичным кодом, одно из этих полей будет заполнено. if (isset($result['SecretString'])) { $secret = $result['SecretString']; } еще { $secret = base64_decode($result['SecretBinary']); } вернуть json_decode($secret, true); }
Мобильная версия