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.

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.