このページでは、透過的データ暗号化(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