透過的データ暗号化(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)が有効になっている場合、インポートされた TDE 証明書が使用可能になるまでに数分かかることがあります。

TDE 証明書をローテーションする

  • インポートした TDE 証明書は、msdb.dbo.gcloudsql_rotate_tde_certificate ストアド プロシージャを使用してローテーションできます。このプロシージャは、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 証明書をエクスポートするには、接頭辞と接尾辞を含む TDE 証明書名全体を指定する必要があります。TDE 暗号化証明書の完全な名前は、sys.certificates ビューの name 列をクエリすることで検索できます。

    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
  

次のステップ