Montar um volume secreto no Azure Container Instances

Utilize um volume secreto para fornecer informações confidenciais aos contentores num grupo de contentores. O volume secreto armazena os seus segredos em ficheiros dentro do volume, acessíveis pelos contentores no grupo de contentores. Ao armazenar segredos num volume secreto , pode evitar adicionar dados confidenciais, como chaves SSH ou credenciais de base de dados, ao código da aplicação.

  • Depois de implementado com segredos num grupo de contentores, um volume secreto é só de leitura.
  • Todos os volumes secretos são apoiados por tmpfs, um sistema de ficheiros apoiado por RAM; os respetivos conteúdos nunca são escritos num armazenamento não volátil.

Nota

Os volumes secretos estão atualmente restritos a contentores do Linux. Saiba como transmitir variáveis de ambiente segura para contentores do Windows e do Linux em Definir variáveis de ambiente. Enquanto estamos a trabalhar para trazer todas as funcionalidades para os contentores do Windows, pode encontrar as diferenças atuais da plataforma na descrição geral.

Montar o volume secreto - CLI do Azure

Para implementar um contentor com um ou mais segredos com a CLI do Azure, inclua os --secrets parâmetros e --secrets-mount-path no comando az container create . Este exemplo monta um volume secreto que consiste em dois ficheiros que contêm segredos, "mysecret1" e "mysecret2", em /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

A seguinte saída az container exec mostra a abertura de uma shell no contentor em execução, a listagem dos ficheiros no volume secreto e, em seguida, a apresentação dos respetivos conteúdos:

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.

Montar o volume secreto - YAML

Também pode implementar grupos de contentores com a CLI do Azure e um modelo YAML. Implementar por modelo YAML é o método preferencial ao implementar grupos de contentores que consistem em vários contentores.

Quando implementa com um modelo YAML, os valores secretos têm de estar codificados em Base64 no modelo. No entanto, os valores do segredo aparecem em texto simples dentro dos ficheiros no contentor.

O seguinte modelo YAML define um grupo de contentores com um contentor que monta um volume secreto em /mnt/secrets. O volume secreto tem dois ficheiros que contêm segredos, "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

Para implementar com o modelo YAML, guarde o YAML anterior num ficheiro com o nome deploy-aci.yamle, em seguida, execute o comando az container create com o --file parâmetro :

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

Montar o volume secreto - Resource Manager

Além da implementação da CLI e do YAML, pode implementar um grupo de contentores com um modelo de Resource Manager do Azure.

Primeiro, preencha a volumes matriz na secção do grupo properties de contentores do modelo. Quando implementa com um modelo de Resource Manager, os valores secretos têm de estar codificados em Base64 no modelo. No entanto, os valores do segredo aparecem em texto simples dentro dos ficheiros no contentor.

Em seguida, para cada contentor no grupo de contentores no qual gostaria de montar o volume secreto , preencha a volumeMounts matriz na properties secção da definição do contentor.

O modelo de Resource Manager seguinte define um grupo de contentores com um contentor que monta um volume secreto em /mnt/secrets. O volume secreto tem dois segredos: "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"
            }
          }
        ]
      }
    }
  ]
}

Para implementar com o modelo Resource Manager, guarde o JSON anterior num ficheiro com o nome deploy-aci.jsone, em seguida, execute o comando az deployment group create com o --template-file parâmetro :

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

Passos seguintes

Volumes

Saiba como montar outros tipos de volume no Azure Container Instances:

Proteger variáveis de ambiente

Outro método para fornecer informações confidenciais a contentores (incluindo contentores do Windows) é através da utilização de variáveis de ambiente segura.