Skip to content
malak.cloud
  • Kontakt
  • O mnie
  • Search Icon

malak.cloud

Cloud Native na co dzień

AWS Parameter Store i NET.Core

AWS Parameter Store i NET.Core

1 marca 2018

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.


AWS, Security
AWS, Dev, serverless

Post navigation

PREVIOUS
Zombie apokalipsa w Łodzi
NEXT
Programujemy AWS – Step Functions. Jak prosto połączyć usługi serverless w jedną całość.
Comments are closed.
Cześć. Nazywam się Przemek Malak. Dzięki za wizytę. Mam nadzieję, że to o czym piszę Cię zainteresowało. Jeżeli chcesz ze mną pogadać, najłatwiej będzie przez LinkedIn.

Losowe wpisy

  • CI/CD za pomocą AWS Copilot

    2 grudnia 2021
  • Serverless API – Jak postawić API bez serwera

    13 sierpnia 2017
  • Lambda context

    19 grudnia 2017
  • AWS Lambda – nowy edytor

    1 grudnia 2017
  • AWS IoT ExpressLink

    22 sierpnia 2022
  • Apps
  • AWS
  • CloudNative
  • Cookbook
  • Data
  • DEV
  • GCP
  • IoT
  • Istio
  • k8s
  • Security
  • Social
  • GitHub
  • LinkedIn
© 2023   All Rights Reserved.