Monter un volume secret dans Azure Container Instances

Vous pouvez utiliser un volume secret pour fournir des informations sensibles aux conteneurs d’un groupe de conteneurs. Le volume secret stocke vos secrets spécifiés dans les fichiers du volume, auxquels les conteneurs de votre groupe de conteneurs peuvent accéder. En stockant les secrets d’un volume secret, vous pouvez éviter de placer des données sensibles telles que des clés SSH ou des informations d’identification sur une base de données dans votre code d’application.

  • Une fois déployé avec des secrets dans un groupe de conteneurs, un volume secret est en lecture seule.
  • Tous les volumes secrets sont sauvegardés par tmpfs, un système de fichiers reposant sur la RAM ; leur contenu n’est jamais écrit sur un stockage non volatile.

Notes

Les volumes secrets sont actuellement restreints aux conteneurs Linux. Découvrez comment transmettre des variables d’environnement sécurisées pour les conteneurs Windows et Linux dans Définir des variables d’environnement. Nous travaillons actuellement à proposer toutes ces fonctionnalités dans des conteneurs Windows. En attendant, nous vous invitons à découvrir les différences actuelles de la plateforme dans la Vue d’ensemble.

Monter un volume secret : Azure CLI

Pour déployer un conteneur avec un ou plusieurs secrets à l’aide de l’interface Azure CLI, incluez les paramètres --secrets et --secrets-mount-path dans la commande az container create. Cet exemple monte un volume secret constitué de deux fichiers contenant des secrets, « mysecret1 » et « mysecret2 », sur /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

La sortie de la commande az container exec suivante indique l’ouverture d’un interpréteur de commandes dans le conteneur en cours d’exécution, affichant les fichiers dans le volume secret, puis affiche leur contenu :

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.

Monter un volume secret : YAML

Vous pouvez également déployer des groupes de conteneurs avec Azure CLI et un modèle YAML. Le déploiement avec un modèle YAML est la méthode privilégiée lorsqu’il s’agit de déployer des groupes de conteneurs, composés de conteneurs multiples.

Lorsque vous déployez avec un modèle YAML, les valeurs de secret doivent être codées en Base64 dans le modèle. Toutefois, les valeurs de secret apparaissent en texte brut dans les fichiers du conteneur.

Le modèle YAML suivant définit un groupe de conteneurs avec un seul conteneur montant un volume secret sur /mnt/secrets. Le volume secret a deux fichiers contenant des secrets, « mysecret1 » et « 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

Pour effectuer un déploiement avec le modèle YAML, enregistrez le YAML précédent dans un fichier nommé deploy-aci.yaml, puis exécutez la commande az container create avec le paramètre --file :

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

Monter un volume secret : Gestionnaire des ressources

En plus du déploiement de l’interface CLI et de YAML, vous pouvez déployer un groupe de conteneurs à l’aide d’un modèle Resource Manager Azure.

Tout d’abord, remplissez le tableau volumes dans la section properties du groupe de conteneurs du modèle. Lorsque vous déployez avec un modèle Resource Manager, les valeurs du secret doivent être Codées en base64 dans le modèle. Toutefois, les valeurs de secret apparaissent en texte brut dans les fichiers du conteneur.

Ensuite, pour chaque conteneur du groupe de conteneurs dans lequel vous souhaitez monter le volume secret, remplissez le tableau volumeMounts dans la section properties de la définition de conteneur.

Le modèle Resource Manager suivant définit un groupe de conteneurs avec un conteneur montant un volume secret sur /mnt/secrets. Le volume secret possède deux secrets, « mysecret1 » et « 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"
            }
          }
        ]
      }
    }
  ]
}

Pour effectuer un déploiement avec le modèle Resource Manager, enregistrez le JSON précédent dans un fichier nommé deploy-aci.json, puis exécutez la commande az deployment group create avec le paramètre --template-file :

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

Étapes suivantes

Volumes

Découvrez comment monter d’autres types de volumes dans Azure Container Instances :

Protection des variables d’environnement

Une autre méthode pour fournir des informations sensibles aux conteneurs (y compris les conteneurs Windows) s’effectue à l’aide de la protection des variables d’environnement.