AWS Secret Manager с .Net Core выдает исключение сокета - PullRequest
0 голосов
/ 02 июля 2019

У кого-нибудь есть идея, почему я получаю эту ошибку, пытаясь получить секрет AWS от менеджера секретов?Это докер-контейнер, работающий в AWS Fargate.

Необработанное исключение: System.AggregateException: произошла одна или несколько ошибок.(Неверный аргумент) ---> System.Net.Http.HttpRequestException: Неверный аргумент ---> System.Net.Sockets.SocketException: Неверный аргумент в System.Net.Http.ConnectHelper.ConnectAsync (Строковый хост, порт Int32, CancellationTokencancellationToken)

Фрагмент кода приведен ниже.И задаче назначена соответствующая роль IAM.

using System;
using System.IO;
using Amazon;
using Amazon.SecretsManager;
using Amazon.SecretsManager.Model;

namespace AssetView.Contacts.WebApi
{
    public static class SecretManager
    {
        public static string GetSecret(string secretName, string region)
        {
            //string secretName = "av/connectionstring/dev";
            // region = "us-east-1";
            string secret = "";

            MemoryStream memoryStream = new MemoryStream();

            IAmazonSecretsManager client = new AmazonSecretsManagerClient(RegionEndpoint.GetBySystemName(region));

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

            GetSecretValueResponse response = null;

            // In this sample we only handle the specific exceptions for the 'GetSecretValue' API.
            // See https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html
            // We rethrow the exception by default.

            try
            {
                response = client.GetSecretValueAsync(request).Result;
            }
            catch 
            {
                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)
            {
                secret = response.SecretString;
            }
            else
            {
                memoryStream = response.SecretBinary;
                StreamReader reader = new StreamReader(memoryStream);
                secret = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(reader.ReadToEnd()));
            }

            return secret;
        }
    }
}

В документе API мало сказано: https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/SecretsManager/MISecretsManagerGetSecretValueAsyncGetSecretValueRequestCancellationToken.html

1 Ответ

0 голосов
/ 07 июля 2019

Оказывается, ECS taskrole не был настроен на получение разрешения на доступ к Secret Manager!Журнал ошибок был немного вводит в заблуждение, хотя.

...