투명 데이터 암호화(TDE) 사용

이 페이지에서는 투명 데이터 암호화(TDE)를 사용하는 방법을 보여줍니다.

다음 섹션에서는 TDE 인증서 사용 방법을 보여줍니다.

시작하기 전에

TDE 인증서를 가져오거나 내보내려면 cloudsql.admin 역할에서 제공되는 cloudsql.instances.manageEncryption Identity and Access Management 권한이 있어야 합니다. 자세한 내용은 Cloud SQL 역할을 참조하세요.

GRANT VIEW ANY DEFINITION TO other_login AS CustomerDbRootRole

외부 TDE 인증서 가져오기

콘솔

Google Cloud 콘솔을 사용하여 TDE 인증서를 가져올 수 없습니다.

gcloud

다음 gcloud sql import를 사용하여 Cloud Storage 버킷에서 인증서를 가져옵니다.

    gcloud sql import tde INSTANCE_NAME \
    --certificate CERTIFICATE_NAME \
    --cert-path=gs://BUCKET_NAME/CERTIFICATE_NAME \
    --pvk-path=gs://BUCKET_NAME/KEY_NAME \
    --prompt-for-pvk-password \
    --pvk-password CERTIFICATE_PASSWORD
    

다음을 바꿉니다.

  • INSTANCE_NAME: TDE 인증서를 가져오려는 Cloud SQL 인스턴스의 이름입니다.
  • CERTIFICATE_NAME: 가져오려는 암호화 인증서의 이름입니다.
  • BUCKET_NAME: 가져오려는 TDE 인증서가 있는 Cloud Storage 버킷의 이름입니다.
  • KEY_NAME: Cloud Storage 버킷과 연결된 암호화 키의 이름입니다.
  • CERTIFICATE_PASSWORD: 인증서 비밀번호입니다.

REST v1

TDE 인증서를 가져오려면 instances.import 메서드를 사용하고 다음 속성을 지정합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: 암호화 인증서를 가져오려는 프로젝트의 이름입니다.
  • INSTANCE_NAME: 암호화 인증서를 가져오려는 Cloud SQL 인스턴스의 이름입니다.
  • TDE_CERTIFICATE_NAME: 가져온 후 사용하려는 암호화 인증서의 이름입니다.
  • CERTIFICATE_NAME: 가져오려는 암호화 인증서의 이름입니다.
  • BUCKET_NAME: 가져오려는 암호화 인증서가 있는 Cloud Storage 버킷의 이름입니다.
  • KEY_NAME: Cloud Storage 버킷과 연결된 암호화 키의 이름입니다.
  • CERTIFICATE_PASSWORD: 인증서 비밀번호입니다.

HTTP 메서드 및 URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_NAME/instances/INSTANCE_NAME/import

JSON 요청 본문:


{
  "importContext":
    {
        "fileType": "TDE",
        "tdeImportOptions":
          {
            "name": "TDE_CERTIFICATE_NAME",
            "certificatePath": "gs://BUCKET_NAME/CERTIFICATE_NAME",
            "privateKeyPath": "gs://BUCKET_NAME/KEY_NAME",
            "privateKeyPassword": "CERTIFICATE_PASSWORD"
          }
    }
}



요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

REST v1beta4

TDE 인증서를 가져오려면 instances.import 메서드를 사용하고 다음 속성을 지정합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: 암호화 인증서를 가져오려는 프로젝트의 이름입니다.
  • INSTANCE_NAME: 암호화 인증서를 가져오려는 Cloud SQL 인스턴스의 이름입니다.
  • TDE_CERTIFICATE_NAME: 가져온 후 사용하려는 암호화 인증서의 이름입니다.
  • CERTIFICATE_NAME: 가져오려는 암호화 인증서의 이름입니다.
  • BUCKET_NAME: 가져오려는 암호화 인증서가 있는 Cloud Storage 버킷의 이름입니다.
  • KEY_NAME: Cloud Storage 버킷과 연결된 암호화 키의 이름입니다.
  • CERTIFICATE_PASSWORD: 인증서 비밀번호입니다.

HTTP 메서드 및 URL:

POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_NAME/instances/INSTANCE_NAME/import

JSON 요청 본문:


{
  "importContext":
    {
        "fileType": "TDE",
        "tdeImportOptions":
          {
            "name": "TDE_CERTIFICATE_NAME",
            "certificatePath": "gs://BUCKET_NAME/CERTIFICATE_NAME",
            "privateKeyPath": "gs://BUCKET_NAME/KEY_NAME",
            "privateKeyPassword": "CERTIFICATE_PASSWORD"
          }
    }
}



요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

가져온 각 TDE 인증서에는 다음 형식의 고유한 이름이 할당됩니다.

  gcloud_tde_user_CERTIFICATE_NAME_GENERATED_GUID

인스턴스에 PITR(point-in-time recovery)이 사용 설정되었으면 가져온 TDE 인증서를 사용할 수 있을 때까지 몇 분 정도 걸릴 수 있습니다.

TDE 인증서 순환

  • msdb.dbo.gcloudsql_rotate_tde_certificate 저장 프러시저를 사용하여 가져온 TDE 인증서를 순환할 수 있습니다. 이 프로시저는 sqlserver 사용자 또는 sqlserver 사용자가 권한을 부여한 대상 사용자가 다음과 비슷한 호출을 사용하여 호출할 수 있습니다.

        EXEC msdb.dbo.gcloudsql_rotate_tde_certificate TDE_CERTIFICATE_NAME
        

TDE 인증서 삭제

  • 사용자 TDE 인증서는 최대 10개까지 가져올 수 있습니다. 더 가져와야 하는 경우에는 msdb.dbo.gcloudsql_drop_tde_user_certificate 저장 프로시저를 사용하여 불필요한 TDE 인증서를 삭제합니다. 이 프로시저는 sqlserver 사용자 또는 sqlserver 사용자가 권한을 부여한 대상 사용자가 다음과 비슷한 호출을 사용하여 호출할 수 있습니다.

        EXEC gcloudsql_drop_tde_user_certificate TDE_CERTIFICATE_NAME
        
  • Cloud SQL에서 관리하는 인증서는 삭제할 수 없습니다.

  • 사용 중인 인증서는 삭제할 수 없습니다.

TDE 인증서 내보내기

프리픽스와 서픽스를 포함하여 내보내려는 전체 TDE 인증서 이름을 지정해야 합니다. sys.certificates 보기에서 이름 열을 쿼리하여 전체 TDE 암호화 인증서 이름을 조회할 수 있습니다.

    SELECT name FROM sys.certificates
  

콘솔

Google Cloud 콘솔을 사용하여 TDE 인증서를 내보낼 수 없습니다.

gcloud

다음 gcloud sql export를 사용하여 TDE 인증서를 Cloud Storage 버킷으로 내보냅니다.

          gcloud sql export tde INSTANCE_NAME \
          --certificate CERTIFICATE_NAME \
          --cert-path=gs://BUCKET_NAME/CERTIFICATE_NAME \
          --pvk-path=gs://BUCKET_NAME/KEY_NAME \
          --prompt-for-pvk-password \
          --pvk-password CERTIFICATE_PASSWORD
        

다음을 바꿉니다.

  • INSTANCE_NAME: TDE 인증서를 내보내려는 Cloud SQL 인스턴스의 이름입니다.
  • CERTIFICATE_NAME: 내보내려는 암호화 인증서의 이름입니다.
  • BUCKET_NAME: 내보내려는 TDE 인증서가 있는 Cloud Storage 버킷의 이름입니다.
  • KEY_NAME: Cloud Storage 버킷과 연결된 암호화 키의 이름입니다.
  • CERTIFICATE_PASSWORD: 인증서 비밀번호입니다.

REST v1

TDE 인증서를 내보내려면 instances.export 메서드를 사용하고 다음 속성을 지정합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: 암호화 인증서를 내보내려는 프로젝트의 이름입니다.
  • INSTANCE_NAME: 암호화 인증서를 내보내려는 Cloud SQL 인스턴스의 이름입니다.
  • TDE_CERTIFICATE_NAME: 내보낸 후 사용하려는 암호화 인증서의 이름입니다.
  • CERTIFICATE_NAME: 내보내려는 암호화 인증서의 이름입니다.
  • BUCKET_NAME: 내보내려는 암호화 인증서가 있는 Cloud Storage 버킷의 이름입니다.
  • KEY_NAME: Cloud Storage 버킷과 연결된 암호화 키의 이름입니다.
  • CERTIFICATE_PASSWORD: 인증서 비밀번호입니다.

HTTP 메서드 및 URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_NAME/instances/INSTANCE_NAME/export

JSON 요청 본문:


{
  "exportContext":
    {
      "fileType": "TDE",
      "tdeExportOptions":
        {
          "name": "TDE_CERTIFICATE_NAME",
          "certificatePath": "gs://BUCKET_NAME/CERTIFICATE_NAME",
          "privateKeyPath": "gs://BUCKET_NAME/KEY_NAME",
          "privateKeyPassword": "CERTIFICATE_PASSWORD"
        }
    }
}


요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

REST v1beta4

TDE 인증서를 내보내려면 instances.export 메서드를 사용하고 다음 속성을 지정합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: 암호화 인증서를 내보내려는 프로젝트의 이름입니다.
  • INSTANCE_NAME: 암호화 인증서를 내보내려는 Cloud SQL 인스턴스의 이름입니다.
  • TDE_CERTIFICATE_NAME: 내보낸 후 사용하려는 암호화 인증서의 이름입니다.
  • CERTIFICATE_NAME: 내보내려는 암호화 인증서의 이름입니다.
  • BUCKET_NAME: 내보내려는 암호화 인증서가 있는 Cloud Storage 버킷의 이름입니다.
  • KEY_NAME: Cloud Storage 버킷과 연결된 암호화 키의 이름입니다.
  • CERTIFICATE_PASSWORD: 인증서 비밀번호입니다.

HTTP 메서드 및 URL:

POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_NAME/instances/INSTANCE_NAME/export

JSON 요청 본문:


{
  "exportContext":
    {
      "fileType": "TDE",
      "tdeExportOptions":
        {
          "name": "TDE_CERTIFICATE_NAME",
          "certificatePath": "gs://BUCKET_NAME/CERTIFICATE_NAME",
          "privateKeyPath": "gs://BUCKET_NAME/KEY_NAME",
          "privateKeyPassword": "CERTIFICATE_PASSWORD"
        }
    }
}


요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

TDE 암호화 백업 가져오기

TDE 암호화 백업을 가져올 때 일치하는 TDE 인증서가 이미 소스 인스턴스에 있으면 암호화된 백업을 직접 가져올 수 있으며, 복호화되지 않습니다. 인증서를 다시 제공할 필요가 없습니다.

인증서가 인스턴스에 없으면 가져올 때 --keep-encrypted 플래그를 사용합니다. 이 플래그는 다음과 같은 이점을 제공합니다.

  • TDE 인증서를 인스턴스와 연결된 상태로 유지합니다.
  • 가져오기 중에 백업이 복호화되지 않도록 합니다.

--keep-encrypted 플래그를 사용하지 않으면 가져온 백업이 복호화되고 TDE 인증서가 서버에 저장되지 않습니다.

자세한 내용은 다음 리소스를 참조하세요.

TDE 암호화 백업 내보내기

TDE 암호화 백업은 암호화되지 않은 백업을 내보내는 것과 동일한 방법으로 내보낼 수 있습니다. 백업을 암호화하는 데 사용되는 인증서는 내보내기에 포함되지 않습니다. 별도로 내보내야 합니다.

자세한 내용은 다음 리소스를 참조하세요.

데이터베이스 암호화 및 복호화

SQL Server를 사용하는 것과 거의 동일한 방법으로 인스턴스를 암호화하고 복호화할 수 있습니다.

처음에는 sqlserver와 같은 사용자 root 로그인만 TDE 인증서에 액세스할 수 있습니다. 다른 사용자에게 액세스 권한을 부여하려면 다음 명령어 또는 유사한 명령어를 사용합니다.

    GRANT VIEW ANY DEFINITION TO CERTIFICATE_NAME AS CustomerDbRootRole
  

또는 특정 인증서 및 데이터베이스 사용자에게 액세스 권한을 부여할 수 있습니다.

다음 명령어 또는 유사한 명령어를 사용하여 데이터베이스를 암호화할 수 있습니다.

    CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER CERTIFICATE CERTIFICATE_NAME
    ALTER DATABASE DATABASE_NAME SET ENCRYPTION ON
  

다음 명령어 또는 유사한 명령어를 사용하여 데이터베이스를 복호화할 수 있습니다.

    ALTER DATABASE DATABASE_NAME SET ENCRYPTION OFF
  

다음 단계