Azure Arc 지원 SQL Managed Instance에서 투명한 데이터 암호화 사용(미리 보기)

이 문서에서는 Azure Arc 지원 SQL Managed Instance에서 미사용 TDE(투명한 데이터 암호화)를 사용하거나 사용하지 않도록 설정하는 방법을 설명합니다. 이 문서에서 관리되는 인스턴스라는 용어는 Azure Arc에서 사용하도록 설정된 SQL Managed Instance의 배포를 의미하며 TDE 사용/사용 안 함은 관리되는 인스턴스에서 실행되는 모든 데이터베이스에 적용됩니다.

TDE에 대한 자세한 내용은 투명한 데이터 암호화를 참조하세요.

TDE 기능을 켜면 다음을 수행합니다.

  • 이제 기존의 모든 데이터베이스가 자동으로 암호화됩니다.
  • 새로 만든 모든 데이터베이스는 자동으로 암호화됩니다.

참고 항목

미리 보기 기능으로, 이 문서에 제시된 기술에는 Microsoft Azure 미리 보기에 대한 보충 사용 약관이 적용됩니다.

최신 업데이트는 릴리스 정보에서 확인할 수 있습니다.

필수 조건

이 문서를 진행하기 전에 Azure Arc 리소스를 통해 사용하도록 설정된 SQL Managed Instance를 만들고 연결해야 합니다.

제한 사항

자동 TDE를 사용하도록 설정하면 다음과 같은 제한 사항이 적용됩니다.

  • 범용 계층만 지원됩니다.
  • 장애 조치(failover) 그룹은 지원되지 않습니다.

TDE를 사용하도록 설정된 관리되는 인스턴스 만들기(Azure CLI)

다음 예제에서는 TDE가 활성화된 하나의 복제본을 사용하여 Azure Arc 지원 SQL Managed Instance를 만듭니다.

az sql mi-arc create --name sqlmi-tde --k8s-namespace arc --tde-mode ServiceManaged --use-k8s

관리되는 인스턴스에서 TDE 켜기

Arc 지원 SQL Managed Instance에서 TDE를 사용하도록 설정하면 데이터 서비스에서 자동으로 다음 작업을 수행합니다.

  1. master 데이터베이스에 서비스 관리형 데이터베이스 마스터 키를 추가합니다.
  2. 서비스 관리형 인증서 보호기를 추가합니다.
  3. 관리되는 인스턴스의 모든 데이터베이스에 연결된 DEK(데이터베이스 암호화 키)를 추가합니다.
  4. 관리되는 인스턴스의 모든 데이터베이스에서 암호화를 사용하도록 설정합니다.

Azure Arc TDE에서 사용하도록 설정된 SQL Managed Instance를 다음 두 가지 모드 중 하나로 설정할 수 있습니다.

  • 서비스 관리
  • 고객 관리

서비스 관리 모드에서 TDE를 사용하려면 관리되는 인스턴스가 서비스 관리형 데이터베이스 마스터 키와 서비스 관리형 서버 인증서를 사용해야 합니다. 이러한 자격 증명은 서비스 관리형 TDE를 사용하도록 설정하면 자동으로 만들어집니다.

고객 관리 모드에서 TDE는 서비스 관리형 데이터베이스 마스터 키를 사용하고 서버 인증서에 제공하는 키를 사용합니다. 고객 관리형 키를 구성하려면 다음을 수행합니다.

  1. 인증서를 만듭니다.
  2. 인증서를 인스턴스와 동일한 Kubernetes 네임스페이스에 비밀로 저장합니다.

Enable

다음 섹션에서는 서비스 관리 모드에서 TDE를 사용하도록 설정하는 방법을 설명합니다.

서비스 관리 모드에서 TDE를 사용하도록 설정하려면 다음 명령을 실행합니다.

az sql mi-arc update --tde-mode ServiceManaged

관리되는 인스턴스에서 TDE 끄기

Arc 지원 SQL Managed Instance에서 TDE를 사용하지 않도록 설정하면 데이터 서비스에서 자동으로 다음 작업을 수행합니다.

  1. 관리되는 인스턴스의 모든 데이터베이스에서 암호화를 사용하지 않도록 설정합니다.
  2. 관리형 인스턴스의 모든 데이터베이스에 연결된 DEK를 삭제합니다.
  3. 서비스 관리형 인증서 보호기를 삭제합니다.
  4. master 데이터베이스에 서비스 관리형 데이터베이스 마스터 키를 삭제합니다.

TDE를 사용하지 않도록 설정하려면 다음을 수행합니다.

az sql mi-arc update --tde-mode Disabled

TDE 자격 증명 백업

관리되는 인스턴스의 자격 증명을 백업하면 자격 증명이 컨테이너 내에 저장됩니다. 영구 볼륨에 자격 증명을 저장하려면 컨테이너에 탑재 경로를 지정합니다. 예: var/opt/mssql/data. 다음 예제에서는 관리되는 인스턴스의 인증서를 백업합니다.

참고 항목

kubectl cp 명령이 Windows에서 실행되는 경우 절대 Windows 경로를 사용할 때 명령이 실패할 수 있습니다. 상대 경로 또는 아래에 지정된 명령을 사용합니다.

  1. 컨테이너에서 /var/opt/mssql/data로 인증서를 백업합니다.

    USE master;
    GO
    
    BACKUP CERTIFICATE <cert-name> TO FILE = '<cert-path>'
    WITH PRIVATE KEY ( FILE = '<private-key-path>',
    ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>');
    

    예시:

    USE master;
    GO
    
    BACKUP CERTIFICATE MyServerCert TO FILE = '/var/opt/mssql/data/servercert.crt'
    WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/servercert.key',
    ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>');
    
  2. 컨테이너에서 파일 시스템으로 인증서를 복사합니다.

    kubectl exec -n <namespace> -c arc-sqlmi <pod-name> -- cat <pod-certificate-path> > <local-certificate-path>
    

    예시:

    kubectl exec -n arc-ns -c arc-sqlmi sql-0 -- cat /var/opt/mssql/data/servercert.crt > $HOME\sqlcerts\servercert.crt
    

  1. 컨테이너에서 파일 시스템으로 프라이빗 키를 복사합니다.

     kubectl exec -n <namespace> -c arc-sqlmi <pod-name> -- cat <pod-private-key-path> > <local-private-key-path>
    

    예시:

    kubectl exec -n arc-ns -c arc-sqlmi sql-0 -- cat /var/opt/mssql/data/servercert.key > $HOME\sqlcerts\servercert.key
    

  1. 컨테이너에서 인증서와 프라이빗 키를 삭제합니다.

    kubectl exec -it --namespace <namespace> --container arc-sqlmi <pod-name> -- bash -c "rm <certificate-path> <private-key-path>
    

    예시:

    kubectl exec -it --namespace arc-ns --container arc-sqlmi sql-0 -- bash -c "rm /var/opt/mssql/data/servercert.crt /var/opt/mssql/data/servercert.key"
    

관리되는 인스턴스에 TDE 자격 증명 복원

자격 증명을 복원하는 방법도 위와 유사합니다. 자격 증명을 컨테이너에 복사하고 나중에 해당 T-SQL을 실행하면 됩니다.

참고 항목

kubectl cp 명령이 Windows에서 실행되는 경우 절대 Windows 경로를 사용할 때 명령이 실패할 수 있습니다. 상대 경로 또는 아래에 지정된 명령을 사용합니다. TDE를 사용하도록 설정하기 전에 수행된 데이터베이스 백업을 복원하려면 SQL Managed Instance TDE를 사용하지 않도록 설정하고, 데이터베이스 백업을 복원하고, TDE를 다시 사용하도록 설정해야 합니다.

  1. 파일 시스템에서 컨테이너로 인증서를 복사합니다.

    type <local-certificate-path> | kubectl exec -i -n <namespace> -c arc-sqlmi <pod-name> -- tee <pod-certificate-path>
    

    예시:

    type $HOME\sqlcerts\servercert.crt | kubectl exec -i -n arc-ns -c arc-sqlmi sql-0 -- tee /var/opt/mssql/data/servercert.crt
    

  1. 파일 시스템에서 컨테이너로 프라이빗 키를 복사합니다.

    type <local-private-key-path> | kubectl exec -i -n <namespace> -c arc-sqlmi <pod-name> -- tee <pod-private-key-path>
    

    예시:

    type $HOME\sqlcerts\servercert.key | kubectl exec -i -n arc-ns -c arc-sqlmi sql-0 -- tee /var/opt/mssql/data/servercert.key
    
  2. /var/opt/mssql/data의 파일 경로를 사용하여 인증서를 만듭니다.

    USE master;
    GO
    
    CREATE CERTIFICATE <certicate-name>
    FROM FILE = '<certificate-path>'
    WITH PRIVATE KEY ( FILE = '<private-key-path>',
        DECRYPTION BY PASSWORD = '<UseStrongPasswordHere>' );
    

    예시:

    USE master;
    GO
    
    CREATE CERTIFICATE MyServerCertRestored
    FROM FILE = '/var/opt/mssql/data/servercert.crt'
    WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/servercert.key',
        DECRYPTION BY PASSWORD = '<UseStrongPasswordHere>' );
    
  3. 컨테이너에서 인증서와 프라이빗 키를 삭제합니다.

    kubectl exec -it --namespace <namespace> --container arc-sqlmi <pod-name> -- bash -c "rm <certificate-path> <private-key-path>
    

    예시:

    kubectl exec -it --namespace arc-ns --container arc-sqlmi sql-0 -- bash -c "rm /var/opt/mssql/data/servercert.crt /var/opt/mssql/data/servercert.key"
    

투명한 데이터 암호화