빠른 시작: ARM 템플릿을 사용하여 Azure Key Vault 및 키 만들기

Azure Key Vault 는 키, 암호 및 인증서와 같은 비밀에 대한 보안 저장소를 제공하는 클라우드 서비스입니다. 이 빠른 시작에서는 ARM 템플릿(Azure Resource Manager 템플릿)을 배포하여 키 자격 증명 모음 및 키를 만드는 프로세스에 중점을 둡니다.

Azure Resource Manager 템플릿은 프로젝트의 인프라 및 구성을 정의하는 JSON(JavaScript Object Notation) 파일입니다. 이 템플릿은 선언적 구문을 사용합니다. 배포를 만들기 위한 프로그래밍 명령의 시퀀스를 작성하지 않고 의도하는 배포를 설명합니다.

환경이 필수 조건을 충족하고 ARM 템플릿을 사용하는 데 익숙한 경우 Azure에 배포 단추를 선택합니다. 템플릿이 Azure 포털에서 열립니다.

Azure에 Resource Manager 템플릿을 배포하는 단추입니다.

필수 조건

이 문서를 완료하려면 다음을 수행합니다.

  • Azure 구독이 없는 경우, 시작하기 전에 무료 계정을 만드십시오.
  • 사용자에게 Azure 기본 제공 역할이 할당되어 있어야 하며, 권장되는 역할은 기여자입니다. 여기를 참조하세요.

템플릿 검토

이 빠른 시작에서 사용되는 템플릿은 Azure 빠른 시작 템플릿에서 나온 것입니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.42.1.51946",
      "templateHash": "9113739717796369919"
    }
  },
  "parameters": {
    "vaultName": {
      "type": "string",
      "metadata": {
        "description": "The name of the key vault to be created."
      }
    },
    "keyName": {
      "type": "string",
      "metadata": {
        "description": "The name of the key to be created."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "The location of the resources."
      }
    },
    "skuName": {
      "type": "string",
      "defaultValue": "standard",
      "allowedValues": [
        "standard",
        "premium"
      ],
      "metadata": {
        "description": "The SKU of the vault to be created."
      }
    },
    "keyType": {
      "type": "string",
      "defaultValue": "RSA",
      "allowedValues": [
        "EC",
        "EC-HSM",
        "RSA",
        "RSA-HSM"
      ],
      "metadata": {
        "description": "The JsonWebKeyType of the key to be created."
      }
    },
    "keyOps": {
      "type": "array",
      "defaultValue": [],
      "metadata": {
        "description": "The permitted JSON web key operations of the key to be created."
      }
    },
    "keySize": {
      "type": "int",
      "defaultValue": 2048,
      "metadata": {
        "description": "The size in bits of the key to be created."
      }
    },
    "curveName": {
      "type": "string",
      "defaultValue": "",
      "allowedValues": [
        "",
        "P-256",
        "P-256K",
        "P-384",
        "P-521"
      ],
      "metadata": {
        "description": "The JsonWebKeyCurveName of the key to be created."
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.KeyVault/vaults",
      "apiVersion": "2023-07-01",
      "name": "[parameters('vaultName')]",
      "location": "[parameters('location')]",
      "properties": {
        "enableRbacAuthorization": true,
        "enableSoftDelete": true,
        "softDeleteRetentionInDays": 90,
        "enablePurgeProtection": true,
        "enabledForDeployment": false,
        "enabledForDiskEncryption": false,
        "enabledForTemplateDeployment": false,
        "tenantId": "[subscription().tenantId]",
        "sku": {
          "name": "[parameters('skuName')]",
          "family": "A"
        },
        "networkAcls": {
          "defaultAction": "Allow",
          "bypass": "AzureServices"
        }
      }
    },
    {
      "type": "Microsoft.KeyVault/vaults/keys",
      "apiVersion": "2023-07-01",
      "name": "[format('{0}/{1}', parameters('vaultName'), parameters('keyName'))]",
      "properties": {
        "kty": "[parameters('keyType')]",
        "keyOps": "[parameters('keyOps')]",
        "keySize": "[parameters('keySize')]",
        "curveName": "[parameters('curveName')]"
      },
      "dependsOn": [
        "[resourceId('Microsoft.KeyVault/vaults', parameters('vaultName'))]"
      ]
    }
  ],
  "outputs": {
    "proxyKey": {
      "type": "object",
      "value": "[reference(resourceId('Microsoft.KeyVault/vaults/keys', parameters('vaultName'), parameters('keyName')), '2023-07-01')]"
    },
    "location": {
      "type": "string",
      "value": "[parameters('location')]"
    },
    "name": {
      "type": "string",
      "value": "[parameters('vaultName')]"
    },
    "resourceGroupName": {
      "type": "string",
      "value": "[resourceGroup().name]"
    },
    "resourceId": {
      "type": "string",
      "value": "[resourceId('Microsoft.KeyVault/vaults', parameters('vaultName'))]"
    }
  }
}

템플릿에 다음 두 개의 리소스가 정의됩니다.

템플릿은 Azure RBAC 권한 부여를 사용하도록 설정한 키 자격 증명 모음을 생성합니다. 즉, 자격 증명 모음은 액세스 정책 대신 데이터 평면 권한 부여에 Azure RBAC(Azure 역할 기반 액세스 제어)를 사용합니다.

Azure 빠른 시작 템플릿에서 더 많은 Azure Key Vault 템플릿 샘플을 찾을 수 있습니다.

템플릿 매개 변수

매개 변수 Description
vaultName 새 키 자격 증명 모음의 이름입니다. 네임스페이스 내에서 vault.azure.net 전역적으로 고유해야 합니다.
keyName 자격 증명 모음에 생성할 키의 이름입니다.
위치 리소스에 대한 Azure 지역입니다. 기본값은 리소스 그룹 위치입니다.
skuName Vault SKU. standard (기본값) 또는 premium.
keyType 만들 키의 유형입니다. RSA, RSA-HSM, EC, EC-HSM 중에 하나. 기본값은 RSA입니다. JsonWebKeyType을 참조하세요.
Keysize 키의 비트 크기(RSA에만 해당)입니다. 기본값은 2048입니다.
curveName 타원 곡선 이름(EC 키에만 해당). P-256, P-256K, P-384, P-521 중에 하나. JsonWebKeyCurveName을 참조하세요.
keyOps 키에 대해 허용되는 JSON 웹 키 작업 (예: ["sign","verify","encrypt","decrypt","wrapKey","unwrapKey"])입니다. 빈 배열(기본값)은 모든 작업을 허용합니다.

템플릿 배포

  1. 다음 이미지를 선택하고 Azure에 로그인하여 템플릿을 엽니다. 템플릿은 키 볼트와 키를 만듭니다.

    Azure에 Resource Manager 템플릿을 배포하는 단추입니다.

  2. 다음 값을 선택하거나 입력합니다. 지정하지 않는 한 기본값을 사용합니다.

    • 구독: Azure 구독을 선택합니다.
    • 리소스 그룹: 새로 만들기를 선택하고 리소스 그룹에 고유한 이름을 입력한 다음, 확인을 선택합니다.
    • 지역: 위치를 선택합니다. 예: 미국 중부
    • 키 자격 증명 모음 이름: vault.azure.net 네임스페이스 내에서 전역적으로 고유해야 하는 키 자격 증명 모음 이름을 입력합니다.
    • 키 이름: 키 저장소에 저장하는 키의 이름을 입력합니다.
    • Sku 이름: 표준 또는 프리미엄을 선택합니다. 기본값은 표준입니다.
    • 키 유형: 키 유형을 선택합니다. 기본값은 RSA입니다.
    • 키 크기: 키 크기(RSA 키)를 입력합니다. 기본값은 2048입니다.
    • 곡선 이름: EC 키의 경우 곡선을 선택합니다. RSA 키의 경우 비워 둡니다.
  3. 검토 + 생성를 선택한 다음, 생성를 선택합니다. 키 자격 증명 모음 및 키가 성공적으로 배포되면 알림이 표시됩니다.

Azure PowerShell, Azure CLI 또는 REST API를 사용하여 템플릿을 배포할 수도 있습니다. 다른 배포 방법을 알아보려면 템플릿 배포를 참조하세요.

Key Vault RBAC 역할 할당하기

이 템플릿에서 만든 키 자격 증명 모음은 권한 부여에 Azure RBAC를 사용합니다. 데이터 평면을 통해 키에 액세스하려면(예: Azure CLI 또는 Azure PowerShell 사용) 자신에게 적절한 역할을 할당해야 합니다.

  1. Microsoft Entra 사용자 개체 ID를 가져옵니다.

    az ad signed-in-user show --query id -o tsv
    
  2. 키 자격 증명 모음에서 자신에게 Key Vault Crypto Officer 역할을 할당합니다:

    echo "Enter your key vault name:" &&
    read keyVaultName &&
    az role assignment create --role "Key Vault Crypto Officer" \
        --assignee-object-id $(az ad signed-in-user show --query id -o tsv) \
        --scope $(az keyvault show --name $keyVaultName --query id -o tsv)
    

    메모

    역할 할당이 전파되는 데 1~2분 정도 걸릴 수 있습니다.

배포된 리소스 검토

Azure Portal을 사용하여 키 자격 증명 모음 및 키를 확인할 수 있습니다. 또는 다음 Azure CLI 또는 Azure PowerShell 스크립트를 사용하여 만든 키를 나열합니다.

echo "Enter your key vault name:" &&
read keyVaultName &&
az keyvault key list --vault-name $keyVaultName &&
echo "Press [ENTER] to continue ..."

ARM 템플릿을 사용하여 키를 만드는 것은 데이터 평면을 통해 키를 만드는 경우와 다릅니다.

ARM을 통해 키 만들기

  • 키를 만들 때만 가능합니다. 기존 키를 업데이트하거나 새 버전의 기존 키를 만들 수 없습니다. 키가 이미 있는 경우 기존 키가 스토리지에서 검색되어 사용됩니다(쓰기 작업이 발생하지 않음).

  • 이 API를 사용할 수 있는 권한이 부여되려면 호출자에게 "Microsoft.KeyVault/vaults/keys/write" Azure RBAC(역할 기반 액세스 제어) 작업이 있어야 합니다. 기본 제공 "Key Vault 기여자" 역할은 "Microsoft.KeyVault/*" 패턴과 일치하는 모든 Azure RBAC 작업에 권한을 부여하므로 충분합니다.

    ARM 1을 통해 키 생성 ARM 2를 통해 키 생성

기존 API(데이터 평면을 통해 키 만들기)

  • 새 키를 만들고, 기존 키를 업데이트하고, 새 버전의 기존 키를 만들 수 있습니다.
  • 호출자에게 이 API를 사용할 수 있는 권한이 있어야 합니다. 볼트가 Azure RBAC에 대해 사용하도록 설정된 경우 호출자에게는 "Microsoft.KeyVault/vaults/keys/create/action" Azure RBAC DataAction 권한이 있어야 합니다.

자원을 정리하세요

다른 Key Vault 빠른 시작 및 자습서는 이 빠른 시작을 기반으로 합니다. 이후의 빠른 시작 및 자습서를 계속 진행하려는 경우 이러한 리소스를 유지하는 것이 좋습니다. 더 이상 필요하지 않은 경우 Key Vault 및 관련 리소스를 삭제하는 리소스 그룹을 삭제합니다. Azure CLI 또는 Azure PowerShell을 사용하여 리소스 그룹을 삭제하려면 다음을 수행합니다.

echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."

메모

리소스 그룹을 삭제하면 키 자격 증명 모음도 삭제되지만, 자격 증명 모음은 일시 삭제 상태가 되어 보존 기간(기본값: 90일) 동안 복구할 수 있는 상태로 유지됩니다. 자격 증명 모음 이름은 해당 기간 동안 전역에서 예약된 상태로 유지되며, 영구 삭제 방지가 사용하도록 설정되어 있으므로 기간이 끝나기 전에 자격 증명 모음을 영구 삭제할 수 없습니다. 표준 키 자격 증명 모음의 경우 일시 삭제된 자격 증명 모음에는 요금이 청구되지 않습니다. 자세한 내용은 Key Vault 일시 삭제 개요 참조하세요.

다음 단계

이 빠른 시작에서는 ARM 템플릿을 사용하여 키 자격 증명 모음 및 키를 만들고 배포의 유효성을 검사했습니다. Key Vault 및 Azure Resource Manager에 대한 자세한 내용은 다음 문서를 참조하세요.