이 문서에서는 Azure Key Vault에서 TDE 보호기를 사용하는 서버에 대한 키 회전을 설명합니다. 서버의 논리적 TDE 보호기를 회전한다는 것은 서버의 데이터베이스를 보호하는 새 비대칭 키로 전환한다는 의미입니다. 키 회전은 온라인 작업이며, 전체 데이터베이스가 아닌 데이터베이스의 데이터 암호화 키를 단지 해독하고 다시 암호화하는 작업이기 때문에 완료되는 데 몇 초밖에 걸리지 않습니다.
이 문서에서는 서버에서 TDE 보호기를 회전하는 자동화된 방법과 수동 방법을 둘 다 설명합니다.
TDE 보호기 회전 시 중요한 고려 사항
TDE 보호기가 변경/순환되면 백업된 로그 파일을 포함하여 데이터베이스의 이전 백업이 최신 TDE 보호기를 사용하도록 업데이트되지 않습니다. Key Vault에서 TDE 보호기로 암호화된 백업을 복원하려면 대상 서버에서 키 자료를 사용할 수 있는지 확인합니다. 따라서 데이터베이스 백업을 복원할 수 있도록 모든 이전 버전의 TDE 보호기를 Azure AKV(Key Vault)에 보관하는 것이 좋습니다.
CMK(고객 관리형 키)에서 서비스 관리형 키로 전환하는 경우에도 이전에 사용한 모든 키는 AKV에 보관합니다. 이렇게 하면 백업된 로그 파일을 포함한 데이터베이스 백업이 AKV에 저장된 TDE 보호기로 복원될 수 있습니다.
이전 백업 외에도 트랜잭션 로그 파일은 이전 TDE 보호기에 대한 액세스가 필요할 수도 있습니다. 이전 키가 필요한 나머지 로그가 있는지 확인하려면 키 순환을 수행한 후 sys.dm_db_log_info DMV(동적 관리 뷰)를 사용합니다. 이 DMV는 VLF의 암호화 키 지문과 함께 트랜잭션 로그의 VLF(가상 로그 파일)에 대한 정보를 반환합니다.
이전 키는 AKV에 보관해야 하며 데이터베이스에 대한 백업 보존 정책의 백업으로 구성된 백업 보존 기간에 따라 서버에서 사용할 수 있어야 합니다. 이렇게 하면 서버의 모든 LTR(장기 보존) 백업을 이전 키를 사용하여 계속 복원할 수 있습니다.
참고
Azure Synapse Analytics에서 일시 중지된 전용 SQL 풀은 키를 회전하기 전에 반드시 다시 시작해야 합니다.
이 문서는 Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics(전용 SQL 풀(이전의 SQL DW))에 적용됩니다. Synapse 작업 영역 내의 전용 SQL 풀을 위한 TDE(투명한 데이터 암호화)에 관한 설명서는 Azure Synapse Analytics 암호화를 참조하세요.
중요
롤오버 후 키의 이전 버전은 삭제하지 마세요. 키가 롤오버될 때 이전 데이터베이스 백업, 백업된 로그 파일 및 트랜잭션 로그 파일과 같은 일부 데이터는 여전히 이전 키로 암호화됩니다.
사전 요구 사항
이 방법 가이드에서는 이미 Azure SQL Database나 Azure Synapse Analytics에 대해 Azure Key Vault의 키를 TDE 보호기로 사용하고 있다고 가정합니다. BYOK 지원을 통한 투명한 데이터 암호화를 참조하세요.
Azure PowerShell이 설치되어 작동해야 합니다.
팁
권장 선택 사항 - HSM(하드웨어 보안 모듈)이나 로컬 키 저장소의 TDE 보호기에 대한 키 자료를 먼저 만들고 키 자료를 Azure Key Vault로 가져옵니다. HSM(하드웨어 보안 모듈) 및 Key Vault 사용 지침에 따라 자세히 알아봅니다.
서버에 대한 TDE 보호기를 구성할 때 Azure Portal에서 또는 아래 PowerShell이나 Azure CLI 명령을 통해 TDE 보호기에 대한 자동 순환을 사용하도록 설정할 수 있습니다. 사용하도록 설정하면 서버 또는 데이터베이스는 TDE 보호기로 사용되는 키의 새 버전에 대해 키 자격 증명 모음을 지속적으로 확인합니다. 새 버전의 키가 감지되면 서버 또는 데이터베이스의 TDE 보호기가 24시간 이내에 최신 키 버전으로 자동 순환됩니다.
서버 또는 관리형 인스턴스의 자동 순환을 Azure Key Vault의 자동 키 순환과 함께 사용하여 TDE 키에 대한 엔드 투 엔드 제로 터치 순환을 사용하도록 설정할 수 있습니다.
참고 항목
서버 또는 관리되는 인스턴스에 지역 복제가 구성된 경우 자동 회전을 사용하도록 설정하기 전에 여기에 설명된 대로 추가 지침을 따라야 합니다.
az sql server tde-key set --server-key-type AzureKeyVault
--auto-rotation-enabled true
[--kid] <keyVaultKeyId>
[--resource-group] <SQLDatabaseResourceGroupName>
[--server] <logicalServerName>
az sql mi tde-key set --server-key-type AzureKeyVault
--auto-rotation-enabled true
[--kid] <keyVaultKeyId>
[--resource-group] <ManagedInstanceGroupName>
[--managed-instance] <ManagedInstanceName>
데이터베이스 수준에서 자동 키 순환
Azure SQL Database의 데이터베이스 수준에서 자동 키 순환을 사용하도록 설정할 수도 있습니다. 이는 서버의 데이터베이스 중 하나 또는 하위 집합에 대해서만 자동 키 순환을 사용하도록 설정하려는 경우에 유용합니다. 자세한 내용은 데이터베이스 수준 고객 관리형 키를 사용하는 TDE에 대한 ID 및 키 관리를 참조하세요.
PowerShell을 사용하여 데이터베이스 수준에서 TDE 보호기에 자동 순환을 사용하도록 설정하려면 다음 명령을 참조하세요. -EncryptionProtectorAutoRotation 매개 변수를 사용하여 자동 키 순환을 사용하려면 $true로 설정하거나 자동 키 순환을 사용하지 않도록 하려면 $false로 설정합니다.
Azure CLI를 사용하여 데이터베이스 수준에서 TDE 보호기에 자동 순환을 사용하도록 설정하려면 다음 명령을 참조하세요. --encryption-protector-auto-rotation 매개 변수를 사용하여 자동 키 순환을 사용하려면 True로 설정하거나 자동 키 순환을 사용하지 않도록 하려면 False로 설정합니다.
az sql db update --resource-group <resource_group_name> --server <server_name> --name <database_name> --encryption-protector-auto-rotation True
지역 복제 구성에 대한 자동 키 순환
주 서버가 CMK 기반 TDE를 사용하도록 설정된 Azure SQL Database 지역 복제 구성에서 보조 서버도 주 서버에서 사용되는 것과 동일한 키를 사용하여 CMK 기반 TDE를 사용하도록 구성해야 합니다.
고객 관리형 키 옵션을 선택하고 TDE 보호기로 사용할 키 자격 증명 모음 및 키를 선택합니다.
키 자동 회전 확인란을 선택합니다.
저장을 선택합니다.
보조 서버에 대한 투명한 데이터 암호화 섹션을 찾습니다.
고객 관리형 키 옵션을 선택하고 TDE 보호기로 사용할 키 자격 증명 모음 및 키를 선택합니다. 주 서버에 사용한 것과 동일한 키를 사용합니다.
이 키를 기본 TDE 보호기로 설정을 선택 취소합니다.
저장을 선택합니다.
키가 주 서버에서 순환되면 보조 서버로 자동 전송됩니다.
참고 항목
주 서버에서 동일한 키 자격 증명 모음 키를 보조 서버의 기본 TDE 보호기로 사용하는 경우 두 서버 모두에 대해 자동 회전 키가 사용하도록 설정되어 있는지 확인합니다. 이렇게 하지 않으면 자동 회전 워크플로가 오류 상태가 되며 추가 수동 키 회전 작업을 방지할 수 있습니다.
# add the key from Key Vault to the secondary server
Add-AzSqlServerKeyVaultKey -KeyId <keyVaultKeyId> -ServerName <logicalServerName> -ResourceGroup <SQLDatabaseResourceGroupName>
첫 번째 단계에서와 동일한 키를 주 서버에 추가합니다.
# add the key from Key Vault to the primary server
Add-AzSqlServerKeyVaultKey -KeyId <keyVaultKeyId> -ServerName <logicalServerName> -ResourceGroup <SQLDatabaseResourceGroupName>
Azure Portal에서 CMK 기반 TDE를 구성할 때 다른 키 자격 증명 모음 키를 사용하여 주 및 보조 서버를 구성할 수 있습니다. Azure Portal에서 주 서버를 보호하는 데 사용되는 키가 보조 서버에 복제된 주 데이터베이스를 보호하는 것과 동일한 키인지 확실하지 않습니다. 그러나 PowerShell, Azure CLI 또는 REST API를 사용하여 서버에서 사용되는 키에 대한 세부 정보를 가져올 수 있습니다. 이는 자동 순환된 키가 주 서버에서 보조 서버로 전송됨을 보여줍니다.
다음은 PowerShell 명령을 사용하여 키 순환 후 주 서버에서 보조 서버로 전송되는 키를 검사하는 예제입니다.
보조 서버에서 기본 TDE 보호기가 주 서버와 다른 키를 사용하는 경우 두 개 이상의 키가 표시됩니다. 첫 번째 키는 기본 TDE 보호기이고 두 번째 키는 복제된 데이터베이스를 보호하는 데 사용되는 주 서버에서 사용된 키입니다.
키가 주 서버에서 순환되면 보조 서버로 자동 전송됩니다. 주 서버에서 Get-AzSqlServerKeyVaultKey를 다시 실행하려는 경우 두 개의 키가 표시됩니다. 첫 번째 키는 원래 키이고 두 번째 키는 키 순환의 일부로 생성된 현재 키입니다.
보조 서버에서 Get-AzSqlServerKeyVaultKey 명령을 실행하면 주 서버에 있는 것과 동일한 키도 표시됩니다. 그러면 주 서버의 순환된 키가 보조 서버로 자동 전송되고 데이터베이스 복제본(replica)을 보호하는 데 사용됩니다.
수동 키 회전
수동 키 회전은 다음의 명령을 사용하여 새로운 키를 추가합니다. 새로운 키는 새로운 키 이름이나 심지어 다른 키 자격 증명 모음 아래에 위치할 수 있습니다. 이 방법을 사용하면 고가용성 및 지리적으로 분산된 시나리오를 지원하기 위해 서로 다른 키 자격 증명 모음에 동일한 키를 추가할 수 있습니다. 수동 키 회전은 Azure Portal을 사용하여 수행할 수도 있습니다.
수동 키 회전을 사용하면 (수동으로 또는 키 자격 증명 모음의 자동 키 회전 정책을 통해) 키 자격 증명 모음에서 새 키 버전이 생성될 때 동일한 키를 서버의 TDE 보호기로 수동으로 설정해야 합니다.
# add the new key from Key Vault to the server
Add-AzSqlServerKeyVaultKey -KeyId <keyVaultKeyId> -ServerName <logicalServerName> -ResourceGroup <SQLDatabaseResourceGroupName>
# set the key as the TDE protector for all resources under the server
Set-AzSqlServerTransparentDataEncryptionProtector -Type AzureKeyVault -KeyId <keyVaultKeyId> `
-ServerName <logicalServerName> -ResourceGroup <SQLDatabaseResourceGroupName>
# add the new key from Key Vault to the managed instance
Add-AzSqlInstanceKeyVaultKey -KeyId <keyVaultKeyId> -InstanceName <ManagedInstanceName> -ResourceGroup <ManagedInstanceResourceGroupName>
# set the key as the TDE protector for all resources under the managed instance
Set-AzSqlInstanceTransparentDataEncryptionProtector -Type AzureKeyVault -KeyId <keyVaultKeyId> `
-InstanceName <ManagedInstanceName> -ResourceGroup <ManagedInstanceResourceGroupName>
# add the new key from Key Vault to the server
az sql server key create --kid <keyVaultKeyId> --resource-group <SQLDatabaseResourceGroupName> --server <logicalServerName>
# set the key as the TDE protector for all resources under the server
az sql server tde-key set --server-key-type AzureKeyVault --kid <keyVaultKeyId> --resource-group <SQLDatabaseResourceGroupName> --server <logicalServerName>
# add the new key from Key Vault to the managed instance
az sql mi key create --kid <keyVaultKeyId> --resource-group <Managed InstanceResourceGroupName> --managed-instance <ManagedInstanceName>
# set the key as the TDE protector for all resources under the managed instance
az sql mi tde-key set --server-key-type AzureKeyVault --kid <keyVaultKeyId> --resource-group <ManagedInstanceResourceGroupName> --managed-instance <ManagedInstanceName>
az sql server tde-key set --server-key-type AzureKeyVault --kid <keyVaultKeyId> --resource-group <SQLDatabaseResourceGroupName> --server <logicalServerName>
TDE 보호기를 BYOK 모드에서 Microsoft 관리로 전환하려면:
az sql server tde-key set --server-key-type ServiceManaged --resource-group <SQLDatabaseResourceGroupName> --server <logicalServerName>
az sql mi tde-key set --server-key-type AzureKeyVault --kid <keyVaultKeyId> --resource-group <ManagedInstanceResourceGroupName> --managed-instance <ManagedInstanceName>
TDE 보호기를 BYOK 모드에서 Microsoft 관리로 전환하려면:
az sql mi tde-key set --server-key-type ServiceManaged --resource-group <ManagedInstanceResourceGroupName> --managed-instance <ManagedInstanceName>