Einbinden eines geheimen Volumes in Azure Container Instances

Verwenden Sie ein geheimes Volume, um für die Container in einer Containergruppe vertrauliche Informationen bereitzustellen. Das geheime Volume speichert Ihre Geheimnisse in Dateien im Volume, auf die die Container in der Containergruppe zugreifen können. Mit dem Speichern von Geheimnissen in einem geheimen Volume können Sie vermeiden, vertrauliche Daten wie SSH-Schlüssel oder Datenbankanmeldeinformationen dem Anwendungscode hinzuzufügen.

  • Nach der Bereitstellung mit Geheimnissen in einer Containergruppe ist ein geheimes Volume schreibgeschützt.
  • Alle geheimen Volumes werden durch tmpfs, ein auf RAM basierendes Dateisystem, gesichert. Ihre Inhalte werden nie in permanenten Speicher geschrieben.

Hinweis

Geheime Volumes sind momentan auf Linux-Container beschränkt. Unter Festlegen von Umgebungsvariablen erfahren Sie, wie Sie sichere Umgebungsvariablen für Windows- und Linux-Container übergeben. Bis alle Features auch für Windows-Container verfügbar sind, finden Sie die aktuellen Plattformunterschiede in der Übersicht.

Einbinden eines geheimen Volumes – Azure CLI

Um einen Container mit einem oder mehreren Geheimnissen mit der Azure-Befehlszeilenschnittstelle bereitzustellen, verwenden Sie den Befehl az container create mit den Parametern --secrets und --secrets-mount-path. Dieses Beispiel bindet ein aus zwei Dateien, die die Geheimnisse „mysecret1“ und „mysecret2“ enthalten, bestehendes geheimes Volume unter /mnt/secrets ein:

az container create \
    --resource-group myResourceGroup \
    --name secret-volume-demo \
    --image mcr.microsoft.com/azuredocs/aci-helloworld \
    --secrets mysecret1="My first secret FOO" mysecret2="My second secret BAR" \
    --secrets-mount-path /mnt/secrets

Die folgende Ausgabe von az container exec zeigt das Öffnen einer Shell im ausgeführten Container, das Auflisten der Dateien im geheimen Volume und dann das Anzeigen ihrer Inhalte:

az container exec \
  --resource-group myResourceGroup \
  --name secret-volume-demo --exec-command "/bin/sh"
/usr/src/app # ls /mnt/secrets
mysecret1
mysecret2
/usr/src/app # cat /mnt/secrets/mysecret1
My first secret FOO
/usr/src/app # cat /mnt/secrets/mysecret2
My second secret BAR
/usr/src/app # exit
Bye.

Einbinden eines geheimen Volumes – YAML

Sie können auch Gruppen von Containern mit der Azure CLI und einer YAML-Vorlage bereitstellen. Die Bereitstellung der YAML-Vorlage ist die bevorzugte Methode bei der Bereitstellung von Containergruppen, die aus mehreren Containern bestehen.

Wenn Sie mit einer YAML-Vorlage bereitstellen, müssen die geheimen Werte in der Vorlage Base64-codiert sein. Allerdings werden die geheimen Werte in den Dateien im Container in Nur-Text-Form angezeigt.

Die folgende YAML-Vorlage definiert eine Containergruppe mit einem Container, der ein geheimes Volume unter /mnt/secrets einbindet. Das geheime Volume verfügt über zwei Dateien, die die Geheimnisse „mysecret1“ und „mysecret2“ enthalten.

apiVersion: '2019-12-01'
location: eastus
name: secret-volume-demo
properties:
  containers:
  - name: aci-tutorial-app
    properties:
      environmentVariables: []
      image: mcr.microsoft.com/azuredocs/aci-helloworld:latest
      ports: []
      resources:
        requests:
          cpu: 1.0
          memoryInGB: 1.5
      volumeMounts:
      - mountPath: /mnt/secrets
        name: secretvolume1
  osType: Linux
  restartPolicy: Always
  volumes:
  - name: secretvolume1
    secret:
      mysecret1: TXkgZmlyc3Qgc2VjcmV0IEZPTwo=
      mysecret2: TXkgc2Vjb25kIHNlY3JldCBCQVIK
tags: {}
type: Microsoft.ContainerInstance/containerGroups

Um mit der YAML-Vorlage bereitzustellen, speichern Sie den vorherigen YAML-Code in einer Datei namens deploy-aci.yaml und führen dann den Befehl az container create mit dem Parameter --file aus:

# Deploy with YAML template
az container create \
  --resource-group myResourceGroup \
  --file deploy-aci.yaml

Einbinden eines geheimen Volumes – Resource Manager

Zusätzlich zur CLI- und YAML-Bereitstellung können Sie eine Containergruppe mit einer Azure Resource Manager-Vorlage bereitstellen.

Füllen Sie in der Vorlage zunächst das volumes-Array im Abschnitt properties für die Containergruppe auf. Wenn Sie mit einer Resource Manager-Vorlage bereitstellen, müssen die geheimen Werte in der Vorlage Base64-codiert sein. Allerdings werden die geheimen Werte in den Dateien im Container in Nur-Text-Form angezeigt.

Füllen Sie als Nächstes für jeden Container in der Containergruppe, in die Sie das geheime Volume einbinden möchten, das Array volumeMounts im Abschnitt properties der Containerdefinition auf.

Die folgende Resource Manager-Vorlage definiert eine Containergruppe mit einem Container, der ein geheimes Volume unter /mnt/secrets einbindet. Das geheime Volume verfügt über zwei Geheimnisse, „mysecret1“ und „mysecret2“.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "variables": {
    "container1name": "aci-tutorial-app",
    "container1image": "microsoft/aci-helloworld:latest"
  },
  "resources": [
    {
      "type": "Microsoft.ContainerInstance/containerGroups",
      "apiVersion": "2021-03-01",
      "name": "secret-volume-demo",
      "location": "[resourceGroup().location]",
      "properties": {
        "containers": [
          {
            "name": "[variables('container1name')]",
            "properties": {
              "image": "[variables('container1image')]",
              "resources": {
                "requests": {
                  "cpu": 1,
                  "memoryInGb": 1.5
                }
              },
              "ports": [
                {
                  "port": 80
                }
              ],
              "volumeMounts": [
                {
                  "name": "secretvolume1",
                  "mountPath": "/mnt/secrets"
                }
              ]
            }
          }
        ],
        "osType": "Linux",
        "ipAddress": {
          "type": "Public",
          "ports": [
            {
              "protocol": "tcp",
              "port": "80"
            }
          ]
        },
        "volumes": [
          {
            "name": "secretvolume1",
            "secret": {
              "mysecret1": "TXkgZmlyc3Qgc2VjcmV0IEZPTwo=",
              "mysecret2": "TXkgc2Vjb25kIHNlY3JldCBCQVIK"
            }
          }
        ]
      }
    }
  ]
}

Um mit der Resource Manager-Vorlage bereitzustellen, speichern Sie den vorherigen JSON-Code in einer Datei namens deploy-aci.json, und führen Sie dann den Befehl az deployment group create mit dem Parameter --template-file aus:

# Deploy with Resource Manager template
az deployment group create \
  --resource-group myResourceGroup \
  --template-file deploy-aci.json

Nächste Schritte

Volumes

Erfahren Sie, wie andere Volumetypen in Azure Container Instances bereitgestellt werden:

Sichere Umgebungsvariablen

Eine andere Methode zum Bereitstellen von vertraulichen Informationen für Container (einschließlich Windows-Containern) ist die Verwendung von sicheren Umgebungsvariablen.