Azure Container Instances에서 비밀 볼륨 탑재

비밀 볼륨을 사용하여 중요한 정보를 컨테이너 그룹의 컨테이너에 제공할 수 있습니다. 비밀 볼륨은 컨테이너 그룹의 컨테이너가 액세스할 수 있는 볼륨 내 파일에 비밀을 저장합니다. 비밀 볼륨에 비밀을 저장하면 SSH 키 또는 데이터베이스 자격 증명 같은 중요한 데이터가 애플리케이션 코드에 추가되는 일을 방지할 수 있습니다.

  • 컨테이너 그룹에 비밀이 포함된 상태로 배포된 비밀 볼륨은 ‘읽기 전용’입니다.
  • 모든 비밀 볼륨은 tmpfs, RAM 지원 파일 시스템에 의해 지원되며 비휘발성 스토리지에는 해당 콘텐츠를 쓸 수 없습니다.

참고 항목

비밀 볼륨은 현재 Linux 컨테이너로 제한됩니다. 환경 변수 설정에서 Windows 및 Linux 컨테이너 모두에 대한 안전한 환경 변수를 전달하는 방법을 알아봅니다. 모든 기능을 Windows 컨테이너에서 제공하려고 합니다. 그동안 개요에서 현재 플랫폼의 차이점을 찾아볼 수 있습니다.

비밀 볼륨 탑재 - Azure CLI

Azure CLI를 사용하여 하나 이상의 비밀이 포함된 컨테이너를 배포하려면 az container create 명령에 --secrets--secrets-mount-path 매개 변수를 포함해야 합니다. 다음 예제에서는 /mnt/secrets에 비밀 “mysecret1” 및 “mysecret2”가 들어 있는 두 개의 파일로 구성된 ‘비밀’ 볼륨을 탑재합니다.

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

다음 az container exec 출력은 실행 중인 컨테이너에서 셸을 열고, 비밀 볼륨 내 파일을 나열하고, 해당 콘텐츠를 표시합니다.

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.

비밀 볼륨 탑재 - YAML

Azure CLI 및 YAML 템플릿을 사용하여 컨테이너 그룹을 배포할 수도 있습니다. 여러 컨테이너로 구성된 컨테이너 그룹을 배포할 때에는 YAML 템플릿을 사용하여 배포하는 것이 좋습니다.

YAML 템플릿을 사용하여 배포하는 경우 비밀 값은 템플릿에서 Base64로 인코딩되어야 합니다. 그러나 비밀 값은 컨테이너의 파일 내에서 일반 텍스트로 표시됩니다.

다음 YAML 템플릿은 /mnt/secrets에서 비밀 볼륨을 탑재하는 컨테이너 하나가 포함된 컨테이너 그룹을 정의합니다. 비밀 볼륨에는 비밀 “mysecret1” 및 “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

YAML 템플릿을 사용하여 배포하려면 위의 YAML을 deploy-aci.yaml 파일에 저장한 다음, --file 매개 변수를 사용하여 az container create 명령을 실행해야 합니다.

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

비밀 볼륨 탑재 - Resource Manager

CLI 및 YAML 배포 외에도, Azure Resource Manager 템플릿을 사용하여 컨테이너 그룹을 배포할 수 있습니다.

먼저 템플릿의 volumes컨테이너 그룹의 배열properties 섹션을 채웁니다. Resource Manager 템플릿을 사용하여 배포하는 경우 비밀 값은 템플릿에서 Base64로 인코딩되어야 합니다. 그러나 비밀 값은 컨테이너의 파일 내에서 일반 텍스트로 표시됩니다.

다음으로 secret 볼륨을 탑재하려는 컨테이너 그룹에 있는 각 컨테이너의 경우 컨테이너 정의의 properties 섹션에서 volumeMounts 배열을 채웁니다.

다음 Resource Manager 템플릿은 /mnt/secrets에서 비밀 볼륨을 탑재하는 컨테이너 하나가 포함된 컨테이너 그룹을 정의합니다. 비밀 볼륨에는 두 개의 비밀 "mysecret1" 및 "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"
            }
          }
        ]
      }
    }
  ]
}

Resource Manager 템플릿을 사용하여 배포하려면 위의 JSON을 deploy-aci.json 파일에 저장한 다음, --template-file 매개 변수를 사용하여 az deployment group create 명령을 실행합니다:

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

다음 단계

볼륨

Azure Container Instances에서 다른 볼륨 유형을 탑재하는 방법을 알아봅니다.

보안 환경 변수

컨테이너(Windows 컨테이너 포함)에 중요한 정보를 제공하는 또 다른 방법은 보안 환경 변수를 사용하는 것입니다.