Verwalten von Geheimnissen in Azure Container Apps
Artikel
Mithilfe von Azure Container Apps kann Ihre Anwendung vertrauliche Konfigurationswerte sicher speichern. Wenn die geheimen Schlüssel auf Anwendungsebene definiert werden, stehen gesicherte Werte für Revisionen in Ihren Container-Apps zur Verfügung. Darüber hinaus können Sie auf gesicherte Werte innerhalb von Skalierungsregeln verweisen. Informationen zur Verwendung von Geheimnissen mit Dapr finden Sie unter Dapr-Integration.
Geheimnisse sind einer Anwendung zugeordnet, unabhängig von spezifischen Revisionen einer Anwendung.
Das Hinzufügen, Entfernen oder Ändern von Geheimnissen generiert keine neuen Revisionen.
Jede Anwendungsrevision kann auf mindestens ein Geheimnis verweisen.
Mehrere Revisionen können auf dieselben Geheimnisse verweisen.
Ein aktualisiertes oder gelöschtes Geheimnis wirkt sich nicht automatisch auf vorhandene Revisionen in Ihrer App aus. Wenn ein Geheimnis aktualisiert oder gelöscht wird, haben Sie zwei Möglichkeiten, auf die Änderungen zu reagieren:
Eine neue Revision bereitstellen.
Eine bestehende Revision neu starten.
Stellen Sie vor dem Löschen eines Geheimnisses eine neue Revision bereit, die nicht mehr auf das alte Geheimnis verweist. Deaktivieren Sie dann alle Revisionen, die auf das Geheimnis verweisen.
Definieren von Geheimnissen
Geheime Schlüssel werden als eine Reihe von Name-Wert-Paaren definiert. Der Wert jedes geheimen Schlüssels wird direkt oder als Verweis auf einen geheimen Schlüssel angegeben, der in Azure Key Vault gespeichert ist.
Geheimen Wert in Container-Apps speichern
Wenn Sie geheime Schlüssel über das Portal oder über verschiedene Befehlszeilenoptionen definieren.
Hier wird eine Verbindungszeichenfolge für ein Warteschlangenspeicherkonto im secrets-Array deklariert. In diesem Beispiel würden Sie <MY-CONNECTION-STRING-VALUE> durch den Wert Ihrer Verbindungszeichenfolge ersetzen.
Wenn Sie eine Container-App erstellen, werden Geheimnisse mithilfe des Parameters --secrets definiert.
Der Parameter akzeptiert einen durch Leerzeichen getrennten Satz von Name/Wert-Paaren.
Jedes Paar wird durch ein Gleichheitszeichen (=) getrennt.
Hier wird eine Verbindungszeichenfolge für ein Warteschlangenspeicherkonto im --secrets-Parameter deklariert. Ersetzen Sie <CONNECTION_STRING> durch den Wert Ihrer Verbindungszeichenfolge.
Wenn Sie eine Container-App erstellen, werden Geheimnisse als mindestens ein Geheimnisobjekt definiert, das über den ConfigurationSecrets-Parameter übergeben wird.
Hier wird eine Verbindungszeichenfolge zu einem Warteschlangenspeicherkonto deklariert. Der Wert für queue-connection-string stammt aus einer Umgebungsvariablen namens $QueueConnectionString.
Verweisen auf geheime Schlüssel aus Key Vault
Wenn Sie einen geheimen Schlüssel definieren, erstellen Sie einen Verweis auf einen geheimen Schlüssel, der in Azure Key Vault gespeichert ist. Container-Apps rufen automatisch den geheimen Wert aus Key Vault ab und stellt ihn in Ihrer Container-App als geheimen Schlüssel zur Verfügung.
Um auf einen geheimen Schlüssel von Key Vault zu verweisen, müssen Sie zuerst die verwaltete Identität in Ihrer Container-App aktivieren und den Identitätszugriff auf die Schlüsseltresorschlüssel gewähren.
Wenn Sie Zugriff auf Key Vault-Geheimnisse gewähren möchten, erstellen Sie eine Zugriffsrichtlinie in Key Vault für die von Ihnen erstellte verwaltete Identität. Aktivieren Sie die „Get“-Geheimnisberechtigung für diese Richtlinie.
Hier wird eine Verbindungszeichenfolge für ein Warteschlangenspeicherkonto im secrets-Array deklariert. Der Wert wird automatisch unter Verwendung der angegebenen Identität aus Key Vault abgerufen. Wenn Sie eine benutzerseitig verwaltete Identität verwenden möchten, ersetzen Sie system durch die Ressourcen-ID der Identität.
Ersetzen Sie <KEY-VAULT-SECRET-URI> durch den URI Ihres Geheimnisses in Key Vault.
Wenn Sie eine Container-App erstellen, werden Geheimnisse mithilfe des Parameters --secrets definiert.
Der Parameter akzeptiert einen durch Leerzeichen getrennten Satz von Name/Wert-Paaren.
Jedes Paar wird durch ein Gleichheitszeichen (=) getrennt.
Verwenden Sie zum Angeben eines Key Vault-Verweises das Format <SECRET_NAME>=keyvaultref:<KEY_VAULT_SECRET_URI>,identityref:<MANAGED_IDENTITY_ID>. Beispiel: queue-connection-string=keyvaultref:https://mykeyvault.vault.azure.net/secrets/queuereader,identityref:/subscriptions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0/resourcegroups/my-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/my-identity.
Hier wird eine Verbindungszeichenfolge für ein Warteschlangenspeicherkonto im --secrets-Parameter deklariert. Ersetzen Sie <KEY_VAULT_SECRET_URI> durch den URI Ihres Geheimnisses in Key Vault. Ersetzen Sie <USER_ASSIGNED_IDENTITY_ID> durch die Ressourcen-ID der benutzerseitig zugewiesenen Identität. Verwenden Sie für eine systemseitig zugewiesene Identität system anstelle der Ressourcen-ID.
Hinweis
Die benutzerseitig zugewiesene Identität muss Zugriff auf das Geheimnis in Key Vault haben. Die systemseitig zugewiesene Identität kann nicht mit dem Befehl „create“ verwendet werden, da sie erst verfügbar ist, nachdem die Container-App erstellt wurde.
In PowerShell werden keine Verweise auf Geheimnisse in Key Vault unterstützt.
Hinweis
Bei Verwendung von UDRs mit Azure Firewall müssen das Diensttag AzureKeyVault und der vollqualifizierte Domänenname login.microsoft.com der Zulassungsliste für Ihre Firewall hinzugefügt werden. Informationen zu den zusätzlich benötigten Diensttags finden Sie unter Konfigurieren von UDR mit Azure Firewall – Vorschau:.
Key Vault-Geheimnis-URI und Geheimnisrotation
Der Key Vault-Geheimnis-URI muss in einem der folgenden Formate vorliegen:
https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931: Verweis auf eine bestimmte Version eines Geheimnisses
https://myvault.vault.azure.net/secrets/mysecret: Verweis auf die neueste Version eines Geheimnisses
Wenn im URI keine Version angegeben ist, verwendet die App die neueste Version, die im Schlüsseltresor vorhanden ist. Wenn neuere Versionen verfügbar werden, ruft die App innerhalb von 30 Minuten automatisch die neueste Version ab. Alle aktiven Revisionen, die in einer Umgebungsvariablen auf das Geheimnis verweisen, werden automatisch neu gestartet, um den neuen Wert zu erfassen.
Geben Sie im URI die Version an, um die vollständige Kontrolle darüber zu haben, welche Version eines Geheimnisses verwendet wird.
Verweisen auf Geheimnisse in Umgebungsvariablen
Nachdem Sie Geheimnisse auf Anwendungsebene deklariert haben, wie im Abschnitt Definieren von Geheimnissen beschrieben, können Sie auf sie in Umgebungsvariablen verweisen, wenn Sie eine neue Revision in Ihrer Container-App erstellen. Wenn eine Umgebungsvariable auf ein Geheimnis verweist, wird ihr Wert mit dem Wert aufgefüllt, der im Geheimnis definiert ist.
Beispiel
Das folgende Beispiel zeigt eine Anwendung, die eine Verbindungszeichenfolge auf Anwendungsebene deklariert. Auf diese Verbindung wird in einer Containerumgebungsvariable und in einer Skalierungsregel verwiesen.
Nach dem Definieren eines Geheimnisses in Ihrer Container-App können Sie in einer Umgebungsvariablen darauf verweisen, wenn Sie eine neue Revision erstellen.
Navigieren Sie im Azure-Portal zu Ihrer Container-App.
Öffnen Sie die Seite Revisionsverwaltung.
Wählen Sie Create new revision (Neue Revision erstellen) aus.
Wählen Sie auf der Seite Erstellen und Bereitstellen einer neuen Revision einen Container aus.
Wählen Sie im Abschnitt Umgebungsvariablen die Option Hinzufügen aus.
Geben Sie die folgenden Informationen ein:
Name: Der Name der Umgebungsvariablen.
Quelle: Wählen Sie Auf ein Geheimnis verweisen aus.
Wert: Wählen Sie das Geheimnis aus, auf das Sie verweisen möchten.
Wählen Sie Speichern.
Wählen Sie Erstellen aus, um die neue Revision zu erstellen.
In diesem Beispiel wird die Anwendungsverbindungszeichenfolge als queue-connection-string deklariert und wird an anderer Stelle in den Konfigurationsabschnitten verfügbar.
Hier ruft die Umgebungsvariable mit dem Namen connection-string ihren Wert aus dem Geheimnis auf Anwendungsebene queue-connection-string ab. Darüber hinaus verwendet die Authentifizierungskonfiguration der Azure Queue Storage-Skalierungsregel das Geheimnis queue-connection-string, um ihre Verbindung zu definieren.
Um das Committen von Geheimniswerten in die Quellcodeverwaltung mit Ihrer ARM-Vorlage zu vermeiden, übergeben Sie Geheimniswerte als ARM-Vorlagenparameter.
In diesem Beispiel erstellen Sie mithilfe der Azure CLI eine Container-App mit einem Geheimnis, auf das in einer Umgebungsvariablen verwiesen wird. Um in der Azure CLI auf ein Geheimnis in einer Umgebungsvariablen zu verweisen, legen Sie deren Wert auf secretref: fest, gefolgt vom Namen des Geheimnisses.
Hier ruft die Umgebungsvariable mit dem Namen connection-string ihren Wert aus dem Geheimnis auf Anwendungsebene queue-connection-string ab.
In diesem Beispiel erstellen Sie mithilfe der Azure PowerShell einen Container mit einem Geheimnis, auf das in einer Umgebungsvariablen verwiesen wird. Um in PowerShell in einer Umgebungsvariablen auf das Geheimnis zu verweisen, legen Sie deren Wert auf secretref: fest, gefolgt vom Namen des Geheimnisses.
Hier ruft die Umgebungsvariable mit dem Namen ConnectionString ihren Wert aus dem Geheimnis auf Anwendungsebene $QueueConnectionString ab.
Einbinden von Geheimnissen in einem Volume
Nachdem Sie Geheimnisse auf Anwendungsebene deklariert haben, wie im Abschnitt Definieren von Geheimnissen beschrieben, können Sie in Volumebereitstellungen auf sie verweisen, wenn Sie eine neue Revision in Ihrer Container-App erstellen. Wenn Sie Geheimnisse in einem Volume einbinden, wird das Geheimnis jeweils als Datei im Volume eingebunden. Der Dateiname ist der Name des Geheimnisses. Beim Dateiinhalt handelt es sich um den Wert des Geheimnisses. Sie können alle Geheimnisse in einer Volumebereitstellung laden oder nur bestimmte Geheimnisse laden.
Nach dem Definieren eines Geheimnisses in Ihrer Container-App können Sie in einer Volumebereitstellung darauf verweisen, wenn Sie eine neue Revision erstellen.
Navigieren Sie im Azure-Portal zu Ihrer Container-App.
Öffnen Sie die Seite Revisionsverwaltung.
Wählen Sie Create new revision (Neue Revision erstellen) aus.
Wählen Sie auf der Seite Erstellen und Bereitstellen einer neuen Revision
einen Container und anschließend die Option Bearbeiten aus.
Erweitern Sie im Abschnitt Volumebereitstellungen den Abschnitt Geheimnisse.
Wählen Sie Neues Volume erstellen aus.
Geben Sie die folgenden Informationen ein:
Name: mysecrets
Alle Geheimnisse einbinden: Aktiviert
Hinweis
Wenn Sie nur bestimmte Geheimnisse laden möchten, deaktivieren Sie Alle Geheimnisse einbinden, und wählen Sie die Geheimnisse aus, die Sie laden möchten.
Wählen Sie Hinzufügen.
Wählen Sie unter Volumename die Option mysecrets aus.
Geben Sie unter Bereitstellungspfad den Pfad /mnt/secrets ein.
Wählen Sie Speichern.
Wählen Sie Erstellen aus, um die neue Revision mit der Volumebereitstellung zu erstellen.
In diesem Beispiel werden zwei Geheimnisse auf Anwendungsebene deklariert. Diese Geheimnisse werden in einem Volume vom Typ Secret mit dem Namen mysecrets eingebunden. Das Volume wird am Pfad /mnt/secrets eingebunden. Die Anwendung kann dann auf die Geheimnisse in der Volumebereitstellung verweisen.
Wenn Sie nur bestimmte Geheimnisse laden und deren Pfade innerhalb des eingebundenen Volumes angeben möchten, definieren Sie die Geheimnisse im Array secrets des Volumeobjekts. Im folgenden Beispiel wird gezeigt, wie nur das Geheimnis queue-connection-string in der Volumebereitstellung mysecrets mit dem Dateinamen connection-string.txt geladen wird.
In Ihrer App können Sie das Geheimnis aus einer Datei unter /mnt/secrets/connection-string.txt lesen.
In diesem Beispiel werden zwei Geheimnisse auf Anwendungsebene deklariert. Diese Geheimnisse werden in einem Volume vom Typ Secret mit dem Namen mysecrets eingebunden. Das Volume wird am Pfad /mnt/secrets eingebunden. Die Anwendung kann dann die Geheimnisse in der Volumebereitstellung lesen.
Wenn Sie nur bestimmte Geheimnisse laden und deren Pfade innerhalb des eingebundenen Volumes angeben möchten, definieren Sie Ihre App mithilfe von YAML.
Das Einbinden von Geheimnissen als Volume wird in PowerShell nicht unterstützt.