Dane wrażliwe w Terraform 0.15

Mam wrażenie, że rozwój narzędzi związanych z DevOps i DevNet znacznie w 2020 roku przyspieszył. Z jednej strony to dobrze, bo związane jest to z ich intensywnym rozwojem i dopasowywaniem do potrzeb klientów i rynku. Z drugiej dla wielu form oznacza to niekończący się proces migracji do nowej wersji. Jedna z firm, z którą współpracuję dopiero co zakończyła migrację do wersji 0.12 Terraforma, a planuje już migrację do 0.14. Tymczasem niedawno została już kolejna wersja. Dane wrażliwe w Terraform 0.15 podlegają szczególnej ochronie dzięki co raz bardziej rozbudowanym mechanizmom ich ochrony. Przyjrzyjmy się ich działaniu. Spójrzmy także na modyfikacjw, które musimy wprowadzić do kodu naszych skryptów, aby poprawnie działały one w nowej wersji Terraforma.

Hasła i klucze w Terraform 0.15

W zeszłym roku developerzy wielu projektów skupili się na funkcjonalnościach związanych z ochroną haseł, kluczy API, kodów i innych danych wrażliwych, których ujawnienie mogłoby mieć katastrofalne skutki. Jednym z tych elementów jest niewątpliwie wbudowanie mechanizmów, które zapobiegają wyświetleniu ich na konsoli terminala lub w logach. Ansible w ostatnich miesiącach bardzo intensywnie rozbudowywało domyślne działanie parametru no_log, nie inaczej było w przypadku Terraforma.

W wersji 0.14 dostaliśmy możliwość oznaczenia dowolnej zmiennej jako sensitive:

				
					variable "zmienna" {
  type      = string
  sensitive = true
}
				
			

Dane wrażliwe w Terraform 0.15 są chronione przez kolejne mechanizmy. W ramach tej funkcji Terraform 0.14 i nowsze wymaga oznaczenia wartości wyjściowej jako wrażliwej, jeśli jej definicja zawiera same wartości wrażliwe. Terraform 0.15 rozszerza ten mechanizm, aby działał również dla wartości pochodzących z atrybutów zasobów, które provider zadeklarował jako wrażliwe. W rezultacie po aktualizacji do Terraform 0.15 może się okazać, że Terraform zgłasza teraz niektóre wartości wyjściowe jako nieprawidłowe, jeśli pochodzą one z wrażliwych atrybutów bez oznaczania ich jako wrażliwe. 

				
					╷
│ Error: Output refers to sensitive values
│ 
│   on sensitive-resource-attr.tf line 152:
│    152: output "ssl_klucz" {
│ 
│ Expressions used in outputs can only refer to sensitive values if the
│ sensitive attribute is true.
				
			

Przywrócenie prawidłowego działania skryptu wymagać będzie jego aktualizacji i odpowiedniego oznaczenia w nim zmiennych. Zmiany takie wprowadzamy samodzielnie lub korzystając z polecenia terraform 0.15upgrade.

				
					output "ssl_klucz" {
  value     = tls_private_key.zmienna.private_key_pem
  sensitive = true
}
				
			

Pamiętajmy jednak, że wartość jest ukryta tylko w głównym interfejsie użytkownika. Wrażliwa wartość będzie nadal rejestrowana w pliku stanu i możemy ją pobrać za pomocą poleceń takich jak terraform output -json lub terraform output -raw.

Jest jeszcze jedna opcja – zawsze możemy użyć funkcji nonsensitive(), aby wyłączyć automatyczne wykrywanie i ukrywanie wrażliwych danych przez Terraform.

				
					output "ssl_klucz" {
  value     = nonsensitive(tls_private_key.zmienna.private_key_pem)
}
				
			

E-BOOK

Zaczynasz swój pierwszy projekt związany z automatyzacją?

Ten e-book jest dla Ciebie! Zawiera sprawdzone podejście, które realizowałem w wielu projektach. Sprawdź co możesz zrobić, by odnieść sukces!


Subscribe
Powiadom o
guest

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

0 komentarzy
Inline Feedbacks
View all comments

ZdradziĆ Ci sekretY udanego projektu automatyzacji?

(link otwiera się w nowym oknie)