KI für DevOps-Engineers – Teil 1: Die Grundlagen von DevOps-KI
DevOps ist ein entscheidender Erfolgsfaktor in der Softwareentwicklung, und wir sind definitiv alle auf die eine oder andere Weise auf KI gestoßen. Eine
Der Problembereich der Verteilung von Secrets ist weit verbreitet. Sie haben eine sensible Information, möchten sie an einen Dienst verteilen und diese Aktion auf sichere Weise umsetzen. Diese sensible Information kann ein Passwort, ein API-Schlüssel, ein TLS-Zertifikat oder alles andere sein, was Sie geheim halten möchten.
Ein häufiges Problem bei der Verteilung von Secrets ist auch die Notwendigkeit, diese Daten rotieren zu lassen. Dies ist eine bewährte Sicherheitsmethode und wird häufig von Compliance-Standards gefordert. Das Rotieren von Secrets kann ein komplexer Prozess sein, insbesondere wenn Sie es über mehrere Dienste hinweg durchführen müssen.
Sie sind sich vielleicht auch des Problems bewusst, dass verteilte Secrets schwer zu verwalten sein können. Möglicherweise haben Sie diese sensiblen Informationen an mehreren Orten gespeichert, und es kann schwierig sein, den Überblick darüber zu behalten, wo sie sich befinden und wer Zugriff darauf hat.
HashiCorp Vault ist ein Verwaltungstool für sensitive Informationen, das Ihnen bei der Lösung dieser Probleme helfen kann. Vault kann Informationen speichern, an Dienste verteilen und rotieren. Es kann Ihnen auch dabei helfen, den Zugriff auf Secrets zu verwalten, sodass Sie steuern können, wer Zugriff auf was hat.
Sie können Terraform HCP oder Terraform Enterprise so konfigurieren, dass sie sich bei HashiCorp Vault authentifizieren, um notwendige Secrets ohne Duplizierung von Daten abzurufen. Auf diese Weise können Sie Ihre Secrets an einem zentralen Ort speichern und sie auf sichere Weise von Ihren Diensten abrufen.
HashiCorp bietet mehrere Setups zur Authentifizierung von Clients, z. AppRole als Authentifizierung, wenn Ihnen keine anderen Anmeldedaten zur Verfügung stehen. Terraform Enterprise, aber auch Terraform HCP können sich mithilfe der JWT-Authentifizierungsmethode bei HashiCorp Vault authentifizieren. Mit dieser Methode können Sie sich bei Vault mithilfe eines signierten JWT-Tokens authentifizieren.
1resource "vault_jwt_auth_backend" "tfc_jwt_vault" {
2 description = "Hashicorp tfc auth backend"
3 path = "tfc_jwt_vault"
4 oidc_discovery_url = "https://app.terraform.io"
5 bound_issuer = "https://app.terraform.io"
6 default_role = "tfc_vault_config"
7}
Zunächst müssen Sie ein JWT-Authentifizierungs-Backend und eine Rolle definieren. Die Rolle definiert die Richtlinien und Ansprüche, die für die Authentifizierung gegenüber Vault erforderlich sind. Die Rolle ist an das JWT-Authentifizierungs-Backend gebunden.
1resource "vault_jwt_auth_backend_role" "tfc_vault_config" {
2
3 backend = "tfc_vault_config"
4
5 role_name = "tfc_jwt_all_projects"
6 token_policies = [ "tfc_all_projects" ]
7 user_claim = "terraform_full_workspace"
8 role_type = "jwt"
9 bound_audiences = ["vault.workload.identity"]
10 bound_claims_type = "glob"
11 token_ttl = 20 * 60
12
13 bound_claims = {
14 sub = "organization:MyOrganization:project:*:workspace:*:run_phase:*"
15 }
16}
Durch die Definition der Rolle können Sie die Richtlinien und Ansprüche angeben, die für die Authentifizierung gegenüber Vault erforderlich sind. Das Attribut bound_claims
gibt die Ansprüche an, die für die Authentifizierung gegenüber Vault erforderlich sind. In diesem Beispiel muss der sub
-claim also mit dem angegebenen Wert übereinstimmen, sonst schlägt die Authentifizierung fehl. In diesem Beispiel kann diese Rolle über alle Projekte in der Organisation MyOrganization
für alle Arbeitsbereiche und Ausführungsphasen verwendet werden.
1resource "vault_jwt_auth_backend_role" "tfc_jwt_my_project" {
2
3 backend = "tfc_jwt_vault"
4
5 role_name = "tfc_jwt_my_project"
6 token_policies = [ "tfc_all_projects" ]
7 user_claim = "terraform_full_workspace"
8 role_type = "jwt"
9 bound_audiences = ["vault.workload.identity"]
10 bound_claims_type = "glob"
11 token_ttl = 20 * 60
12
13 bound_claims = {
14 sub = "organization:MyOrganization:project:MyProject:workspace:*:run_phase:*"
15 }
16}
Wenn Sie den Zugriff auf ein bestimmtes Projekt einschränken müssen, können Sie eine Rolle für dieses Projekt definieren. In diesem Beispiel kann die Rolle tfc_jwt_my_project
nur für das Projekt MyProject
in der Organisation MyOrganization
verwendet werden, aber alle Arbeitsbereiche und Ausführungsphasen innerhalb dieses Projekts.
Wenn Sie eine Authentifizierung gegenüber HashiCorp Vault in Kombination mit der AppRole-Authentifizierung definieren müssen, müssen Sie eine Lösung finden, um die SecretID anzufordern und diese Informationen an den Client weiterzugeben. Wenn Sie die JWT-basierte Authentifizierung verwenden, müssen Sie lediglich das Vault-JWT-Authentifizierungs-Backend und die Rolle in Ihrer Terraform-Konfiguration definieren. Den Rest erledigt Terraform Cloud.
1variable "tfc_vault_dynamic_credentials" {
2 description = "Object containing Vault dynamic credentials configuration"
3 type = object({
4 default = object({
5 token_filename = string
6 address = string
7 namespace = string
8 ca_cert_file = string
9 })
10 aliases = map(object({
11 token_filename = string
12 address = string
13 namespace = string
14 ca_cert_file = string
15 }))
16 })
17}
18
19provider "vault" {
20 // skip_child_token must be explicitly set to true as TFC manages the token lifecycle
21 skip_child_token = true
22 address = var.tfc_vault_dynamic_credentials.default.address
23 namespace = var.tfc_vault_dynamic_credentials.default.namespace
24
25 auth_login_token_file {
26 filename = var.tfc_vault_dynamic_credentials.default.token_filename
27 }
28}
Dieser Block definiert den Vault-Provider in Terraform. Das Attribut skip_child_token
muss auf true
gesetzt sein, da Terraform HCP den Token-Lebenszyklus verwaltet. Die Attribute address
und namespace
werden auf die Werte aus der Variablen tfc_vault_dynamic_credentials
gesetzt. Der Block auth_login_token_file
gibt die Tokendatei an, die zur Authentifizierung bei Vault verwendet wird. Diese Token-Datei wird von Terraform HCP verwaltet. Bei jedem Lauf authentifiziert sich Terraform HCP mithilfe des JWT-Tokens bei Vault und ruft die für den Lauf erforderlichen Geheimnisse ab.
Schließlich müssen Sie die folgenden Umgebungsvariablen in Ihrer Terraform-Konfiguration definieren – dies kann in den Workspace-Einstellungen in Terraform HCP mithilfe von Variable-Set
erfolgen: TFC_VAULT_ADDR
, TFC_VAULT_AUTH_PATH
, TFC_VAULT_NAMESPACE
, TFC_VAULT_PROVIDER_AUTH
. Die letzte Variable ist ein boolsches Flag, das auf true
gesetzt werden muss, um den Vault-Provider in Terraform entsprechend zu aktivieren. Alle anderen Variablen werden durch die vorherige Terraform-Konfiguration definiert/erstellt.
Viel Spaß beim Ausprobieren!
Sie interessieren sich für unsere Trainings oder haben einfach eine Frage, die beantwortet werden muss? Sie können uns jederzeit kontaktieren! Wir werden unser Bestes tun, um alle Ihre Fragen zu beantworten.
Hier kontaktieren