AWS Parameter Store i NET.Core

AWS Parameter Store i NET.Core

Często pisząc jakieś oprogramowanie musimy korzystać z loginów, haseł i innych sekretnych rzeczy. Takie dane nigdy nie powinny lądować w repozytorium. Amazon Web Services oferuje nam fajną usługę o nazwie AWS Parameter Store. Pozwala ona na przechowanie i szyfrowanie takich „tajnych” danych. Możemy przechowywać w nim ciągi znaków i je szyfrować. Jestem właśnie w środku projektu więc pokaże jak wykorzystać AWS Parameter Store i NET.Core. Bez zbędnej teorii. Krótko i na temat.

Przygotowania

1. Dodajemy paczkę Amazon.SimpleSystemsManagement.
2. Potrzebujemy klienta AmazonSimpleSystemsManagementClient. Tworzymy jego instancję, i uwierzytelniamy się. Na przykład tak:

 private static AmazonSimpleSystemsManagementClient getClient()
 {
     var client = new AmazonSimpleSystemsManagementClient(".accessKeyId.", ".secretAccessKey.", Amazon.RegionEndpoint.EUCentral1);
     return client;
 }

3. Tworzymy request. Dla zapisu parametru na przykład tak:

private static PutParameterRequest putRequest(string parameterName, string parameterValue, bool withEncryption)
{
    var request = new PutParameterRequest();
    request.Name = parameterName;
    request.Value = parameterValue;
    request.Overwrite = true;
    request.Type = withEncryption ? ParameterType.SecureString : ParameterType.String;
    return request;
}

a dla odczytu tak:

private static GetParameterRequest getRequest(string parameterName, bool withDecryption)
{
    var request = new GetParameterRequest();
    request.Name = parameterName;
    request.WithDecryption = withDecryption;
    return request;
}

Działamy

Aby zapisać parametr wowołujemy

var response = await client.PutParameterAsync(request);

dla odczytu natomiast:

var result = await client.GetParameterAsync(request);

Ja w praktyce mam w projektach prywatną metodę do odczytu danych

private static async Task<string> getParameter(string parameterName, bool encrypted)
{
    var client = getClient();
    var result = await client.GetParameterAsync(getRequest(parameterName, encrypted));
    return result.Parameter.Value.ToString();
}

i dodatkowe metody do pobierania konkretnych danych. Aby pobrać na przykład hasło do bazy danych przygotowuję coś takiego

public static async Task<string> GetDatabaseUser()
{
    return await getParameter("DATABASE-PASSWORD", true);
}

Kod przykładowej klasy pozwalającej na korzystanie z opisanych dorodziejstw możecie pobrać z GitHuba. Zapraszam do korzystania.

Konsola

Nasze hasła możemy także zapisać używając konsoli AWS. Wchodzimy do ulubionej przez wszystkich usługi EC2 i po lewej stronie mamy naszego bohatera.

Parameter store menu

Dla przykładu zapiszemy sobie jakąś wartość

Po zapisie wpis zostaje dodany do „sejfu” i widać go na liście

Żeby było jeszcze fajniej, AWS trzyma dla nasz wszystkie zmiany wartości danego parametrum. Widzimy historię wartości i kto lub co jest odpowiedzialne za zmiany.

I

Warto korzystać z oferowanej przez AWS usługi. Nie tylko dla sekretnych danych. Zamiast kodować na sztywno różne wartości, możemy je umieścić w Parameter Store. Łatwo można je edytować. Zarówno za pomocą konsoli, SDK jak i CLI. Polecam.

Comments are closed.