Skip to content
malak.cloud
  • Contact
  • Przemek Malak
  • Search Icon

malak.cloud

Cloud-native in everyday life

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.
Hi. My name is Przemek Malak. Thanks for visiting. I hope you found what I write about interesting.
If you'd like to chat with me, the easiest way is through LinkedIn.

Losowe wpisy

  • AWS Step Functions API Endpoints

    3 lutego 2024
  • AWS Lambda – Golang – Custom Runtime

    22 maja 2022
  • FaaS w chmurze IBM

    29 stycznia 2019
  • IAM Access Analyzer

    18 września 2022
  • Czyścimy Dockera

    12 sierpnia 2017
  • Apps
  • AWS
  • CloudNative
  • Cookbook
  • Data
  • DEV
  • EN
  • GCP
  • IoT
  • Istio
  • k8s
  • Security
  • Social
  • GitHub
  • LinkedIn
© 2025   All Rights Reserved.
Ta strona korzysta z ciasteczek aby świadczyć usługi na najwyższym poziomie. Dalsze korzystanie ze strony oznacza, że zgadzasz się na ich użycie.Zgoda