미사용 Azure Service Bus 데이터를 암호화하기 위한 고객 관리형 키 구성

Azure Service Bus Premium은 Azure SSE(Azure Storage 서비스 암호화)를 사용하여 미사용 데이터 암호화를 제공합니다. Service Bus 프리미엄은 Azure Storage를 사용하여 데이터를 저장합니다. Azure Storage와 함께 저장된 모든 데이터는 Microsoft 관리형 키를 사용하여 암호화됩니다. 사용자 고유의 키(BYOK(Bring Your Own Key) 또는 고객 관리형 키라고도 함)를 사용하는 경우 데이터는 Microsoft 관리형 키를 사용하여 계속 암호화되지만, 그 외의 Microsoft 관리형 키는 고객 관리형 키를 사용하여 암호화됩니다. 이 기능을 사용하면 Microsoft 관리형 키를 암호화하는 데 사용되는 고객 관리형 키에 대한 액세스를 만들고, 회전하고, 사용하지 않도록 설정하고, 해지할 수 있습니다. BYOK 기능을 사용하도록 설정하는 것은 네임스페이스에서 일회성 설정 프로세스입니다.

서비스 쪽 암호화에 대한 고객 관리형 키에는 몇 가지 주의 사항이 있습니다.

  • 이 기능은 Azure Service Bus 프리미엄 계층에서 지원됩니다. 표준 계층 Service Bus 네임스페이스에는 사용하도록 설정할 수 없습니다.
  • 암호화는 새 또는 빈 네임스페이스에서만 사용할 수 있습니다. 네임스페이스에 큐 또는 토픽이 포함된 경우 암호화 작업이 실패합니다.

Azure Key Vault를 사용하여 키를 관리하고 키 사용을 감사할 수 있습니다. 사용자 고유의 키를 만들어 키 자격 증명 모음에 저장하거나 Azure Key Vault API를 사용하여 키를 생성할 수 있습니다. Azure Key Vault에 대한 자세한 내용은 Azure Key Vault란?을 참조하세요.

고객 관리형 키 사용(Azure Portal)

Azure Portal에서 고객 관리형 키를 사용하도록 설정하려면 다음 단계를 수행합니다.

  1. Service Bus Premium 네임스페이스로 이동합니다.

  2. Service Bus 네임스페이스의 설정 페이지에서 암호화를 선택합니다.

  3. 다음 이미지와 같이 미사 용 고객 관리형 키 암호화를 선택합니다.

    Enable customer managed key

키를 사용하여 Key Vault 설정

고객 관리형 키를 사용하도록 설정한 후에는 고객 관리형 키를 Azure Service Bus 네임스페이스와 연결해야 합니다. Service Bus는 Azure Key Vault만 지원합니다. 이전 섹션에서 고객 관리형 키로 암호화 옵션을 사용하도록 설정하는 경우 키를 Azure Key Vault로 가져와야 합니다. 또한 키에는 키에 대해 일시 삭제제거 안 함 구성이 있어야 합니다. 이러한 설정은 PowerShell 또는 CLI를 사용하여 구성할 수 있습니다.

  1. 새로운 키 자격 증명 모음을 만들려면 Azure Key Vault 빠른 시작을 따릅니다. 기존 키를 가져오는 방법에 대한 자세한 내용은 키, 비밀 및 인증서 정보를 참조 하세요.

    Important

    Azure Service Bus에서 고객 관리형 키를 사용하려면 키 자격 증명 모음에 두 가지 필수 속성이 구성되어 있어야 합니다. 바로 일시 삭제제거 안 함입니다. 일시 삭제 속성은 Azure Portal에서 새 키 자격 증명 모음을 만들 때 기본적으로 사용하도록 설정되며, 제거 보호는 선택 사항이므로 Key Vault를 만들 때 선택해야 합니다. 또한 기존 키 자격 증명 모음에서 이러한 속성을 사용하도록 설정해야 하는 경우에는 PowerShell 또는 Azure CLI를 사용해야 합니다.

  2. 자격 증명 모음을 만들 때 일시 삭제 및 제거 보호를 모두 켜려면 az keyvault create 명령을 사용합니다.

    az keyvault create --name contoso-SB-BYOK-keyvault --resource-group ContosoRG --location westus --enable-soft-delete true --enable-purge-protection true
    
  3. 기존 자격 증명 모음에 제거 보호를 추가하려면(이미 일시 삭제를 사용하도록 설정한 경우) az keyvault update 명령을 사용합니다.

    az keyvault update --name contoso-SB-BYOK-keyvault --resource-group ContosoRG --enable-purge-protection true
    
  4. 다음 단계에 따라 키를 만듭니다.

    1. 새 키를 만들려면 설정 아래의 키 메뉴에서 생성/가져오기를 선택합니다.

      Select Generate/Import button

    2. 생성 옵션을 설정하고 키에 이름을 지정합니다.

      Create a key

    3. 이제 이 키를 선택하여 드롭다운 목록에서 암호화하기 위해 Service Bus 네임스페이스와 연결할 수 있습니다.

      Select key from key vault

      참고 항목

      중복성을 위해 최대 3개의 키를 추가할 수 있습니다. 키 중 하나가 만료되었거나 액세스할 수 없는 경우 다른 키가 암호화에 사용됩니다.

    4. 키에 대한 세부 정보를 입력하고 선택을 클릭합니다. 그러면 Microsoft 관리형 키와 사용자의 키(고객 관리형 키)를 암호화할 수 있습니다.

    Important

    지역 재해 복구에 고객 관리형 키를 사용하려는 경우 이 섹션을 검토하세요.

    고객 관리형 키를 사용하여 Microsoft 관리형 키의 암호화를 사용하도록 설정하려면 지정된 Azure KeyVault에서 Service Bus의 관리 ID에 대한 액세스 정책이 설정됩니다. 이렇게 하면 Azure Service Bus 네임스페이스에서 Azure KeyVault에 대한 제어된 액세스가 보장됩니다.

    이 때문에 다음을 수행합니다.

관리 ID

Service Bus 네임스페이스에 할당할 수 있는 관리 ID에는 두 가지 유형이 있습니다.

  • 시스템 할당: Service Bus 네임스페이스에서 직접 관리 ID를 사용하도록 설정할 수 있습니다. 시스템 할당 관리 ID를 사용하도록 설정하면 Microsoft Entra에서 해당 Service Bus 네임스페이스의 수명 주기와 연결된 ID가 만들어집니다. 따라서 네임스페이스가 삭제되면 Azure에서 자동으로 ID를 삭제합니다. 기본적으로 Azure 리소스(네임스페이스)만 이 ID를 사용하여 Microsoft Entra ID에서 토큰을 요청할 수 있습니다.

  • 사용자 할당: 관리 ID를 사용자 할당 ID라고 하는 독립 실행형 Azure 리소스로 만들 수도 있습니다. 사용자 할당 관리 ID를 만들고 하나 이상의 Service Bus 네임스페이스에 할당할 수 있습니다. 사용자가 할당한 관리 ID를 사용하는 경우 ID는 이를 사용하는 리소스와 별도로 관리됩니다. 네임스페이스의 수명 주기와 연결되지 않습니다. 더 이상 필요하지 않은 경우 사용자 할당 ID를 명시적으로 삭제할 수 있습니다.

    자세한 내용은 Azure 리소스에 대한 관리 ID란?을 참조하세요.

시스템 할당 ID를 사용하여 암호화(템플릿)

이 섹션에서는 다음 작업을 수행하는 방법을 보여 줍니다.

  1. 관리 서비스 ID를 사용하여 프리미엄 Service Bus 네임스페이 스를 만듭니다.
  2. 자격 증명 모음을 만들고 서비스 ID에 키 자격 증명 모음에 대한 액세스 권한을 부여합니다.
  3. 키 자격 증명 모음 정보(키/값)를 사용하여 Service Bus 네임스페이스를 업데이트합니다.

관리 서비스 ID를 사용하여 프리미엄 Service Bus 네임스페이스 만들기

이 섹션에서는 Azure Resource Manager 템플릿 및 PowerShell을 사용하여 관리되는 서비스 ID를 사용하여 Azure Service Bus 네임스페이스를 만드는 방법을 보여줍니다.

  1. 관리 서비스 ID를 사용하여 Service Bus 프리미엄 계층 네임스페이스를 만드는 Azure Resource Manager 템플릿을 만듭니다. 파일 이름을 CreateServiceBusPremiumNamespace.json으로 지정합니다.

    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "namespaceName":{
             "type":"string",
             "metadata":{
                "description":"Name for the Namespace."
             }
          },
          "location":{
             "type":"string",
             "defaultValue":"[resourceGroup().location]",
             "metadata":{
                "description":"Specifies the Azure location for all resources."
             }
          }
       },
       "resources":[
          {
             "type":"Microsoft.ServiceBus/namespaces",
             "apiVersion":"2018-01-01-preview",
             "name":"[parameters('namespaceName')]",
             "location":"[parameters('location')]",
             "identity":{
                "type":"SystemAssigned"
             },
             "sku":{
                "name":"Premium",
                "tier":"Premium",
                "capacity":1
             },
             "properties":{
    
             }
          }
       ],
       "outputs":{
          "ServiceBusNamespaceId":{
             "type":"string",
             "value":"[resourceId('Microsoft.ServiceBus/namespaces',parameters('namespaceName'))]"
          }
       }
    }
    
  2. 이름이 CreateServiceBusPremiumNamespaceParams.json인 템플릿 매개 변수 파일을 만듭니다.

    참고 항목

    다음 값을 바꿉니다.

    • <ServiceBusNamespaceName> - Service Bus 네임스페이스의 이름
    • <Location> - Service Bus 네임스페이스의 위치
    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "namespaceName":{
             "value":"<ServiceBusNamespaceName>"
          },
          "location":{
             "value":"<Location>"
          }
       }
    }
    
  3. 다음 PowerShell 명령을 실행하여 템플릿을 배포하여 프리미엄 Service Bus 네임스페이스를 만듭니다. 그런 다음 나중에 사용할 Service Bus 네임스페이스의 ID를 검색합니다. 명령을 실행하기 전에 리소스 그룹의 이름으로 바꿉 {MyRG} 니다.

    $outputs = New-AzResourceGroupDeployment -Name CreateServiceBusPremiumNamespace -ResourceGroupName {MyRG} -TemplateFile ./CreateServiceBusPremiumNamespace.json -TemplateParameterFile ./CreateServiceBusPremiumNamespaceParams.json
    
    $ServiceBusNamespaceId = $outputs.Outputs["serviceBusNamespaceId"].value
    

Key Vault에 Service Bus 네임스페이스 ID 액세스 권한 부여

  1. 다음 명령을 실행하여 보호 제거일시 삭제를 사용하는 키 자격 증명 모음을 만듭니다.

    New-AzureRmKeyVault -Name "{keyVaultName}" -ResourceGroupName {RGName}  -Location "{location}" -EnableSoftDelete -EnablePurgeProtection    
    

    (OR)

    다음 명령을 실행하여 기존 키 자격 증명 모음을 업데이트합니다. 명령을 실행하기 전에 리소스 그룹 및 키 자격 증명 모음 이름의 값을 지정합니다.

    ($updatedKeyVault = Get-AzureRmResource -ResourceId (Get-AzureRmKeyVault -ResourceGroupName {RGName} -VaultName {keyVaultName}).ResourceId).Properties| Add-Member -MemberType "NoteProperty" -Name "enableSoftDelete" -Value "true"-Force | Add-Member -MemberType "NoteProperty" -Name "enablePurgeProtection" -Value "true" -Force
    
  2. Service Bus 네임스페이스의 관리 ID가 키 자격 증명 모음의 키 값에 액세스할 수 있도록 키 자격 증명 모음 액세스 정책을 설정합니다. 이전 섹션의 Service Bus 네임스페이스 ID를 사용합니다.

    $identity = (Get-AzureRmResource -ResourceId $ServiceBusNamespaceId -ExpandProperties).Identity
    
    Set-AzureRmKeyVaultAccessPolicy -VaultName {keyVaultName} -ResourceGroupName {RGName} -ObjectId $identity.PrincipalId -PermissionsToKeys get,wrapKey,unwrapKey,list
    

키 자격 증명 모음에서 고객 관리형 키를 사용하여 Service Bus 네임스페이스의 데이터 암호화

지금까지 다음 단계를 수행했습니다.

  1. 관리 ID를 사용하여 프리미엄 네임스페이스를 만들었습니다.
  2. 키 자격 증명 모음을 만들고 관리형 ID에 키 자격 증명 모음에 대한 액세스 권한을 부여했습니다.

이 단계에서는 키 자격 증명 모음 정보를 사용하여 Service Bus 네임스페이스를 업데이트합니다.

  1. 다음 콘텐츠를 사용하여 UpdateServiceBusNamespaceWithEncryption.json JSON 파일을 만듭니다.

    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "namespaceName":{
             "type":"string",
             "metadata":{
                "description":"Name for the Namespace to be created in cluster."
             }
          },
          "location":{
             "type":"string",
             "defaultValue":"[resourceGroup().location]",
             "metadata":{
                "description":"Specifies the Azure location for all resources."
             }
          },
          "keyVaultUri":{
             "type":"string",
             "metadata":{
                "description":"URI of the KeyVault."
             }
          },
          "keyName":{
             "type":"string",
             "metadata":{
                "description":"KeyName."
             }
          }
       },
       "resources":[
          {
             "type":"Microsoft.ServiceBus/namespaces",
             "apiVersion":"2018-01-01-preview",
             "name":"[parameters('namespaceName')]",
             "location":"[parameters('location')]",
             "identity":{
                "type":"SystemAssigned"
             },
             "sku":{
                "name":"Premium",
                "tier":"Premium",
                "capacity":1
             },
             "properties":{
                "encryption":{
                   "keySource":"Microsoft.KeyVault",
                   "keyVaultProperties":[
                      {
                         "keyName":"[parameters('keyName')]",
                         "keyVaultUri":"[parameters('keyVaultUri')]"
                      }
                   ]
                }
             }
          }
       ]
    }
    
  2. 템플릿 매개 변수 파일 UpdateServiceBusNamespaceWithEncryptionParams.json 만듭니다.

    참고 항목

    다음 값을 바꿉니다.

    • <ServiceBusNamespaceName> - Service Bus 네임스페이스의 이름
    • <Location> - Service Bus 네임스페이스의 위치
    • <KeyVaultName> - 키 자격 증명 모음의 이름
    • <KeyName> - 키 자격 증명 모음의 키 이름
    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "namespaceName":{
             "value":"<ServiceBusNamespaceName>"
          },
          "location":{
             "value":"<Location>"
          },
          "keyName":{
             "value":"<KeyName>"
          },
          "keyVaultUri":{
             "value":"https://<KeyVaultName>.vault.azure.net"
          }
       }
    }
    
  3. 다음 PowerShell 명령을 실행하여 Resource Manager 템플릿을 배포합니다. 명령을 실행하기 전에 리소스 그룹의 이름으로 바꿉 {MyRG} 니다.

    New-AzResourceGroupDeployment -Name UpdateServiceBusNamespaceWithEncryption -ResourceGroupName {MyRG} -TemplateFile ./UpdateServiceBusNamespaceWithEncryption.json -TemplateParameterFile ./UpdateServiceBusNamespaceWithEncryptionParams.json
    

사용자 할당 ID를 사용하여 암호화(템플릿)

  1. 사용자 할당 ID를 만듭니다.
  2. 키 자격 증명 모음을 만들고 액세스 정책을 통해 사용자 할당 ID에 대한 액세스 권한을 부여합니다.
  3. 관리되는 사용자 ID와 키 자격 증명 모음 정보를 사용하여 프리미엄 Service Bus 네임스페이스를 만듭니다.

사용자 할당 ID 만들기

사용자 할당 관리 ID 만들기 문서의 지침에 따라 사용자 할당 ID를 만듭니다. CLI, PowerShell, Azure Resource Manager 템플릿 및 REST를 사용하여 사용자 할당 ID를 만들 수도 있습니다.

참고 항목

네임스페이스에 최대 4 개 사용자 ID를 할당할 수 있습니다. 이러한 연결은 네임스페이스가 삭제되거나 템플릿None에서 identity -> type .에 전달할 때 삭제됩니다.

키 자격 증명 모음 만들기 및 사용자 할당 ID에 대한 액세스 권한 부여

  1. 다음 명령을 실행하여 제거 보호 및 일시 삭제를 사용하는 키 자격 증명 모음을 만듭니다.

    New-AzureRmKeyVault -Name "{keyVaultName}" -ResourceGroupName {RGName} -Location "{location}" -EnableSoftDelete -EnablePurgeProtection           
    

    (OR)

    다음 명령을 실행하여 기존 키 자격 증명 모음을 업데이트합니다. 명령을 실행하기 전에 리소스 그룹 및 키 자격 증명 모음 이름의 값을 지정합니다.

    ($updatedKeyVault = Get-AzureRmResource -ResourceId (Get-AzureRmKeyVault -ResourceGroupName {RGName} -VaultName {keyVaultName}).ResourceId).Properties| Add-Member -MemberType "NoteProperty" -Name "enableSoftDelete" -Value "true"-Force | Add-Member -MemberType "NoteProperty" -Name "enablePurgeProtection" -Value "true" -Force            
    
  2. 다음 PowerShell 명령을 사용하여 사용자 ID에 대한 서비스 주체 ID를 가져옵니다. 이 예제에서는 ud1 암호화에 사용할 사용자 할당 ID입니다.

    $servicePrincipal=Get-AzADServicePrincipal -SearchString "ud1"    
    
  3. 액세스 정책을 할당하여 키 자격 증명 모음에 대한 사용자 할당 ID 액세스 권한을 부여합니다.

    Set-AzureRmKeyVaultAccessPolicy -VaultName {keyVaultName} -ResourceGroupName {RGName} -ObjectId $servicePrincipal.Id -PermissionsToKeys get,wrapKey,unwrapKey,list    
    

    참고 항목

    최대 3개 키를 추가할 수 있지만 암호화에 사용되는 사용자 ID는 모든 키에 대해 동일해야 합니다. 현재 단일 암호화 ID만 지원됩니다.

사용자 ID 및 키 자격 증명 모음 정보를 사용하여 프리미엄 Service Bus 네임스페이스 만들기

이 섹션에서는 Azure Resource Manager 템플릿을 사용하여 다음 작업을 수행하는 방법을 보여 주는 예제를 제공합니다.

  • Service Bus 네임스페이스에 사용자 관리 ID를 할당합니다.

                "identity": {
                    "type": "UserAssigned",
                    "userAssignedIdentities": {
                        "[parameters('identity').userAssignedIdentity]": {}
                    }
                },
    
  • 키 자격 증명 모음에서 키를 지정하고 키에 액세스할 사용자 관리 ID를 지정하여 네임스페이스에서 암호화를 사용하도록 설정합니다.

                    "encryption":{
                       "keySource":"Microsoft.KeyVault",
                       "keyVaultProperties":[
                            {
                                "keyName": "[parameters('keyName')]",
                                "keyVaultUri": "[parameters('keyVaultUri')]",
                                "identity": {
                                    "userAssignedIdentity": "[parameters('identity').userAssignedIdentity]"
                                }
                            }
                       ]
                    }
    
  1. 다음 콘텐츠를 사용하여 CreateServiceBusNamespaceWithUserIdentityAndEncryption.json JSON 파일을 만듭니다.

    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "namespaceName":{
             "type":"string",
             "metadata":{
                "description":"Name for the Namespace to be created in cluster."
             }
          },
          "location":{
             "type":"string",
             "defaultValue":"[resourceGroup().location]",
             "metadata":{
                "description":"Specifies the Azure location for all resources."
             }
          },
          "keyVaultUri":{
             "type":"string",
             "metadata":{
                "description":"URI of the KeyVault."
             }
          },
          "keyName":{
             "type":"string",
             "metadata":{
                "description":"KeyName."
             },
         "identity": {
            "type": "Object",
            "defaultValue": {
                "userAssignedIdentity": ""
            },
            "metadata": {
                "description": "user-assigned identity."
            }
         }
       },
       "resources":[
          {
             "type":"Microsoft.ServiceBus/namespaces",
             "apiVersion":"2021-01-01-preview",
             "name":"[parameters('namespaceName')]",
             "location":"[parameters('location')]",
             "sku":{
                "name":"Premium",
                "tier":"Premium",
                "capacity":1
             },
            "identity": {
                "type": "UserAssigned",
                "userAssignedIdentities": {
                    "[parameters('identity').userAssignedIdentity]": {}
                }
            },
             "properties":{
                "encryption":{
                   "keySource":"Microsoft.KeyVault",
                   "keyVaultProperties":[
                        {
                            "keyName": "[parameters('keyName')]",
                            "keyVaultUri": "[parameters('keyVaultUri')]",
                            "identity": {
                                "userAssignedIdentity": "[parameters('identity').userAssignedIdentity]"
                            }
                        }
                   ]
                }
             }
          }
       ]
    }        
    
  2. 템플릿 매개 변수 파일 CreateServiceBusNamespaceWithUserIdentityAndEncryptionParams.json 만듭니다.

    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "namespaceName":{
             "value":"<ServiceBusNamespaceName>"
          },
          "location":{
             "value":"<Location>"
          },
          "keyVaultUri":{
             "value":"https://<KeyVaultName>.vault.azure.net"
          },
          "keyName":{
             "value":"<KeyName>"
          },
          "identity": {
            "value": {
                "userAssignedIdentity": "/subscriptions/<AZURE SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER MANAGED IDENTITY NAME>"
            }
         }
       }
    }
    

    매개 변수 파일에서 자리 표시자를 적절한 값으로 바꿉니다.

    자리 표시자 value
    <ServiceBusNamespaceName> Service Bus 네임스페이스의 이름입니다.
    <Location> 네임스페이스를 만들 위치입니다.
    <KeyVaultName> Key Vault의 이름입니다.
    <KeyName> 키 자격 증명 모음에 있는 키의 이름입니다.
    <AZURE SUBSCRIPTION ID> Azure 구독 ID.
    <RESOURCE GROUP NAME> 사용자 관리 ID의 리소스 그룹입니다.
    <USER MANAGED IDENTITY NAME> 사용자 관리 ID의 이름입니다.
  3. 다음 PowerShell 명령을 실행하여 Resource Manager 템플릿을 배포합니다. 명령을 실행하기 전에 리소스 그룹의 이름으로 바꿉 {MyRG} 니다.

    New-AzResourceGroupDeployment -Name CreateServiceBusNamespaceWithEncryption -ResourceGroupName {MyRG} -TemplateFile ./ CreateServiceBusNamespaceWithUserIdentityAndEncryption.json -TemplateParameterFile ./ CreateServiceBusNamespaceWithUserIdentityAndEncryptionParams.json        
    

사용자 할당 ID와 시스템 할당 ID 모두 사용

네임스페이스는 시스템 할당 ID와 사용자 할당 ID를 동시에 가질 수 있습니다. 이 경우 type 속성은 다음 예와 같이 SystemAssigned, UserAssigned입니다.

"identity": {
    "type": "SystemAssigned, UserAssigned",
    "userAssignedIdentities": {
        "/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<userIdentity1>" : {}
    }
}

이 시나리오에서는 미사용 데이터를 암호화하기 위해 시스템 할당 ID 또는 사용자 할당 ID를 선택할 수 있습니다.

Resource Manager 템플릿에서 특성을 지정 identity 하지 않으면 시스템 관리 ID가 사용됩니다. 다음은 예제 코드 조각입니다.

"properties":{
   "encryption":{
      "keySource":"Microsoft.KeyVault",
      "keyVaultProperties":[
         {
            "keyName":"[parameters('keyName')]",
            "keyVaultUri":"[parameters('keyVaultUri')]"
         }
      ]
   }
}

암호화에 사용자 관리 ID를 사용하려면 다음 예제를 참조하세요. 특성이 identity 사용자 관리 ID로 설정됩니다.

"properties":{
   "encryption":{
      "keySource":"Microsoft.KeyVault",
      "keyVaultProperties":[
         {
            "keyName":"[parameters('keyName')]",
            "keyVaultUri":"[parameters('keyVaultUri')]",
            "identity": {
                "userAssignedIdentity": "[parameters('identity').userAssignedIdentity]"
            }
         }
      ]
   }
}

데이터의 인프라(이중) 암호화 사용

데이터 보안에 대한 더 높은 수준의 보증이 필요한 경우 이중 암호화라고도 하는 인프라 수준 암호화를 사용할 수 있습니다.

인프라 암호화를 사용하도록 설정하면 Azure Service Bus의 데이터는 두 개의 서로 다른 암호화 알고리즘과 두 개의 서로 다른 키를 사용하여 서비스 수준에서 한 번, 인프라 수준에서 한 번씩 두 번 암호화됩니다. 따라서 Azure Service Bus 데이터의 인프라 암호화는 암호화 알고리즘이나 키 중 하나가 손상될 수 있는 시나리오로부터 보호합니다.

아래와 같이 위의 UpdateServiceBusNamespaceWithEncryption.json 속성으로 requireInfrastructureEncryption Azure Resource Manager 템플릿을 업데이트하여 인프라 암호화를 사용하도록 설정할 수 있습니다.

"properties":{
   "encryption":{
      "keySource":"Microsoft.KeyVault",    
      "requireInfrastructureEncryption":true,         
      "keyVaultProperties":[
         {
            "keyName":"[parameters('keyName')]",
            "keyVaultUri":"[parameters('keyVaultUri')]"
         }
      ]
   }
}

키 회전, 해지 및 캐시

암호화 키 회전

Azure Key Vault 회전 메커니즘을 사용하여 키 자격 증명 모음에서 키를 회전할 수 있습니다. 활성화 및 만료 날짜는 키 회전을 자동화하도록 설정할 수도 있습니다. Service Bus 서비스는 새로운 키 버전을 검색하고 자동으로 이를 사용하기 시작합니다.

키에 대한 액세스 취소

암호화 키에 대한 액세스를 취소해도 Service Bus에서 데이터가 제거되지 않습니다. 그러나 Service Bus 네임스페이스에서 데이터에 액세스할 수 없습니다. 액세스 정책을 통해, 또는 키를 삭제하여 암호화 키를 철회할 수 있습니다. 액세스 정책 및 키 자격 증명 모음에 대한 보안 액세스에서 자격 증명 모음 보안에 대해 자세히 알아봅니다.

암호화 키가 철회되면 암호화된 네임스페이스의 Service Bus 서비스가 작동하지 않게 됩니다. 키에 대한 액세스를 사용하도록 설정하거나 삭제 키가 복원된 경우, 암호화된 Service Bus 네임스페이스의 데이터에 액세스할 수 있도록 Service Bus 서비스에서 키를 선택합니다.

키 캐싱

Service Bus 인스턴스는 5분마다 나열된 암호화 키를 폴링합니다. 다음 폴링까지 5분 후에 캐시하고 사용합니다. 하나 이상의 키를 사용할 수 있다면 큐와 토픽에 액세스할 수 있습니다. 폴링 시점에 나열된 모든 키에 액세스할 수 없는 경우 모든 큐와 토픽을 사용할 수 없게 됩니다.

자세한 내용은 다음과 같습니다.

  • Service Bus 서비스는 5분마다 네임스페이스의 레코드에 나열된 모든 고객 관리형 키를 폴링합니다.
    • 키가 회전된 경우 레코드가 새 키로 업데이트됩니다.
    • 키가 해지된 경우 키는 레코드에서 제거됩니다.
    • 모든 키가 해지된 경우 네임스페이스의 암호화 상태 Revoked로 설정됩니다. Service Bus 네임스페이스에서 데이터에 액세스할 수 없습니다.

지리적 재해 복구 사용 시 고려 사항

지역 재해 복구 - 시스템 할당 ID를 사용한 암호화

고객 관리형 키를 통한 Microsoft 관리형 키의 암호화를 사용하도록 설정하려면 지정한 Azure KeyVault에서 시스템 할당 관리 ID에 대해 액세스 정책을 설정해야 합니다. 이렇게 하면 Azure Service Bus 네임스페이스에서 Azure KeyVault에 대한 제어된 액세스가 보장됩니다. 따라서 다음 단계를 수행해야 합니다.

지역 재해 복구 - 사용자 할당 ID를 사용한 암호화

몇 가지 권장 사항입니다.

  1. 관리 ID를 만들고 관리 ID에 Key Vault 권한을 할당합니다.
  2. ID를 사용자 할당 ID로 추가하고 두 네임스페이스에서 ID를 사용하여 암호화를 사용하도록 설정합니다.
  3. 네임스페이스를 함께 페어링

사용자가 할당한 ID를 통해 Geo-DR(지역 재해 복구)과 암호화를 사용할 수 있는 조건은 다음과 같습니다.

  1. 암호화를 사용하는 기본 네임스페이스와 보조 네임스페이스를 연결하려면 보조 네임스페이스가 이미 사용자가 할당한 ID를 통해 암호화되어 있어야 합니다.
  2. 보조 네임스페이스에 네임스페이스와 연결된 사용자가 할당한 ID가 있더라도 이미 연결된 기본 네임스페이스에서 암호화를 사용할 수 없습니다.

문제 해결

증상

암호화 키가 더 이상 유효하지 않으므로 Service Bus 네임스페이스가 비활성화되었다는 오류가 발생합니다.

원인

만료되었을 수 있는 키의 특정 버전에 연결되는 resource_id 또는 version을 사용할 수 있습니다. 특정 버전이 제공되면 키가 회전되더라도 Service Bus는 해당 버전의 키를 사용합니다.

해결

resource_id 또는 version을 사용하는 대신 resource__versionless_id 또는 versionless_id를 사용합니다.

다음 단계

다음 문서를 참조하세요.