데이터베이스 수준 TDE CMK는 Azure SQL Database(모든 SQL Database 버전)에서 사용할 수 있습니다. Azure SQL Managed Instance, SQL Server 온-프레미스, Azure VM 및 Azure Synapse Analytics(전용 SQL 풀(이전의 SQL DW))에서는 사용할 수 없습니다.
이 가이드에서는 데이터베이스 수준에서 CMK(고객 관리형 키) 및 TDE(투명한 데이터 암호화)를 통해 Azure SQL Database를 생성, 업데이트 및 검색하는 단계를 안내합니다. 이때 사용자가 할당한 관리 ID를 활용하여 Azure Key Vault에 액세스합니다. Azure Key Vault는 Azure SQL Database와 다른 Microsoft Entra 테넌트에 있습니다. 자세한 내용은 투명한 데이터 암호화에서 교차 테넌트 고객 관리형 키를 참조하세요.
데이터베이스 수준 CMK에 필요한 RBAC 권한은 서버 수준 CMK에 필요한 권한과 동일합니다. 특히 서버 수준에서 Azure Key Vault, 관리 ID 및 TDE용 교차 테넌트 CMK를 사용할 때 적용할 수 있는 동일한 RBAC 권한을 데이터베이스 수준에서 적용할 수 있습니다. 키 관리 및 액세스 정책에 대한 자세한 내용은 키 관리를 참조하세요.
첫 번째 테넌트에 필요한 리소스
이 자습서의 목적에 따라 첫 번째 테넌트는 ISV(독립 소프트웨어 공급업체)에 속하고 두 번째 테넌트는 클라이언트에 속해 있다고 가정합니다. 이 시나리오에 대한 자세한 내용은 투명한 데이터 암호화에서 교차 테넌트 고객 관리형 키를 참조하세요.
교차 테넌트 CMK를 사용하여 Azure SQL Database에 대한 TDE를 구성하려면 먼저 애플리케이션에 대한 페더레이션 ID 자격 증명으로 할당된 사용자가 할당한 관리 ID를 사용해 구성한 다중 테넌트 Microsoft Entra 애플리케이션이 있어야 합니다. 필수 조건에서 가이드 중 하나를 따릅니다.
애플리케이션 이름 및 애플리케이션 ID를 기록합니다. Azure portal>Microsoft Entra ID>엔터프라이즈 애플리케이션에서 생성한 애플리케이션을 검색하여 찾을 수 있습니다.
두 번째 테넌트에 필요한 리소스
참고 항목
Azure AD와 MSOnline PowerShell 모듈은 2024년 3월 30일부터 더 이상 사용되지 않습니다. 자세히 알아보려면 사용 중단 업데이트를 참조하세요. 이 날짜 이후에는 이러한 모듈에 대한 지원이 Microsoft Graph PowerShell SDK 및 보안 수정 사항에 대한 마이그레이션 지원으로 제한됩니다. 사용되지 않는 모듈은 2025년 3월 30일까지 계속 작동합니다.
Microsoft Graph PowerShell로 마이그레이션하여 Microsoft Entra ID(이전의 Azure AD)와 상호 작용하는 것이 좋습니다. 일반적인 마이그레이션 관련 질문은 마이그레이션 FAQ를 참조하세요. 참고: MSOnline 버전 1.0.x는 2024년 6월 30일 이후 중단될 수 있습니다.
Azure Key Vault가 있는 두 번째 테넌트에서 첫 번째 테넌트로부터 등록된 애플리케이션의 애플리케이션 ID를 사용하여 서비스 주체(애플리케이션)를 생성합니다. 다음은 다중 테넌트 애플리케이션을 등록하는 방법에 관한 몇 가지 예제입니다. 각각 <TenantID> 및 <ApplicationID>를 Microsoft Entra ID의 클라이언트 테넌트 ID 및 다중 테넌트 애플리케이션의 애플리케이션 ID로 바꿉니다.
다음은 사용자가 할당한 관리 ID를 사용하여 Azure SQL Database에서 데이터베이스를 생성하는 예제와 데이터베이스 수준에서 교차 테넌트 고객 관리형 키를 설정하는 방법입니다. 데이터베이스 생성 단계에서 투명한 데이터 암호화를 위해 고객 관리형 키를 설정하려면 사용자가 할당한 관리 ID가 필요합니다.
SQL 데이터베이스에서 리소스 유형을 단일 데이터베이스로 설정한 상태로 두고 만들기를 선택합니다.
SQL Database 만들기 양식의 기본 탭에서 프로젝트 세부 정보 아래에서 데이터베이스에 대해 원하는 Azure 구독, 리소스 그룹, 서버를 선택합니다. 그리고 데이터베이스 이름에 고유한 이름을 사용합니다. Azure SQL Database에 대한 논리 서버를 생성하지 않은 경우 교차 테넌트 CMK(고객 관리형 키) 기반 TDE로 구성된 서버 만들기를 참조하세요.
보안 탭에서 투명한 데이터 암호화 구성을 선택합니다.
투명한 데이터 암호화 메뉴에서 데이터베이스 수준 CMK(고객 관리형 키)를 선택합니다.
사용자가 할당한 관리 ID의 경우 데이터베이스 ID를 사용하려면 구성을 선택하고, 원하는 ID가 ID 메뉴에 나열되지 않은 경우 리소스에 사용자가 할당한 관리 ID를 추가합니다. 그런 다음 적용을 선택합니다.
투명한 데이터 암호화 메뉴에서 키 변경을 선택합니다. TDE에 사용할 고객 관리형 키에 대해 원하는 구독, 키 자격 증명 모음, 키 및 버전을 선택합니다. 선택 단추를 누릅니다. 키를 선택한 후 투명한 데이터 암호화 메뉴에서 Azure Key Vault URI(개체 식별자)를 사용하여 필요에 따라 데이터베이스 키를 더 추가할 수도 있습니다.
자동 키 순환은 투명한 데이터 암호화 메뉴의 키 자동 순환 확인란을 선택하여 데이터베이스 수준에서 사용하도록 설정할 수도 있습니다.
적용을 선택하여 데이터베이스를 계속 생성합니다.
페이지 아래쪽에서 검토 + 만들기를 선택합니다.
검토 + 만들기 페이지에서 검토 후 만들기를 선택합니다.
참고 항목
사용자가 할당한 관리 ID가 키 자격 증명 모음에서 올바른 권한을 사용하도록 설정되지 않았으면 데이터베이스를 생성하지 못합니다. 사용자가 할당한 관리 ID에는 키 자격 증명 모음에 대한 Get, wrapKey 및 unwrapKey 권한이 필요합니다. 자세한 내용은 고객 관리형 키 기반 투명한 데이터 암호화를 위한 관리 ID를 참조하세요.
Azure CLI의 현재 릴리스 설치에 대한 자세한 내용은 Azure CLI 설치 문서를 참조하세요.
az sql db create 명령을 사용하여 사용자가 할당한 관리 ID 및 교차 테넌트 고객 관리형 TDE로 구성된 데이터베이스를 생성합니다. 두 번째 테넌트에서 키 식별자를 encryption-protector 필드에 사용할 수 있습니다. 다중 테넌트 애플리케이션의 애플리케이션 ID를 federated-client-id 필드에서 사용할 수 있습니다. --encryption-protector-auto-rotation 매개 변수를 사용하여 데이터베이스 수준에서 자동 키 순환을 사용하도록 설정할 수 있습니다.
사용자 할당 관리 ID 리소스 ID를 가져오려면 Azure Portal에서 관리 ID를 검색합니다. 관리 ID를 찾아 속성으로 이동합니다. UMI 리소스 ID의 예는 /subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity>와 같습니다.
<ResourceGroupName>: Azure SQL 논리 서버에 대한 리소스 그룹의 이름
<DatabaseName>: 고유한 Azure SQL Database 이름 사용
<ServerName>: 고유한 Azure SQL 논리 서버 이름을 사용합니다.
<UserAssignedIdentityId>: 서버에 할당할 사용자 할당 관리 ID 목록(하나 또는 여러 개일 수 있음)
<CustomerManagedKeyId>: 두 번째 테넌트 Key Vault의 키 식별자
<FederatedClientId>: 다중 테넌트 애플리케이션의 애플리케이션 ID
-EncryptionProtectorAutoRotation: 데이터베이스 수준에서 자동 키 순환을 사용하도록 설정하는 데 사용할 수 있습니다.
사용자 할당 관리 ID 리소스 ID를 가져오려면 Azure Portal에서 관리 ID를 검색합니다. 관리 ID를 찾아 속성으로 이동합니다. UMI 리소스 ID의 예는 /subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity>와 같습니다.
# create a server with user-assigned managed identity and cross-tenant customer-managed TDE with automatic key rotation enabled
$params = @{
ResourceGroupName = '<ResourceGroupName>'
ServerName = '<ServerName>'
DatabaseName = '<DatabaseName>'
AssignIdentity = $true
UserAssignedIdentityId = '<UserAssignedIdentityId>'
EncryptionProtector = '<CustomerManagedKeyId>'
FederatedClientId = '<FederatedClientId>'
EncryptionProtectorAutoRotation = $true
}
New-AzSqlDatabase @params
다음은 사용자가 할당한 관리 ID 및 데이터베이스 수준에서 고객 관리형 TDE로 Azure SQL Database를 생성하는 ARM 템플릿의 예제입니다. 교차 테넌트 CMK의 경우 두 번째 테넌트 Key Vault의 키 식별자와 다중 테넌트 애플리케이션의 애플리케이션 ID를 사용합니다.
사용자 할당 관리 ID 리소스 ID를 가져오려면 Azure Portal에서 관리 ID를 검색합니다. 관리 ID를 찾아 속성으로 이동합니다. UMI 리소스 ID의 예는 /subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity>와 같습니다.
데이터베이스 수준 고객 관리형 키를 사용하여 기존 Azure SQL Database 업데이트
다음은 사용자가 할당한 관리 ID를 사용하여 Azure SQL Database에서 기존 데이터베이스를 업데이트하는 예제와 데이터베이스 수준에서 교차 테넌트 고객 관리형 키를 설정하는 방법입니다. 데이터베이스 생성 단계에서 투명한 데이터 암호화를 위해 고객 관리형 키를 설정하려면 사용자가 할당한 관리 ID가 필요합니다.
Azure Portal에서 데이터베이스 수준 고객 관리형 키로 업데이트하려는 SQL Database 리소스로 이동합니다.
보안 아래에서 ID를 선택합니다. 이 데이터베이스에 대해 사용자가 할당한 관리 ID를 추가한 다음, 저장을 선택합니다 .
이제 데이터베이스에 대한 보안 아래의 데이터 암호화 메뉴로 이동합니다. 데이터베이스 수준 CMK(고객 관리형 키)를 선택합니다. 마지막 단계에서 ID를 구성했으므로 데이터베이스의 데이터베이스 ID를 이미 사용하도록 설정해야 합니다.
키 변경을 선택합니다. TDE에 사용할 고객 관리형 키에 대해 원하는 구독, 키 자격 증명 모음, 키 및 버전을 선택합니다. 선택 단추를 누릅니다. 키를 선택한 후 데이터 암호화 메뉴에서 Azure Key Vault URI(개체 식별자)를 사용하여 필요에 따라 데이터베이스 키를 더 추가할 수도 있습니다.
데이터베이스 수준에서 자동 키 순환을 사용하도록 설정하려면 키 자동 순환 확인란을 선택합니다.
저장을 선택합니다.
Azure CLI의 현재 릴리스 설치에 대한 자세한 내용은 Azure CLI 설치 문서를 참조하세요.
az sql db create 명령을 사용하여 사용자가 할당한 관리 ID 및 교차 테넌트 고객 관리형 TDE로 구성된 데이터베이스를 업데이트합니다. 두 번째 테넌트에서 키 식별자를 encryption-protector 필드에 사용할 수 있습니다. 다중 테넌트 애플리케이션의 애플리케이션 ID를 federated-client-id 필드에서 사용할 수 있습니다.
사용자 할당 관리 ID 리소스 ID를 가져오려면 Azure Portal에서 관리 ID를 검색합니다. 관리 ID를 찾아 속성으로 이동합니다. UMI 리소스 ID의 예는 /subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity>와 같습니다. --encryption-protector-auto-rotation 매개 변수를 사용하여 데이터베이스 수준에서 자동 키 순환을 사용하도록 설정할 수 있습니다.
<ResourceGroupName>: Azure SQL 논리 서버에 대한 리소스 그룹의 이름
<DatabaseName>: 고유한 Azure SQL Database 이름 사용
<ServerName>: 고유한 Azure SQL 논리 서버 이름을 사용합니다.
<UserAssignedIdentityId>: 서버에 할당할 사용자 할당 관리 ID 목록(하나 또는 여러 개일 수 있음)
<CustomerManagedKeyId>: 두 번째 테넌트 Key Vault의 키 식별자
<FederatedClientId>: 다중 테넌트 애플리케이션의 애플리케이션 ID
<ListOfKeys>: 데이터베이스에 추가할 쉼표로 구분된 데이터베이스 수준 고객 관리형 키 목록
<ListOfKeysToRemove>: 데이터베이스에서 제거할 쉼표로 구분된 데이터베이스 수준 고객 관리형 키 목록
-EncryptionProtectorAutoRotation: 데이터베이스 수준에서 자동 키 순환을 사용하도록 설정하는 데 사용할 수 있습니다.
사용자 할당 관리 ID 리소스 ID를 가져오려면 Azure Portal에서 관리 ID를 검색합니다. 관리 ID를 찾아 속성으로 이동합니다. UMI 리소스 ID의 예는 /subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity>와 같습니다.
다음은 사용자가 할당한 관리 ID 및 데이터베이스 수준의 고객 관리형 TDE로 Azure SQL Database를 업데이트하는 ARM 템플릿의 예제입니다. 교차 테넌트 CMK의 경우 두 번째 테넌트 Key Vault의 키 식별자와 다중 테넌트 애플리케이션의 애플리케이션 ID를 사용합니다.
사용자 할당 관리 ID 리소스 ID를 가져오려면 Azure Portal에서 관리 ID를 검색합니다. 관리 ID를 찾아 속성으로 이동합니다. UMI 리소스 ID의 예는 /subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity>와 같습니다.
데이터베이스에서 키를 제거하려면 특정 키의 키 사전 값을 null로 전달해야 합니다. 예들 들어 "https://yourvault.vault.azure.net/keys/yourkey1/fd021f84a0d94d43b8ef33154bca0000": null입니다.
Azure SQL Database에서 데이터베이스 수준 고객 관리형 키 설정 보기
다음은 데이터베이스에 대한 데이터베이스 수준 고객 관리형 키를 검색하는 예제입니다. ARM 리소스(Microsoft.Sql/servers/databases)는 기본값으로 데이터베이스에 구성된 TDE 보호기 및 관리 ID만 표시합니다. 키의 전체 목록을 확장하려면 -ExpandKeyList 매개 변수를 사용합니다. 또한 필터(예: -KeysFilter "current") 및 특정 시점 값(예: 2023-01-01)을 사용하여 사용된 현재 키와 과거 특정 시점에 사용된 키를 검색할 수 있습니다. 이 필터는 서버 수준 쿼리가 아닌, 개별 데이터베이스 쿼리에서만 지원됩니다.
Azure Portal에서 데이터베이스 수준 고객 관리형 키를 보려면 SQL Database 리소스의 데이터 암호화 메뉴로 이동합니다.
Azure CLI의 현재 릴리스 설치에 대한 자세한 내용은 Azure CLI 설치 문서를 참조하세요.
# Retrieve the basic database level customer-managed key settings from a database
az sql db show --resource-group $resourceGroupName --server $serverName --name mySampleDatabase
# Retrieve the basic database level customer-managed key settings from a database and all the keys ever added
az sql db show --resource-group $resourceGroupName --server $serverName --name mySampleDatabase --expand-keys
# Retrieve the basic database level customer-managed key settings from a database and the current keys in use
az sql db show --resource-group $resourceGroupName --server $serverName --name mySampleDatabase --expand-keys --keys-filter current
# Retrieve the basic database level customer-managed key settings from a database and the keys in use at a particular point in time
az sql db show --resource-group $resourceGroupName --server $serverName --name mySampleDatabase --expand-keys --keys-filter 01-01-2015
# Retrieve all the databases in a server to check which ones are configured with database level customer-managed keys
az sql db list --resource-group $resourceGroupName --server $serverName
# Retrieve the basic database level customer-managed key settings from a database
Get-AzSqlDatabase -ResourceGroupName <ResourceGroupName> -ServerName <ServerName> -DatabaseName <DatabaseName>
# Retrieve the basic database level customer-managed key settings from a database and all the keys ever added
Get-AzSqlDatabase -ResourceGroupName <ResourceGroupName> -ServerName <ServerName> -DatabaseName <DatabaseName> -ExpandKeyList
# Retrieve the basic database level customer-managed key settings from a database and the current keys in use
Get-AzSqlDatabase -ResourceGroupName <ResourceGroupName> -ServerName <ServerName> -DatabaseName <DatabaseName> -ExpandKeyList -KeysFilter "current"
# Retrieve the basic database level customer-managed key settings from a database and the keys in use at a particular point in time
Get-AzSqlDatabase -ResourceGroupName <ResourceGroupName> -ServerName <ServerName> -DatabaseName <DatabaseName> -ExpandKeyList -KeysFilter '2023-02-03 00:00:00'
# Retrieve all the databases in a server to check which ones are configured with database level customer-managed keys
Get-AzSqlDatabase -resourceGroupName <ResourceGroupName> -ServerName <ServerName> | Select DatabaseName, EncryptionProtector
GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/servers/{serverName}/databases/{databaseName}?api-version=2022-08-01-preview
데이터베이스에서 기본 데이터베이스 수준 고객 관리형 키 설정 및 추가된 모든 키 검색
GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/servers/{serverName}/databases/{databaseName}?api-version=2022-08-01-preview&$expand=keys
데이터베이스에서 기본 데이터베이스 수준 고객 관리형 키 설정 및 사용 중인 현재 키 검색
GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/servers/{serverName}/databases/{databaseName}?api-version=2022-08-01-preview&$expand=keys($filter=pointInTime('current'))
데이터베이스에서 기본 데이터베이스 수준 고객 관리형 키 설정 및 특정 시점에 사용 중인 키 검색
GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/servers/{serverName}/databases/{databaseName}?api-version=2022-08-01-preview&$expand=keys($filter=pointInTime('2023-02-04T01:57:42.49Z'))
논리 서버의 모든 키 나열
서버 아래 각 데이터베이스에서 사용하는 모든 키(기본 보호기 포함)의 목록을 가져오려면 키 필터를 사용하여 개별적으로 쿼리해야 합니다. 다음은 논리 서버에서 각 키를 나열하는 PowerShell 쿼리의 예제입니다.
Azure Portal에서 SQL Database 리소스를 찾습니다. SQL Database 리소스를 선택한 후 보안 설정에서 데이터 암호화 메뉴의 투명한 데이터 암호화 탭으로 이동합니다. 데이터베이스가 Azure Key Vault에 대한 액세스 권한을 유실한 경우 키 유효성 다시 검사 버튼이 나타나고, 기존 키 다시 시도를 선택하여 기존 키의 유효성을 다시 검사하거나 백업 키 선택을 선택하여 다른 키의 유효성을 다시 검사할 수 있습니다.
Azure CLI의 현재 릴리스 설치에 대한 자세한 내용은 Azure CLI 설치 문서를 참조하세요.
az sql db tde key revalidate --resource-group $resourceGroupName --server $serverName --database mySampleDatabase
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/servers/{serverName}/databases/{databaseName}/encryptionProtector/current/revalidate?api-version=2022-08-01-preview
Azure SQL Database에서 데이터베이스 수준 고객 관리형 키 되돌리기
데이터베이스 수준 CMK로 구성된 데이터베이스는 다음 명령을 사용하여 서비스 관리형 키로 서버가 구성된 경우 서버 수준 암호화로 되돌릴 수 있습니다.
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/servers/{serverName}/databases/{databaseName}/encryptionProtector/current/revert?api-version=2022-08-01-preview