このページでは、顧客管理の暗号鍵(CMEK)を使用して AML AI インスタンスに保存されているデータを暗号化する方法について説明します。
概要
AML AI インスタンス内のすべての顧客データは、CMEK 鍵を使用して保存時に暗号化されます。鍵は Cloud Key Management Service(Cloud KMS)内で管理し、Identity and Access Management を使用して鍵へのアクセスを制御します。CMEK 鍵を一時的に無効にするか、完全に破棄すると、その鍵で暗号化されたデータにアクセスできなくなります。
AML AI は、Cloud KMS を使用した CMEK のみをサポートしています。Google のデフォルト暗号化はサポートされていません。
CMEK を使用すると、鍵のライフサイクルと管理をより幅広く制御できますが、Cloud KMS サービスの追加費用も発生します。
Cloud KMS は、AML AI と同じ Google Cloud プロジェクトで実行することも、複数のプロジェクトで使用する鍵を一元的に管理する別のプロジェクトで実行することもできます。
暗号化構成は、インスタンスを作成するときに設定されます。インスタンスを作成した後、別の Cloud KMS 鍵を割り当てることはできません。鍵をローテーションすることは可能です。
CMEK の詳細については、Cloud KMS のドキュメントをご覧ください。
保護レベル
Cloud KMS では、次のようなさまざまな保護レベルから選択できます。
- ソフトウェア鍵
- Cloud HSM を使用するハードウェア セキュリティ モジュール(HSM)
AML AI で CMEK を構成する方法を確認する。すべての保護レベルがすべてのリージョンで利用できるわけではありません。AML AI は、顧客指定の暗号鍵(CSEK)や Cloud External Key Manager をサポートしていません。
顧客データ
AML AI によって処理されるすべての顧客データは、対応する親インスタンス リソースで指定された CMEK 鍵を使用して保存時に暗号化されます。これには、データセット、エンジン構成、モデルなどの AML AI リソースに関連付けられたすべての顧客データが含まれます。入力と出力のコピー、生成された ML 特徴、モデルのハイパーパラメータ、モデルの重み付け、予測結果など、お客様データの一時的および永続ストレージはすべて、対応するインスタンスの CMEK 鍵を使用して暗号化されます。
お客様データの定義については、サービス固有の利用規約をご覧ください。これには、リソース識別子、属性、その他のデータラベルが含まれない場合があります。
入力データと出力データの暗号化
インスタンスの AML AI 暗号化構成は、AML AI リソースとそのデータにのみ使用されます。AML AI は、Google Cloud プロジェクトの入力データまたは出力データの暗号化を管理しません。このデータを CMEK を使用して暗号化する場合は、BigQuery データセットで構成された選択した鍵保護レベルと一致するように Cloud KMS 鍵を設定する必要があります。AML AI で使用したものと同じ鍵を再利用することもできます。
鍵のローテーション
セキュリティのために、定期的に自動で鍵をローテーションすることをおすすめします。CMEK では、鍵のローテーションはお客様が制御します。鍵をローテーションする場合、以前の鍵バージョンで暗号化されたデータが新しい鍵バージョンで自動的に再暗号化されることはありません。
1 つの AML AI リソースが、内部では複数のユニットとして保存される場合があります。AML AI リソースの存続期間中に鍵バージョンがローテーションされると、すべてのユニットが同じ鍵バージョンで暗号化されなくなる場合があります。
鍵をローテーションする場合に、強制的に再暗号化を実行したり、古い鍵バージョンを安全に削除できるかどうかを判断したりする機能は AML AI にはありません。
Cloud KMS での鍵のローテーションの詳細を確認する。
鍵の作成と権限の付与
次の手順では、インスタンスの鍵を作成し、その鍵を使用してインスタンス データを暗号化および復号する権限を付与する方法について説明します。Cloud KMS で直接作成された鍵または Cloud External Key Manager で利用できる外部管理鍵を使用できます。
鍵を管理する Google Cloud プロジェクトで、次の操作を行います。
projects.locations.keyRings.create
メソッドを使用して鍵リングを作成します。Cloud KMS のキーリングのロケーションは、暗号化するインスタンスのロケーションと一致する必要があります。REST
リクエストのデータを使用する前に、次のように置き換えます。
KMS_PROJECT_ID
: キーリングを含むプロジェクトの Google Cloud プロジェクト IDLOCATION
: キーリングのロケーション。 サポートされているリージョンのいずれかを使用します。ロケーションを表示us-central1
us-east1
asia-south1
europe-west1
europe-west2
europe-west4
northamerica-northeast1
southamerica-east1
australia-southeast1
KEY_RING_ID
: キーリングのユーザー定義の識別子
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d "" \
"https://cloudkms.googleapis.com/v1/projects/KMS_PROJECT_ID/locations/LOCATION/keyRings?key_ring_id=KEY_RING_ID"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-Uri "https://cloudkms.googleapis.com/v1/projects/KMS_PROJECT_ID/locations/LOCATION/keyRings?key_ring_id=KEY_RING_ID" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
{ "name": "projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID", "createTime": "2023-03-14T15:52:55.358979323Z" }
gcloud
後述のコマンドデータを使用する前に、次のように置き換えます。
KMS_PROJECT_ID
: キーリングを含むプロジェクトの Google Cloud プロジェクト IDLOCATION
: キーリングのロケーション。 サポートされているリージョンのいずれかを使用します。ロケーションを表示us-central1
us-east1
asia-south1
europe-west1
europe-west2
europe-west4
northamerica-northeast1
southamerica-east1
australia-southeast1
KEY_RING_ID
: キーリングのユーザー定義の識別子
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud kms keyrings create KEY_RING_ID \ --project KMS_PROJECT_ID --location LOCATION
Windows(PowerShell)
gcloud kms keyrings create KEY_RING_ID ` --project KMS_PROJECT_ID --location LOCATION
Windows(cmd.exe)
gcloud kms keyrings create KEY_RING_ID ^ --project KMS_PROJECT_ID --location LOCATION
$
projects.locations.keyRings.cryptoKeys
メソッドを使用して鍵を作成します。REST
リクエストのデータを使用する前に、次のように置き換えます。
KMS_PROJECT_ID
: キーリングを含むプロジェクトの Google Cloud プロジェクト IDLOCATION
: キーリングのロケーション。 サポートされているリージョンのいずれかを使用します。ロケーションを表示us-central1
us-east1
asia-south1
europe-west1
europe-west2
europe-west4
northamerica-northeast1
southamerica-east1
australia-southeast1
KEY_RING_ID
: キーリングのユーザー定義の識別子KEY_ID
: 鍵のユーザー定義の識別子
リクエストの本文(JSON):
{ "purpose": "ENCRYPT_DECRYPT" }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。cat > request.json << 'EOF' { "purpose": "ENCRYPT_DECRYPT" } EOF
その後、次のコマンドを実行して REST リクエストを送信します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://cloudkms.googleapis.com/v1/projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID/cryptoKeys?crypto_key_id=KEY_ID"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。@' { "purpose": "ENCRYPT_DECRYPT" } '@ | Out-File -FilePath request.json -Encoding utf8
その後、次のコマンドを実行して REST リクエストを送信します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://cloudkms.googleapis.com/v1/projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID/cryptoKeys?crypto_key_id=KEY_ID" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
{ "name": "projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID/cryptoKeys/KEY_ID", "primary": { "name": "projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID/cryptoKeys/KEY_ID/cryptoKeyVersions/1", "state": "ENABLED", "createTime": "2023-03-14T15:52:55.358979323Z", "protectionLevel": "SOFTWARE", "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION", "generateTime": "2023-03-14T15:52:55.358979323Z" }, "purpose": "ENCRYPT_DECRYPT", "createTime": "2023-03-14T15:52:55.358979323Z", "versionTemplate": { "protectionLevel": "SOFTWARE", "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION" }, "destroyScheduledDuration": "86400s" }
gcloud
後述のコマンドデータを使用する前に、次のように置き換えます。
KMS_PROJECT_ID
: キーリングを含むプロジェクトの Google Cloud プロジェクト IDLOCATION
: キーリングのロケーション。 サポートされているリージョンのいずれかを使用します。ロケーションを表示us-central1
us-east1
asia-south1
europe-west1
europe-west2
europe-west4
northamerica-northeast1
southamerica-east1
australia-southeast1
KEY_RING_ID
: キーリングのユーザー定義の識別子KEY_ID
: 鍵のユーザー定義の識別子
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud kms keys create KEY_ID \ --keyring KEY_RING_ID \ --project KMS_PROJECT_ID \ --location LOCATION \ --purpose "encryption"
Windows(PowerShell)
gcloud kms keys create KEY_ID ` --keyring KEY_RING_ID ` --project KMS_PROJECT_ID ` --location LOCATION ` --purpose "encryption"
Windows(cmd.exe)
gcloud kms keys create KEY_ID ^ --keyring KEY_RING_ID ^ --project KMS_PROJECT_ID ^ --location LOCATION ^ --purpose "encryption"
$
AML AI プロジェクトで AML AI インスタンスを作成していない場合、AML AI サービス アカウントはまだ存在しません。サービス アカウントを作成します。
後述のコマンドデータを使用する前に、次のように置き換えます。
PROJECT_ID
: AML AI が実行されているプロジェクトの Google Cloud プロジェクト ID
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud beta services identity create --service=financialservices.googleapis.com --project=PROJECT_ID
Windows(PowerShell)
gcloud beta services identity create --service=financialservices.googleapis.com --project=PROJECT_ID
Windows(cmd.exe)
gcloud beta services identity create --service=financialservices.googleapis.com --project=PROJECT_ID
次のようなレスポンスが返されます。
Service identity created: service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com
AML AI サービス アカウントに CryptoKey Encrypter/Decrypter IAM ロール(
roles/cloudkms.cryptoKeyEncrypterDecrypter
)を付与します。作成した鍵にこの権限を付与します。後述のコマンドデータを使用する前に、次のように置き換えます。
PROJECT_ID
: AML AI が実行されているプロジェクトの Google Cloud プロジェクト IDKEY_ID
: キーリングのユーザー定義の識別子LOCATION
: キーリングのロケーション。 サポートされているリージョンのいずれかを使用します。ロケーションを表示us-central1
us-east1
asia-south1
europe-west1
europe-west2
europe-west4
northamerica-northeast1
southamerica-east1
australia-southeast1
KEY_RING_ID
: キーリングのユーザー定義の識別子PROJECT_NUMBER
: AML AI が実行されているプロジェクトの Google Cloud プロジェクト番号
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud kms keys add-iam-policy-binding KEY_ID --project=PROJECT_ID \ --location LOCATION --keyring=KEY_RING_ID \ --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
Windows(PowerShell)
gcloud kms keys add-iam-policy-binding KEY_ID --project=PROJECT_ID ` --location LOCATION --keyring=KEY_RING_ID ` --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com ` --role roles/cloudkms.cryptoKeyEncrypterDecrypter
Windows(cmd.exe)
gcloud kms keys add-iam-policy-binding KEY_ID --project=PROJECT_ID ^ --location LOCATION --keyring=KEY_RING_ID ^ --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com ^ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
次のようなレスポンスが返されます。
Updated IAM policy for key KEY_ID. bindings: - members: - serviceAccount:service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com role: roles/cloudkms.cryptoKeyEncrypterDecrypter etag: BwYCq0Sq4Ho= version: 1
このコマンドの詳細については、gcloud kms keys add-iam-policy-binding のドキュメントをご覧ください。
これで、インスタンスを作成し、暗号化に使用する鍵を指定できるようになりました。
アクセス権の削除
CMEK で暗号化されたインスタンスから鍵へのアクセス権を削除する方法はいくつかあります。
- Google Cloud コンソール または gcloud CLIを使用して、AML AI サービス アカウントから Cloud KMS CryptoKey の暗号化/復号のロールを取り消します。
- CMEK 鍵を一時的に無効にする。
- CMEK 鍵を完全に破棄する。
鍵を無効化または破棄する前に、AML AI サービス アカウントから権限を取り消すことをおすすめします。権限の変更は数秒以内に反映されるため、鍵の無効化や破棄の影響を確認できます。
インスタンスの暗号鍵を無効化または破棄すると、インスタンスに関連付けられたお客様データを使用または取得できなくなります。インスタンスに保存されているすべての顧客データ(モデル、エンジン構成、バックテスト結果、予測結果など)にアクセスできなくなります。AML AI 閲覧者のロールを持つユーザーは、AML AI リソースの取得によって返されるインスタンス名や他のリソース フィールドなどのフィールドを引き続き表示できます。
backtestResults
メタデータのエクスポートなど、顧客データを使用またはエクスポートするオペレーションは失敗します。
AML AI 管理者ロールまたはオーナー ロールを持つユーザーはインスタンスを削除できます。
CMEK の組織のポリシー
AML AI は CMEK の組織ポリシーをサポートしていません。ただし、AML AI では、constraints/gcp.restrictNonCmekServices
組織のポリシーに関係なく、常に CMEK を使用する必要があります。
VPC-SC とのやり取り
VPC-SC 境界内に AML AI を構成している場合、CMEK 鍵は引き続きサービス アカウントにアクセスできるはずです。鍵が同じ VPC-SC 境界内にない場合にこれを実現する方法は複数あり、以下があります。
- 下り(外向き)ルールを使用してリソースを許可リストに登録する
- VPC 境界ピアリングを使用する
次のステップ
- インスタンスを作成する
- CMEK の詳細を見る。