Share via


Azure CLI를 사용하여 Azure Database for PostgreSQL 단일 서버에 대한 데이터 암호화

적용 대상: Azure Database for PostgreSQL - 단일 서버

Important

Azure Database for PostgreSQL - 단일 서버는 곧 사용 중지됩니다. Azure Database for PostgreSQL - 유연한 서버로 업그레이드하는 것이 좋습니다. Azure Database for PostgreSQL - 유연한 서버로 마이그레이션하는 방법에 대한 자세한 내용은 Azure Database for PostgreSQL 단일 서버에 대한 새로운 소식을 참조하세요.

Azure CLI를 사용하여 Azure Database for PostgreSQL 단일 서버에 대한 데이터 암호화를 설정하고 관리하는 방법을 알아봅니다.

Azure CLI에 대한 사전 요구 사항

  • Azure 구독 및 해당 구독에 대한 관리자 권한이 있어야 합니다.

  • 고객 관리형 키에 사용할 키 자격 증명 모음 및 키를 만듭니다. 또한 Key Vault에서 보호 제거 및 일시 삭제를 사용하도록 설정합니다.

    az keyvault create -g <resource_group> -n <vault_name> --enable-soft-delete true --enable-purge-protection true
    
  • 만든 Azure Key Vault에서 Azure Database for PostgreSQL 단일 서버의 데이터 암호화에 사용할 키를 만듭니다.

    az keyvault key create --name <key_name> -p software --vault-name <vault_name>
    
  • 기존 Key Vault를 사용하려면 고객 관리형 키로 사용할 다음 속성이 있어야 합니다.

    • 일시 삭제

      az resource update --id $(az keyvault show --name \ <key_vault_name> -o tsv | awk '{print $1}') --set \ properties.enableSoftDelete=true
      
    • 제거 방지

      az keyvault update --name <key_vault_name> --resource-group <resource_group_name>  --enable-purge-protection true
      
  • 고객 관리형 키로 사용하려면 키에 다음 특성이 있어야 합니다.

    • 만료 날짜 없음
    • 사용 안 함 없음
    • 가져오기, 래핑래핑 해제 작업 수행

키 작업에 대한 올바른 사용 권한 설정

  1. Azure Database for PostgreSQL 단일 서버에 대한 관리 ID를 가져오는 방법에는 두 가지가 있습니다.

    관리 ID를 사용하여 새 Azure Database for PostgreSQL 서버를 만듭니다.

    az postgres server create --name <server_name> -g <resource_group> --location <location> --storage-size <size>  -u <user> -p <pwd> --backup-retention <7> --sku-name <sku name> --geo-redundant-backup <Enabled/Disabled> --assign-identity
    

    기존 Azure Database for PostgreSQL 서버를 업데이트하여 관리 ID를 가져옵니다.

    az postgres server update --resource-group <resource_group> --name <server_name> --assign-identity
    
  2. PostgreSQL 단일 서버의 이름인 보안 주체에 대한 주요 사용 권한(가져오기, 래핑, 래핑 해제)을 설정합니다.

    az keyvault set-policy --name -g <resource_group> --key-permissions get unwrapKey wrapKey --object-id <principal id of the server>
    

Azure Database for PostgreSQL 단일 서버에 대한 데이터 암호화 설정

  1. Azure Key Vault에서 만든 키를 사용하여 Azure Database for PostgreSQL 단일 서버에 대한 데이터 암호화를 사용하도록 설정합니다.

    az postgres server key create --name <server_name> -g <resource_group> --kid <key_url>
    

    키 url: https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>

복원 또는 복제본 서버에 데이터 암호화 사용

Key Vault에 저장된 고객 관리형 키를 사용하여 Azure Database for PostgreSQL Single 서버를 암호화한 후에는 새로 만든 서버 복사본도 암호화됩니다. 로컬 또는 지역 복원 작업을 통해 또는 복제본(로컬/영역 간) 작업을 통해 새 복사본을 만들 수 있습니다. 따라서 암호화된 PostgreSQL 단일 서버의 경우 다음 단계를 사용하여 암호화된 복원된 서버를 만들 수 있습니다.

복원/복제 서버 만들기

서버를 복원하고 나면 복원된 서버의 데이터 암호화 유효성을 다시 검사합니다.

  • 복제본 서버에 대한 ID를 할당합니다.
az postgres server update --name  <server name>  -g <resource_group> --assign-identity
  • 복원/복제본 서버에 사용해야 하는 기존 키를 가져옵니다.
az postgres server key list --name  '<server_name>'  -g '<resource_group_name>'
  • 복원/복제본 서버의 새 ID에 대한 정책을 설정합니다.
az keyvault set-policy --name <keyvault> -g <resource_group> --key-permissions get unwrapKey wrapKey --object-id <principl id of the server returned by the step 1>
  • 암호화 키를 사용하여 복원/복제 서버의 유효성을 다시 검사합니다.
az postgres server key create –name  <server name> -g <resource_group> --kid <key url>

Azure Database for PostgreSQL 단일 서버에 사용되는 키에 대한 추가 기능

사용된 키를 가져옵니다.

az postgres server key show --name <server name>  -g <resource_group> --kid <key url>

키 url: https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>

사용된 키를 나열합니다.

az postgres server key list --name  <server name>  -g <resource_group>

사용 중인 키를 드롭합니다.

az postgres server key delete -g <resource_group> --kid <key url> 

Azure Resource Manager 템플릿을 사용하여 데이터 암호화 사용

Azure Portal 외에도 새 서버 및 기존 서버에 대해 Azure Resource Manager 템플릿을 사용하여 Azure Database for PostgreSQL 단일 서버에서 데이터 암호화를 사용하도록 설정할 수 있습니다.

기존 서버의 경우

또한 Azure Resource Manager 템플릿을 사용하여 기존 Azure Database for PostgreSQL 단일 서버에서 데이터 암호화를 사용하도록 설정할 수 있습니다.

  • 앞서 properties 개체의 Uri 속성 아래에서 복사한 Azure Key Vault 키의 리소스 ID를 제공합니다.

  • API 버전으로 2020-01-01-preview를 사용합니다.

{
  "$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string"
    },
    "serverName": {
      "type": "string"
    },
    "keyVaultName": {
      "type": "string",
      "metadata": {
        "description": "Key vault name where the key to use is stored"
      }
    },
    "keyVaultResourceGroupName": {
      "type": "string",
      "metadata": {
        "description": "Key vault resource group name where it is stored"
      }
    },
    "keyName": {
      "type": "string",
      "metadata": {
        "description": "Key name in the key vault to use as encryption protector"
      }
    },
    "keyVersion": {
      "type": "string",
      "metadata": {
        "description": "Version of the key in the key vault to use as encryption protector"
      }
    }
  },
  "variables": {
    "serverKeyName": "[concat(parameters('keyVaultName'), '_', parameters('keyName'), '_', parameters('keyVersion'))]"
  },
  "resources": [
    {
      "type": "Microsoft.DBforPostgreSQL/servers",
      "apiVersion": "2017-12-01",
      "kind": "",
      "location": "[parameters('location')]",
      "identity": {
        "type": "SystemAssigned"
      },
      "name": "[parameters('serverName')]",
      "properties": {
      }
    },
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2019-05-01",
      "name": "addAccessPolicy",
      "resourceGroup": "[parameters('keyVaultResourceGroupName')]",
      "dependsOn": [
        "[resourceId('Microsoft.DBforPostgreSQL/servers', parameters('serverName'))]"
      ],
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "resources": [
            {
              "type": "Microsoft.KeyVault/vaults/accessPolicies",
              "name": "[concat(parameters('keyVaultName'), '/add')]",
              "apiVersion": "2018-02-14-preview",
              "properties": {
                "accessPolicies": [
                  {
                    "tenantId": "[subscription().tenantId]",
                    "objectId": "[reference(resourceId('Microsoft.DBforPostgreSQL/servers/', parameters('serverName')), '2017-12-01', 'Full').identity.principalId]",
                    "permissions": {
                      "keys": [
                        "get",
                        "wrapKey",
                        "unwrapKey"
                      ]
                    }
                  }
                ]
              }
            }
          ]
        }
      }
    },
    {
      "name": "[concat(parameters('serverName'), '/', variables('serverKeyName'))]",
      "type": "Microsoft.DBforPostgreSQL/servers/keys",
      "apiVersion": "2020-01-01-preview",
      "dependsOn": [
        "addAccessPolicy",
        "[resourceId('Microsoft.DBforPostgreSQL/servers', parameters('serverName'))]"
      ],
      "properties": {
        "serverKeyType": "AzureKeyVault",
        "uri": "[concat(reference(resourceId(parameters('keyVaultResourceGroupName'), 'Microsoft.KeyVault/vaults/', parameters('keyVaultName')), '2018-02-14-preview', 'Full').properties.vaultUri, 'keys/', parameters('keyName'), '/', parameters('keyVersion'))]"
      }
    }
  ]
}

다음 단계

데이터 암호화에 대한 자세한 내용은 고객 관리형 키를 사용하는 Azure Database for PostgreSQL 단일 서버 데이터 암호화를 참조하세요.