顧客管理の暗号鍵(CMEK)を使用してデータを暗号化する

このページでは、顧客管理の暗号鍵(CMEK)を使用して AML AI インスタンスに保存されているデータを暗号化する方法について説明します。

概要

AML AI インスタンスのすべての顧客データは、保存時に CMEK 鍵を使用して暗号化されます。Cloud Key Management Service 内で鍵を管理し、Identity and Access Management を使用して鍵へのアクセスを制御します。CMEK 鍵を一時的に無効にするか、完全に破棄すると、その鍵で暗号化されたデータにはアクセスできなくなります。

CMEK を使用すると、鍵のライフサイクルと管理をより幅広く制御できますが、Cloud KMS サービスの追加費用も発生します。

Cloud KMS は、AML AI と同じ Google Cloud プロジェクトで実行することも、複数のプロジェクトで使用する鍵を一元的に管理する別のプロジェクトで実行することもできます。

CMEK 鍵は、インスタンスを作成するときに割り当てます。すべてのインスタンスは CMEK を使用して構成する必要があります。また、Google のデフォルトの暗号化を使用するように変更することはできません。

CMEK の一般的な用途や使用する理由などの詳細については、Cloud KMS のドキュメントをご覧ください。

顧客データ

AML AI によって処理される顧客データはすべて、対応する親インスタンス リソースで指定された CMEK 鍵を使用して暗号化されます。これには、データセット、エンジン構成、モデルなど、AML AI リソースに関連付けられているすべての顧客データが含まれます。入力と出力のコピー、生成された ML 特徴、ログ、モデルのハイパーパラメータ、モデルの重み付け、予測結果など、お客様データの一時的および永続ストレージはすべて、対応するインスタンスの CMEK 鍵を使用して暗号化されます。

AML AI は、Google Cloud プロジェクト内の入力データまたは出力データの暗号化を管理しません。このデータを暗号化する場合は、Google Cloud プロジェクトで個別の CMEK 鍵を設定する必要があります。インスタンスで指定された KMS 鍵は、AML AI リソースとそのデータに使用されます。

鍵の作成と権限の付与

次の手順では、インスタンスの鍵を作成し、その鍵を使用してインスタンス データを暗号化および復号する権限を付与する方法について説明します。Cloud KMS で直接作成された鍵または Cloud External Key Manager で利用できる外部管理鍵を使用できます。

  1. 鍵を管理する Google Cloud プロジェクトで、次の操作を行います。

    1. Cloud KMS API を有効化します。

    2. projects.locations.keyRings.create メソッドを使用してキーリングを作成します。Cloud KMS のキーリングの場所は、暗号化するインスタンスの場所と一致している必要があります。

      REST

      リクエストのデータを使用する前に、次のように置き換えます。

      • KMS_PROJECT_ID: キーリングを含むプロジェクトの Google Cloud プロジェクト ID
      • LOCATION: キーリングのロケーション。 サポートされているリージョンのいずれかを使用します。
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
      • 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": CREATE_TIME
      }
      

      gcloud

      後述のコマンドデータを使用する前に、次のように置き換えます。

      • LOCATION: キーリングのロケーション。 サポートされているリージョンのいずれかを使用します。
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
      • KEY_RING_ID: キーリングのユーザー定義の識別子

      次のコマンドを実行します。

      Linux、macOS、Cloud Shell

      gcloud kms keyrings create KEY_RING_ID \
        --location LOCATION
      

      Windows(PowerShell)

      gcloud kms keyrings create KEY_RING_ID `
        --location LOCATION
      

      Windows(cmd.exe)

      gcloud kms keyrings create KEY_RING_ID ^
        --location LOCATION
      
      空のレスポンスが返されます。
      $

    3. projects.locations.keyRings.cryptoKeys メソッドを使用して鍵を作成します。

      REST

      リクエストのデータを使用する前に、次のように置き換えます。

      • KMS_PROJECT_ID: キーリングを含むプロジェクトの Google Cloud プロジェクト ID
      • LOCATION: キーリングのロケーション。 サポートされているリージョンのいずれかを使用します。
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
      • 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": CREATE_TIME,
          "protectionLevel": "SOFTWARE",
          "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION",
          "generateTime": GENERATE_TIME
        },
        "purpose": "ENCRYPT_DECRYPT",
        "createTime": CREATE_TIME,
        "versionTemplate": {
          "protectionLevel": "SOFTWARE",
          "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION"
        },
        "destroyScheduledDuration": "86400s"
      }
      

      gcloud

      後述のコマンドデータを使用する前に、次のように置き換えます。

      • LOCATION: キーリングのロケーション。 サポートされているリージョンのいずれかを使用します。
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
      • KEY_RING_ID: キーリングのユーザー定義の識別子
      • KEY_ID: 鍵のユーザー定義の識別子

      次のコマンドを実行します。

      Linux、macOS、Cloud Shell

      gcloud kms keys create KEY_ID \
        --keyring KEY_RING_ID \
        --location LOCATION \
        --purpose "encryption"
      

      Windows(PowerShell)

      gcloud kms keys create KEY_ID `
        --keyring KEY_RING_ID `
        --location LOCATION `
        --purpose "encryption"
      

      Windows(cmd.exe)

      gcloud kms keys create KEY_ID ^
        --keyring KEY_RING_ID ^
        --location LOCATION ^
        --purpose "encryption"
      
      空のレスポンスが返されます。
      $

  2. 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

  3. AML AI サービス アカウントに暗号鍵の暗号化/復号の IAM ロールroles/cloudkms.cryptoKeyEncrypterDecrypter)を付与します。作成した鍵にこの権限を付与します。

    後述のコマンドデータを使用する前に、次のように置き換えます。

    • PROJECT_ID: AML AI が実行されているプロジェクトの Google Cloud プロジェクト ID
    • KEY_ID: キーリングのユーザー定義の識別子
    • LOCATION: キーリングのロケーション。 サポートされているリージョンのいずれかを使用します。
      • us-central1
      • us-east1
      • asia-south1
      • europe-west1
      • europe-west2
      • europe-west4
      • northamerica-northeast1
      • southamerica-east1
    • 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 で暗号化されたインスタンスへのアクセスを削除するには、いくつかの方法があります。

鍵を無効化または破棄する前に、AML AI サービス アカウントから権限を取り消すことをおすすめします。権限の変更は数秒以内に反映されるため、鍵の無効化や破棄の影響を確認できます。

インスタンスの暗号鍵を無効化または破棄すると、インスタンスのデータを表示または取得できなくなります。インスタンスに保存されているすべてのデータにアクセスできなくなります。これには、データセット、モデル、エンジン構成、バックテスト結果、予測結果などの API リソースが含まれます。AML AI 閲覧者のロールを持つユーザーは、インスタンス名などのインスタンス メタデータを引き続き表示できます。

AML AI 管理者のロールまたはオーナーのロールを持つユーザーは、インスタンスを削除できます。

CMEK の組織のポリシー

AML AI は、CMEK の組織のポリシーをサポートしていません。ただし、constraints/gcp.restrictNonCmekServices 組織のポリシーに関係なく、AML AI は常に CMEK を使用する必要があります。

次のステップ