고객 관리형 키를 사용하여 암호화된 스토리지 계정을 배포하는 Azure Managed Application 만들기
이 문서에서는 고객 관리형 키를 사용하여 암호화된 스토리지 계정을 배포하는 Azure Managed Application을 만드는 방법을 설명합니다. 스토리지 계정, Cosmos DB 및 Azure Database for Postgres는 고객 관리형 키 또는 Microsoft 관리 키를 사용하여 미사용 데이터 암호화를 지원합니다. 사용자 고유의 암호화 키를 사용하여 스토리지 계정에서 데이터를 보호할 수 있습니다. 고객 관리형 키를 지정하는 경우 해당 키는 데이터를 암호화하는 키에 대한 액세스를 보호하고 제어하는 데 사용됩니다. 고객 관리형 키를 사용하면 훨씬 더 유연하게 액세스 제어를 관리할 수 있습니다.
필수 조건
- Microsoft Entra 리소스(예: 사용자, 그룹 또는 서비스 사용자)에 대한 활성 구독 및 권한이 있는 Azure 계정입니다. 계정이 없으면 시작하기 전에 무료 계정을 만듭니다.
- 최신 Azure Resource Manager 도구 확장이 있는 Visual Studio Code. Bicep 파일의 경우 Visual Studio Code용 Bicep 확장을 설치합니다.
- 최신 버전의 Azure PowerShell 또는 Azure CLI를 설치합니다.
- 서비스 카탈로그 정의를 만들고배포하는 방법을 숙지합니다.
관리 ID
관리되는 애플리케이션에서 배포한 스토리지 계정에 대한 고객 관리형 키를 관리되는 리소스 그룹 내의 리소스로 구성하려면 사용자가 할당한 관리 ID가 필요합니다. 이 사용자가 할당한 관리 ID를 사용하여 다른 기존 리소스에 대한 액세스 권한을 관리되는 애플리케이션에 부여할 수 있습니다. 사용자가 할당한 관리 ID를 사용하여 관리 애플리케이션을 구성하는 방법을 알아보려면 관리 ID가 있는 Azure Managed Application을 참조하세요.
애플리케이션에 두 가지 형식의 ID를 부여할 수 있습니다.
- 시스템이 할당한 관리 ID는 애플리케이션에 할당되고, 앱이 삭제되면 이 ID도 삭제됩니다. 앱에는 하나의 시스템 할당 관리 ID만 있을 수 있습니다.
- 사용자 할당 관리 ID는 앱에 할당할 수 있는 독립 실행형 Azure 리소스입니다. 앱에는 여러 사용자 할당 관리 ID가 있을 수 있습니다.
기존 키 자격 증명 모음의 고객 키를 사용하여 암호화된 관리되는 애플리케이션의 관리되는 리소스 그룹에 스토리지 계정을 배포하려면 더 많은 구성이 필요합니다. 관리되는 애플리케이션으로 구성된 관리 ID에는 키 자격 증명 모음에 액세스할 수 있는 관리 ID에 대한 기본 제공 Azure 역할 기반 액세스 제어 관리 ID 운영자가 필요합니다. 자세한 내용은 관리 ID 운영자 역할을 참조하세요.
제거 방지가 있는 키 자격 증명 모음 만들기
- Azure Portal에 로그인합니다.
- Azure Portal 메뉴 또는 홈페이지에서 리소스 만들기를 선택합니다.
- 검색 상자에 Key Vault를 입력합니다.
- 결과 목록에서 Key Vault를 선택합니다.
- Key Vault 섹션에서 만들기를 선택합니다.
- Key Vault 만들기 섹션에 다음 정보를 입력합니다.
- 구독: 구독을 선택합니다.
- 리소스 그룹: 새로 만들기를 선택하고 이름(예: demo-cmek-rg)을 입력합니다.
- 이름: 고유한 이름(예: demo-keyvault-cmek)이 필요합니다.
- 지역: 위치(예: 미국 동부)를 선택합니다.
- 가격 책정 계층: 드롭다운 목록에서 표준을 선택합니다.
- 제거 방지: 제거 방지 사용을 선택합니다.
- 다음을 선택하고 액세스 정책 탭으로 이동합니다.
- 액세스 구성: 역할 기반 액세스 제어를 선택합니다.
- 다른 모든 옵션에 대해 기본값을 적용합니다.
- 검토 + 만들기를 선택합니다.
- 설정이 올바른지 확인하고 만들기를 선택합니다.
성공적으로 배포되면 리소스로 이동을 선택합니다. 개요 탭에서 다음 속성을 적어 둡니다.
- 자격 증명 모음 이름: 이 예에서 자격 증명 모음 이름은 demo-keyvault-cmek입니다. 이 이름은 다른 단계에서 사용됩니다.
- 자격 증명 모음 URI: 이 예에서 자격 증명 모음 URI는
https://demo-keyvault-cmek.vault.azure.net/
입니다.
사용자 할당 관리 ID 만들기
사용자가 할당한 관리 ID를 만들려면 계정에 관리 ID 기여자 역할 할당이 필요합니다.
- 검색 상자에서 관리 ID를 입력합니다.
- [서비스] 아래에서 관리 ID를 선택합니다.
- 만들기를 선택하고 기본 탭에 다음 값을 입력합니다.
- 구독: 구독을 선택합니다.
- 리소스 그룹: 이전 단계에서 만든 demo-cmek-rg 리소스 그룹을 선택합니다.
- 지역: 지역(예: 미국 동부)을 선택합니다.
- 이름: 사용자가 할당한 관리 ID의 이름(예: demokeyvaultmi)을 입력합니다.
- 검토 + 만들기를 선택합니다.
- 유효성 검사 통과가 표시되면 만들기를 선택합니다.
성공적으로 배포되면 리소스로 이동을 선택합니다.
역할 할당 만들기
키 자격 증명 모음에 대한 두 가지 역할 할당을 만들어야 합니다. 자세한 내용은 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요.
관리 ID에 키 자격 증명 모음에 대한 키 권한 부여
키를 래핑 및 래핑 해제할 수 있도록 demokeyvaultmi 키 자격 증명 모음 관리 ID에 대한 역할 할당을 만듭니다.
- demo-cmek-keyvault 키 자격 증명 모음으로 이동합니다.
- 액세스 제어(IAM) 를 선택합니다.
- 추가>역할 할당 추가를 선택합니다.
- 다음 역할을 할당합니다.
- 역할: Key Vault 암호화 서비스 암호화 사용자
- 액세스 할당 대상: 관리 ID
- 멤버: demokeyvaultmi
- 검토 + 할당을 선택하여 설정을 확인합니다.
- 검토 + 할당을 선택하여 역할 할당을 만듭니다.
계정에 대한 역할 할당 만들기
계정에서 새 키를 키 자격 증명 모음에 만들 수 있도록 다른 역할 할당을 만듭니다.
- 다음 역할을 할당합니다.
- 역할: 키 자격 증명 모음 암호화 책임자
- 액세스 할당 대상: 사용자, 그룹 또는 서비스 주체
- 멤버: Microsoft Entra 계정
- 검토 + 할당을 선택하여 설정을 확인합니다.
- 검토 + 할당을 선택하여 역할 할당을 만듭니다.
키 자격 증명 모음의 역할 할당은 액세스 제어(IAM)>역할 할당에서 확인할 수 있습니다.
키 만들기
키 자격 증명 모음에서 스토리지 계정을 암호화하는 데 사용하는 키를 만들어야 합니다.
- demo-cmek-keyvault 키 자격 증명 모음으로 이동합니다.
- 키를 선택합니다.
- 생성/가져오기를 선택합니다.
- 키 만들기 페이지에서 다음 값을 선택합니다.
- 옵션: 생성
- 이름: demo-cmek-key
- 다른 옵션에 대해 기본값을 적용합니다.
- 만들기를 실행합니다.
키 이름을 적어 두세요. 관리되는 애플리케이션을 배포할 때 이 이름을 사용합니다.
관리되는 애플리케이션에 대한 사용자가 할당한 관리 ID 만들기
관리되는 애플리케이션에 대한 관리 ID로 사용할 사용자가 할당한 관리 ID를 만듭니다.
- 검색 상자에 관리 ID를 입력합니다.
- [서비스] 아래에서 관리 ID를 선택합니다.
- 만들기를 실행합니다.
- 구독: 구독을 선택합니다.
- 리소스 그룹: demo-cmek-rg 리소스 그룹을 선택합니다.
- 지역: 지역(예: 미국 동부)을 선택합니다.
- 이름: 사용자가 할당한 관리 ID의 이름(예: demomanagedappmi)을 입력합니다.
- 검토 + 만들기를 선택합니다.
- 유효성 검사 통과가 표시되면 만들기를 선택합니다.
성공적으로 배포되면 리소스로 이동을 선택합니다.
관리 ID에 역할 권한 할당
demokeyvaultmi라는 관리 ID 운영자 역할을 사용자가 할당한 관리 ID 범위의 관리 ID에 할당합니다.
- demokeyvaultmi라는 사용자가 할당한 관리 ID로 이동합니다.
- 액세스 제어(IAM) 를 선택합니다.
- 역할 할당 추가>를 선택하여 역할 할당 추가 페이지를 엽니다.
- 다음 역할을 할당합니다.
- 역할: 관리 ID 운영자
- 액세스 할당 대상: 관리 ID
- 멤버: demomanagedappmi
- 검토 + 할당을 선택하여 설정을 확인합니다.
- 검토 + 할당을 선택하여 역할 할당을 만듭니다.
demokeyvaultmi에 대한 역할 할당은 액세스 제어(IAM)>역할 할당에서 확인할 수 있습니다.
관리되는 애플리케이션 템플릿 샘플
스토리지 계정을 관리되는 리소스 그룹에 배포하는 관리되는 애플리케이션을 만들고, 기존 키 자격 증명 모음의 키를 사용하여 스토리지 계정의 데이터를 암호화합니다.
관리되는 애플리케이션을 서비스 카탈로그에 게시하려면 다음 작업을 수행합니다.
- 이 문서의 샘플에서 creatUIDefinition.json 파일을 만듭니다. 이 템플릿은 관리되는 애플리케이션을 배포할 때 포털의 사용자 인터페이스 요소를 정의합니다.
- 이 문서의 Bicep 파일을 JSON으로 변환하여 mainTemplate.json이라는 Azure Resource Manager 템플릿을 만듭니다. 이 템플릿은 관리되는 애플리케이션에서 배포할 리소스를 정의합니다.
- 필요한 JSON 파일(createUiDefinition.json 및 mainTemplate.json)이 포함된 .zip 패키지를 만듭니다.
- 서비스 카탈로그에서 사용할 수 있도록 관리형 애플리케이션 정의를 게시합니다. 자세한 내용은 빠른 시작: Azure Managed Application 정의 만들기 및 게시를 참조하세요.
createUiDefinition.json 템플릿 만들기
다음 템플릿은 관리되는 애플리케이션에 대한 사용자가 할당한 관리 ID를 만듭니다. 다음 예제에서는 키 자격 증명 모음의 관리 ID에 대한 관리 ID 운영자 권한을 사용하여 사용자가 할당한 관리 ID를 미리 구성해야 하므로 시스템이 할당한 관리 ID를 사용하지 않도록 설정합니다.
- Visual Studio Code에서 creatUIDefinition.json이라는 새 파일을 만듭니다.
- 다음 코드를 복사하여 파일에 붙여 넣습니다.
- 파일을 저장합니다.
{
"$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
"handler": "Microsoft.Azure.CreateUIDef",
"version": "0.1.2-preview",
"parameters": {
"basics": [],
"steps": [
{
"name": "managedApplicationSetting",
"label": "Application Settings",
"subLabel": {
"preValidation": "Configure your application settings and Managed Identity for the application",
"postValidation": "Done"
},
"bladeTitle": "Application Settings - Config",
"elements": [
{
"name": "appIdentity",
"type": "Microsoft.ManagedIdentity.IdentitySelector",
"label": "Managed Identity Configuration for the Application (Needs Managed Identity Operator permissions over KV Managed Identity).",
"toolTip": {
"systemAssignedIdentity": "Enable system assigned identity to grant the managed application access to additional existing resources.",
"userAssignedIdentity": "Add user assigned identities to grant the managed application access to additional existing resources."
},
"defaultValue": {
"systemAssignedIdentity": "Off"
},
"options": {
"hideSystemAssignedIdentity": true,
"hideUserAssignedIdentity": false,
"readOnlySystemAssignedIdentity": true
},
"visible": true
}
]
},
{
"name": "configuration",
"type": "Microsoft.Common.Section",
"label": "Configuration",
"elements": [
{
"name": "cmek",
"type": "Microsoft.Common.Section",
"label": "Customer Managed Encryption Key (CMEK)",
"elements": [
{
"name": "cmekEnable",
"type": "Microsoft.Common.CheckBox",
"label": "Enable CMEK",
"toolTip": "Enable to provide a CMEK",
"constraints": {
"required": false
}
},
{
"name": "cmekKeyVaultUrl",
"type": "Microsoft.Common.TextBox",
"label": "Key Vault URL",
"toolTip": "Specify the CMEK Key Vault URL",
"defaultValue": "",
"constraints": {
"required": "[steps('configuration').cmek.cmekEnable]",
"regex": ".*",
"validationMessage": "The value must not be empty."
},
"visible": "[steps('configuration').cmek.cmekEnable]"
},
{
"name": "cmekKeyName",
"type": "Microsoft.Common.TextBox",
"label": "Key Name",
"toolTip": "Specify the key name from your key vault.",
"defaultValue": "",
"constraints": {
"required": "[steps('configuration').cmek.cmekEnable]",
"regex": ".*",
"validationMessage": "The value must not be empty."
},
"visible": "[steps('configuration').cmek.cmekEnable]"
},
{
"name": "cmekKeyIdentity",
"type": "Microsoft.ManagedIdentity.IdentitySelector",
"label": "Managed Identity Configuration for Key Vault Access",
"toolTip": {
"systemAssignedIdentity": "Enable system assigned identity to grant the managed application access to additional existing resources.",
"userAssignedIdentity": "Add user assigned identities to grant the managed application access to additional existing resources."
},
"defaultValue": {
"systemAssignedIdentity": "Off"
},
"options": {
"hideSystemAssignedIdentity": true,
"hideUserAssignedIdentity": false,
"readOnlySystemAssignedIdentity": true
},
"visible": "[steps('configuration').cmek.cmekEnable]"
}
],
"visible": true
}
]
}
],
"outputs": {
"location": "[location()]",
"managedIdentity": "[steps('managedApplicationSetting').appIdentity]",
"cmekConfig": {
"kvUrl": "[if(empty(steps('configuration').cmek.cmekKeyVaultUrl), '', steps('configuration').cmek.cmekKeyVaultUrl)]",
"keyName": "[if(empty(steps('configuration').cmek.cmekKeyName), '', steps('configuration').cmek.cmekKeyName)]",
"identityId": "[if(empty(steps('configuration').cmek.cmekKeyIdentity), '', steps('configuration').cmek.cmekKeyIdentity)]"
}
}
}
}
mainTemplate.json 템플릿 만들기
다음 Bicep 파일은 mainTemplate.json의 소스 코드입니다. 이 템플릿은 createUiDefinition.json 파일에 정의된 사용자가 할당한 관리 ID를 사용합니다.
- Visual Studio Code에서 mainTemplate.bicep이라는 새 파일을 만듭니다.
- 다음 코드를 복사하여 파일에 붙여 넣습니다.
- 파일을 저장합니다.
param cmekConfig object = {
kvUrl: ''
keyName: ''
identityId: {}
}
@description('Specify the Azure region to place the application definition.')
param location string = resourceGroup().location
/////////////////////////////////
// Common Resources Configuration
/////////////////////////////////
var commonproperties = {
name: 'cmekdemo'
displayName: 'Common Resources'
storage: {
sku: 'Standard_LRS'
kind: 'StorageV2'
accessTier: 'Hot'
minimumTlsVersion: 'TLS1_2'
}
}
var identity = items(cmekConfig.identityId.userAssignedIdentities)[0].key
resource storage 'Microsoft.Storage/storageAccounts@2022-05-01' = {
name: '${commonproperties.name}${uniqueString(resourceGroup().id)}'
location: location
sku: {
name: commonproperties.storage.sku
}
kind: commonproperties.storage.kind
identity: cmekConfig.identityId
properties: {
accessTier: commonproperties.storage.accessTier
minimumTlsVersion: commonproperties.storage.minimumTlsVersion
encryption: {
identity: {
userAssignedIdentity: identity
}
services: {
blob: {
enabled: true
}
table: {
enabled: true
}
file: {
enabled: true
}
}
keySource: 'Microsoft.Keyvault'
keyvaultproperties: {
keyname: '${cmekConfig.keyName}'
keyvaulturi: '${cmekConfig.kvUrl}'
}
}
}
}
PowerShell 또는 Azure CLI를 사용하여 mainTemplate.json 파일을 빌드합니다. Bicep 파일을 저장한 디렉터리로 이동하여 build
명령을 실행합니다.
bicep build mainTemplate.bicep
Bicep 파일이 JSON으로 변환되면 mainTemplate.json 파일이 다음 예와 일치해야 합니다. version
및 templateHash
에 대한 metadata
속성에 다른 값이 있을 수 있습니다.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.16.2.56959",
"templateHash": "1234567891234567890"
}
},
"parameters": {
"cmekConfig": {
"type": "object",
"defaultValue": {
"kvUrl": "",
"keyName": "",
"identityId": {}
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Specify the Azure region to place the application definition."
}
}
},
"variables": {
"commonproperties": {
"name": "cmekdemo",
"displayName": "Common Resources",
"storage": {
"sku": "Standard_LRS",
"kind": "StorageV2",
"accessTier": "Hot",
"minimumTlsVersion": "TLS1_2"
}
},
"identity": "[items(parameters('cmekConfig').identityId.userAssignedIdentities)[0].key]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-05-01",
"name": "[format('{0}{1}', variables('commonproperties').name, uniqueString(resourceGroup().id))]",
"location": "[parameters('location')]",
"sku": {
"name": "[variables('commonproperties').storage.sku]"
},
"kind": "[variables('commonproperties').storage.kind]",
"identity": "[parameters('cmekConfig').identityId]",
"properties": {
"accessTier": "[variables('commonproperties').storage.accessTier]",
"minimumTlsVersion": "[variables('commonproperties').storage.minimumTlsVersion]",
"encryption": {
"identity": {
"userAssignedIdentity": "[variables('identity')]"
},
"services": {
"blob": {
"enabled": true
},
"table": {
"enabled": true
},
"file": {
"enabled": true
}
},
"keySource": "Microsoft.Keyvault",
"keyvaultproperties": {
"keyname": "[format('{0}', parameters('cmekConfig').keyName)]",
"keyvaulturi": "[format('{0}', parameters('cmekConfig').kvUrl)]"
}
}
}
}
]
}
관리되는 애플리케이션 배포
서비스 카탈로그 정의가 만들어지면 관리되는 애플리케이션을 배포할 수 있습니다. 자세한 내용은 빠른 시작: 서비스 카탈로그 관리되는 애플리케이션 배포를 참조하세요.
배포하는 동안 사용자가 할당한 관리 ID, 키 자격 증명 모음 이름, 키 자격 증명 모음 URL, 키 자격 증명 모음의 키 이름을 사용합니다. createUiDefinition.json 파일은 사용 인터페이스를 만듭니다.
예를 들어 포털 배포의 애플리케이션 설정 탭에서 demomanagedappmi를 추가합니다.
구성 탭에서 고객 관리형 키를 사용하도록 설정하고, demokeyvaultmi 키 자격 증명 모음에 대한 사용자가 할당한 관리 ID를 추가합니다. 또한 만든 키 자격 증명 모음의 URL과 키 이름을 지정합니다.
배포 확인
배포가 완료되면 관리되는 애플리케이션의 ID 할당을 확인할 수 있습니다. 사용자가 할당한 demomanagedappmi 관리 ID가 관리되는 애플리케이션에 할당됩니다.
- 관리되는 애플리케이션을 배포한 리소스 그룹으로 이동합니다.
- 설정>ID 아래에서 사용자 할당(미리 보기)을 선택합니다.
관리되는 애플리케이션에서 배포한 스토리지 계정을 확인할 수도 있습니다. 암호화 탭에는 사용자가 할당한 관리 ID에 대한 demo-cmek-key 키와 리소스 ID가 표시됩니다.
- 관리되는 애플리케이션의 스토리지 계정이 배포된 관리되는 리소스 그룹으로 이동합니다.
- 보안 + 네트워킹 아래에서 암호화를 선택합니다.
다음 단계
- 스토리지 암호화에 대한 자세한 내용은 Azure Storage 암호화를 위한 고객 관리형 키를 참조하세요.
- 키 자격 증명 모음의 키에 액세스할 수 있는 권한이 있는 사용자가 할당한 관리 ID에 대한 자세한 내용은 기존 스토리지 계정에 대해 동일한 테넌트에서 고객 관리형 키 구성을 참조하세요.