Настройка AWS Secrets Manager. Net Core - PullRequest
1 голос
/ 02 марта 2020

У меня есть. Net Базовое приложение, которое выполняется на экземпляре EC2. Я хочу использовать диспетчер секретов для хранения своих секретов для веб-приложения, таких как «строка подключения» и т. Д. c. Документация AWS Secrets Manager не очень полезна, я не могу найти учебник, который покажет / объяснит, как использовать менеджер секретов в EC2.

Я успешно смог извлечь " «Секрет» с использованием почтальона и с использованием следующего кода: Однако ключ доступа и секретный ключ жестко запрограммированы.

Я не хочу, чтобы это имело место. Я установил SDK и загрузил ключ доступа и секретный ключ в этот профиль.

По сути, мой вопрос заключается в том, как извлечь ключ доступа и секретный ключ из SDK для подписания запроса?

if (secretsDetail == null)
        {
            return "Please provide SecretsDetails.";
        }
        string secretName = "";
        string secret = "";

        MemoryStream memoryStream = new MemoryStream();
        AmazonSecretsManagerConfig amazonSecretsManagerConfig = new AmazonSecretsManagerConfig();
        amazonSecretsManagerConfig.ServiceURL = secretsDetail.ServiceURL;

        IAmazonSecretsManager client = new AmazonSecretsManagerClient(RegionEndpoint.GetBySystemName("eu-west-2"));

        GetSecretValueRequest request = new GetSecretValueRequest();
        request.SecretId = secretName;
        request.VersionStage = secretsDetail.VersionStage == null ? "AWSCURRENT" : secretsDetail.VersionStage; // VersionStage defaults to AWSCURRENT if unspecified.

        GetSecretValueResponse response = null;


        try
        {
            response = client.GetSecretValueAsync(request).Result;
        }
        catch (DecryptionFailureException)
        {
            // Secrets Manager can't decrypt the protected secret text using the provided KMS key.
            // Deal with the exception here, and/or rethrow at your discretion
            throw;
        }
        catch (InternalServiceErrorException)
        {
            // An error occurred on the server side.
            // Deal with the exception here, and/or rethrow at your discretion
            throw;
        }
        catch (InvalidParameterException)
        {
            // You provided an invalid value for a parameter.
            // Deal with the exception here, and/or rethrow at your discretion
            throw;
        }
        catch (InvalidRequestException)
        {
            // You provided a parameter value that is not valid for the current state of the resource.
            // Deal with the exception here, and/or rethrow at your discretion.
            throw;
        }
        catch (ResourceNotFoundException)
        {
            // We can't find the resource that you asked for.
            // Deal with the exception here, and/or rethrow at your discretion.
            throw;
        }
        catch (System.AggregateException)
        {
            // More than one of the above exceptions were triggered.
            // Deal with the exception here, and/or rethrow at your discretion.
            throw;
        }
        // Decrypts secret using the associated KMS CMK.
        // Depending on whether the secret is a string or binary, one of these fields will be populated.
        if (response.SecretString != null)
        {
            return secret = response.SecretString;
        }
        else
        {
            memoryStream = response.SecretBinary;
            StreamReader reader = new StreamReader(memoryStream);
            string decodedBinarySecret = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(reader.ReadToEnd()));
            return decodedBinarySecret;
        }

1 Ответ

2 голосов
/ 02 марта 2020

Короткий ответ на ваш вопрос: вы этого не делаете. SDK автоматически получит для вас учетные данные. Использование учетных данных в приложении . Вы можете использовать любой из методов, описанных здесь, но # 4 является предпочтительным, наиболее безопасным вариантом.

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

...