Mount a secret volume in Azure Container Instances (Montare un volume segreto in Istanze di Azure Container)

Usare un volume segreto per fornire informazioni sensibili ai contenitori di un gruppo di contenitori. Il volume segreto archivia i segreti nei file all'interno del volume a cui i contenitori del gruppo di contenitori possono accedere. Archiviando segreti in un volume segreto è possibile evitare di aggiungere dati sensibili, quali chiavi SSH o credenziali del database, al codice dell'applicazione.

  • Dopo la distribuzione con segreti in un gruppo di contenitori, un volume segreto è di sola lettura.
  • Tmpfs, un file system supportato da RAM, esegue il backup di tutti i volumi segreti e il relativo contenuto non viene mai scritto nell'archiviazione non volatile.

Nota

I volumi segreti attualmente sono limitati ai contenitori Linux. Per informazioni su come passare variabili di ambiente sicure per i contenitori Windows e Linux, vedere Impostare variabili di ambiente. Mentre stiamo lavorando per portare tutte le funzionalità nei contenitori Windows, puoi trovare le differenze correnti della piattaforma nella panoramica.

Montare un volume segreto - Interfaccia della riga di comando di Azure

Per distribuire un contenitore con uno o più segreti tramite l'interfaccia della riga di comando di Azure, includere i parametri --secrets e --secrets-mount-path nel comando az container create. In questo esempio viene montato un volume segreto costituito da due file contenenti segreti, "mysecret1" e "mysecret2", in /mnt/secrets:

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

L'output di az container exec seguente mostra l'apertura di una shell nel contenitore in esecuzione, l'elencazione dei file all'interno del volume segreto e la successiva visualizzazione dei relativi contenuti:

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.

Montare un volume segreto - YAML

È possibile distribuire gruppi di contenitori con l'interfaccia della riga di comando di Azure e un modello YAML. La distribuzione mediante il modello YAML è il metodo preferito quando si distribuiscono gruppi di contenitori costituiti da più contenitori.

Quando si distribuisce un modello YAML, i valori del segreto devono essere con codifica Base64 nel modello. Tuttavia, i valori del segreto sono visualizzati in testo non crittografato all'interno dei file nel contenitore.

Il modello YAML seguente definisce un gruppo di contenitori con un solo contenitore che monta un volume segreto in /mnt/secrets. Il volume segreto contiene due file contenenti segreti, "mysecret1" e "mysecret2".

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

Per eseguire la distribuzione con il modello YAML, salvare il codice YAML precedente in un file denominato deploy-aci.yaml, quindi eseguire il comando az container create con il parametro --file:

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

Montare un volume segreto - Resource Manager

Oltre alla distribuzione dall'interfaccia della riga di comando e da YAML, è possibile distribuire un gruppo di contenitori usando un modello di Resource Manager di Azure.

Popolare innanzitutto la matrice volumes nella sezione properties del gruppo di contenitori del modello. Quando si esegue la distribuzione con un modello di Resource Manager, i valori del segreto devono essere con codifica Base64 nel modello. Tuttavia, i valori del segreto sono visualizzati in testo non crittografato all'interno dei file nel contenitore.

Successivamente per ogni contenitore del gruppo di contenitori in cui si desidera montare il volume segreto, popolare la matrice volumeMounts nella sezione properties della definizione del contenitore.

Il modello di Resource Manager seguente definisce un gruppo di contenitori con un solo contenitore che monta un volume segreto in /mnt/secrets. Il volume segreto ha due segreti, "mysecret1" e "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"
            }
          }
        ]
      }
    }
  ]
}

Per eseguire la distribuzione con il modello di Resource Manager, salvare il codice JSON precedente in un file denominato deploy-aci.json, quindi eseguire il comando az deployment group create con il parametro --template-file:

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

Passaggi successivi

Volumi

Informazioni su come montare altri tipi di volume in Istanze di Azure Container:

Variabili di ambiente sicure

Un altro metodo per fornire informazioni riservate ai contenitori (inclusi i contenitori di Windows) consiste nell'usare variabili di ambiente sicure.