Apigee 暗号鍵について

このページの内容は Apigee に適用されます。Apigee ハイブリッドには適用されません。

Apigee Edge のドキュメントを表示する。

このセクションでは、暗号鍵のタイプとその作成方法について説明します。

Apigee のセットアップ プロセスでは、次の Cloud Key Management Service 暗号鍵を生成します。

鍵のタイプ 作成するタイミング 説明
コントロール プレーンの暗号鍵

Google Cloud コンソール:

コマンドライン インターフェース(CLI):

データ所在地を使用する場合、Apigee はこの鍵を使用して、テナント プロジェクト内の BigQuery に保存されているアナリティクスのデータを暗号化します。

API プロキシ、ターゲット サーバー、トラストストアおよびキーストア、分析データなど、ランタイム間で共有されるものを暗号化します。

Apigee から、コントロール プレーンの CMEK 鍵を 2 つ指定するように求められます。この鍵と、API 消費者データ暗号鍵

コントロール プレーンの暗号鍵のロケーションは、コントロール プレーンのロケーションと一致する必要があります。

API 消費者データ暗号鍵

Google Cloud コンソール:

コマンドライン インターフェース(CLI):

データ所在地を使用する場合、Apigee には、コントロール プレーン暗号鍵に加え、単一リージョンでのみ利用可能なサービスに使用する単一のリージョン鍵が必要です。たとえば、Dataflow や Cloud SQL などです。

API 消費者データ暗号鍵のロケーションは、コントロール プレーンのロケーション内に存在する必要があります。

ランタイム データベースの暗号鍵

Google Cloud コンソール:

コマンドライン インターフェース(CLI):

KVM、キャッシュ、クライアント シークレットなどのアプリケーション データを暗号化し、データベースに保存します。

ランタイム データベース暗号鍵は、組織ごとに 1 つあります。組織内のすべてのインスタンスとリージョンで同じランタイム データベース暗号鍵が共有されます。

ランタイム データベースの暗号鍵は、Cloud HSMCloud EKM をサポートするすべての Cloud KMS のロケーションをサポートしています。この鍵を作成する際は、マルチリージョンのロケーションuseurope など)またはデュアルリージョンのロケーションeur5nam4)を使用することをおすすめします。

データ所在地を使用する場合、ランタイム データベースの暗号鍵のロケーションは、コントロール プレーンのロケーション内に存在する必要があります。

ディスク暗号鍵

Google Cloud コンソール:

コマンドライン インターフェース(CLI):

ランタイム インスタンス データをディスクに書き込む前に暗号化します。

暗号化されるデータの種類としては、鍵管理システム(KMS)、Key-Value マップ(KVM)、割り当て定義、バケット、カウンタや、キャッシュに保存されたすべてのデータなどが挙げられます。KMS データには、API プロダクト、デベロッパー、デベロッパー アプリ、OAuth トークン(アクセス トークン、更新トークン、認証コードなど)、API キーが含まれます。

この鍵はランタイム インスタンスと同じリージョンにあります。新しい鍵を作成するときは、鍵のロケーションをランタイム インスタンスのロケーションに合わせてください。

インスタンスとリージョンの組み合わせごとに、独自のディスク暗号鍵があります。

要点

ディスクとランタイム データベースの暗号鍵を作成する場合は、次の点に注意してください。

  • Apigee ランタイム データベースの暗号鍵のロケーションでは、Cloud HSMCloud EKM をサポートするすべての Cloud KMS のロケーションがサポートされます。
  • ディスク暗号鍵のロケーションは、鍵が使用されているランタイム インスタンスのロケーションと一致する必要があります。
  • 一度設定した鍵のロケーションは変更できません。
  • 鍵はすべてキーリング内にある必要があります。
  • 異なるタイプのキーは別々のキーリングに存在する必要があります。ディスク暗号鍵は、ランタイム データベースの暗号鍵と同じキーリングにすることはできません。
  • 鍵には purpose が必要です。コマンドラインを使用して新しい鍵を生成する場合は、purposeencryption に設定します。Google Cloud コンソールを使用する場合は、目的に [対称暗号化 / 復号化] を選択します。
  • 鍵は、次のパターンを使用する鍵のパスで定義されます。
    projects/PROJECT_ID/locations/KEY_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME

既存の鍵の一覧表示

Apigee 用に新しい Cloud KMS 暗号鍵をすでに作成している場合は、設定時に新しい鍵を作成せずに、それらの暗号鍵を使用できます。

キーリング内のすべての KMS 鍵を一覧表示するには:

gcloud kms keys list コマンドを実行します。

gcloud kms keys list --keyring KEY_RING_NAME --location KEY_RING_LOCATION

次のように置き換えます。

  • KEY_RING_NAME: キーリングの名前(例: my-key-ring)。
  • KEY_RING_LOCATION: キーリングの物理的なロケーション(例: us-west1)。

また、Google Cloud コンソールに鍵を表示することもできます。

コマンドラインでの新しい鍵の生成

キーリングと鍵は、コマンドラインまたは Google Cloud コンソールで作成できます。

鍵のタイプごとに、独自のキーリングが必要です。たとえば、ディスク暗号鍵は 1 つのキーリングに保管できますが、ランタイム データベースの暗号鍵は別のキーリングに保存する必要があります。

以降のステップでは、キーリングと鍵を作成する方法と、Apigee サービス エージェントに新しい鍵を使用するためのアクセス権を付与する方法について説明します。コントロール プレーン(データ所在地を使用する場合)、ランタイム データベース、ランタイム ディスクのキーリングと鍵を作成します。

  1. gcloud kms keyrings create コマンドを使用して、新しいキーリングを作成します。

    コントロール プレーン

    データ所在地が有効になっている場合は、コントロール プレーン用のキーリングと、消費者データ リージョン用のキーリングを作成します。

    gcloud kms keyrings create CONTROL_PLANE_KEY_RING_NAME \
    --location CONTROL_PLANE_LOCATION \
    --project PROJECT_ID
    gcloud kms keyrings create CONSUMER_DATA_KEY_RING_NAME \
    --location CONSUMER_DATA_REGION \
    --project PROJECT_ID

    次のように置き換えます。

    • CONTROL_PLANE_KEY_RING_NAME: コントロール プレーンのキーリング名。
    • CONTROL_PLANE_LOCATION: Apigee コントロール プレーン データが保存される物理的なロケーション。
    • PROJECT_ID: Google Cloud プロジェクト ID。
    • CONSUMER_DATA_KEY_RING_NAME: 消費者データのキーリング名。
    • CONSUMER_DATA_REGION: コントロール プレーン リージョンのサブリージョン。CONTROL_PLANE_LOCATION と CONSUMER_DATA_REGION の両方を指定する必要があります。

    ランタイム データベース

    gcloud kms keyrings create RUNTIMEDB_KEY_RING_NAME \
      --location RUNTIMEDB_KEY_LOCATION \
      --project PROJECT_ID

    次のように置き換えます。

    • RUNTIMEDB_KEY_RING_NAME: 作成するデータベースのキーリングの名前。
    • RUNTIMEDB_KEY_LOCATION: データベースのキーリングの物理的なロケーション。
    • PROJECT_ID: Google Cloud プロジェクト ID。

    Apigee の暗号鍵のロケーションは、Cloud HSMCloud EKM をサポートするすべての Cloud KMS のロケーションをサポートします。

    ランタイム ディスク

    gcloud kms keyrings create RUNTIMEDISK_KEY_RING_NAME \
      --location RUNTIMEDISK_KEY_LOCATION \
      --project PROJECT_ID

    次のように置き換えます。

    • RUNTIMEDISK_KEY_RING_NAME: 作成するディスクのキーリングの名前。
    • RUNTIMEDISK_KEY_LOCATION: ディスクのキーリングの物理的な場所。
    • PROJECT_ID: Google Cloud プロジェクト ID。

    ディスク キーリングがインスタンスと同じロケーションに設定されていることを確認します。各インスタンスとキーリングには、それぞれ独自のロケーションが必要です。

    gcloud kms keyrings list \
    --location  \
    --project $PROJECT_ID

    gcloud kms keyrings describe $DISK_KEY_RING_NAME \
    --location  \
    --project $PROJECT_ID
  2. キーリングの名前は組織に固有のものであることが必要です。追加のリージョンを作成する場合、そのリージョンのキーリング名を既存のキーリング名と同じにすることはできません。

  3. kms keys create コマンドを使用して鍵を作成します。

    コントロール プレーン

    データ所在地が有効になっている場合は、コントロール プレーン用のキーリングと、消費者データ リージョン用のキーリングを作成します。

    gcloud kms keys create CONTROL_PLANE_KEY_NAME \
    --keyring CONTROL_PLANE_KEY_RING_NAME \
    --location CONTROL_PLANE_LOCATION \
    --purpose "encryption" \
    --project PROJECT_ID
    gcloud kms keys create CONSUMER_DATA_KEY_NAME \
    --keyring CONSUMER_DATA_KEY_RING_NAME \
    --location CONSUMER_DATA_REGION \
    --purpose "encryption" \
    --project PROJECT_ID

    次のように置き換えます。

    • CONTROL_PLANE_KEY_NAME: コントロール プレーンの鍵名。
    • CONTROL_PLANE_KEY_RING_NAME: コントロール プレーンのキーリング名。
    • CONTROL_PLANE_LOCATION: Apigee コントロール プレーン データが保存される物理的なロケーション。
    • PROJECT_ID: Google Cloud プロジェクト ID。
    • CONSUMER_DATA_KEY_NAME: 消費者データの鍵名。
    • CONSUMER_DATA_KEY_RING_NAME: 消費者データのキーリング名。
    • CONSUMER_DATA_REGION: コントロール プレーン リージョンのサブリージョン。CONTROL_PLANE_LOCATION と CONSUMER_DATA_REGION の両方を指定する必要があります。

    ランタイム データベース

    gcloud kms keys create RUNTIMEDB_KEY_NAME \
      --keyring RUNTIMEDB_KEY_RING_NAME \
      --location RUNTIMEDB_KEY_LOCATION \
      --purpose "encryption" \
      --project PROJECT_ID

    次のように置き換えます。

    • RUNTIMEDB_KEY_NAME: 作成するデータベースの鍵の名前。
    • RUNTIMEDB_KEY_RING_NAME: 作成するデータベースのキーリングの名前。
    • RUNTIMEDB_KEY_LOCATION: データベースのキーリングの物理的なロケーション。
    • PROJECT_ID: Google Cloud プロジェクト ID。

    ランタイム ディスク

    gcloud kms keys create RUNTIMEDISK_KEY_NAME \
      --keyring RUNTIMEDISK_KEY_RING_NAME \
      --location RUNTIMEDISK_KEY_LOCATION \
      --purpose "encryption" \
      --project PROJECT_ID

    次のように置き換えます。

    • RUNTIMEDISK_KEY_NAME: 作成するディスクの鍵の名前。
    • RUNTIMEDISK_KEY_RING_NAME: 作成するディスクのキーリングの名前。
    • RUNTIMEDISK_KEY_LOCATION: ディスクのキーリングの物理的な場所。
    • PROJECT_ID: Google Cloud プロジェクト ID。

    このコマンドを実行すると鍵が作成され、キーリングに追加されます。

    鍵を参照する場合は、鍵 ID を使用します。

  4. gcloud kms keys add-iam-policy-binding コマンドを使用して、Apigee サービス エージェントに新しい鍵を使用するためのアクセス権を付与します。

    コントロール プレーン

    データ所在地が有効になっている場合は、コントロール プレーン用のキーリングと、消費者データ リージョン用のキーリングを作成します。

    gcloud kms keys add-iam-policy-binding CONTROL_PLANE_KEY_NAME \
    --location CONTROL_PLANE_LOCATION \
    --keyring CONTROL_PLANE_KEY_RING_NAME \
    --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com" \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
    --project PROJECT_ID
    
    gcloud kms keys add-iam-policy-binding CONSUMER_DATA_KEY_NAME \
    --location CONSUMER_DATA_REGION \
    --keyring CONSUMER_DATA_KEY_RING_NAME \
    --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com" \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
    --project PROJECT_ID
    

    次のように置き換えます。

    • CONTROL_PLANE_KEY_NAME: コントロール プレーンの鍵名。
    • CONTROL_PLANE_LOCATION: Apigee コントロール プレーン データが保存される物理的なロケーション。
    • CONTROL_PLANE_KEY_RING_NAME: コントロール プレーンのキーリング名。
    • PROJECT_NUMBER: Google Cloud プロジェクト番号。
    • PROJECT_ID: Google Cloud プロジェクト ID。
    • CONSUMER_DATA_KEY_NAME: 消費者データの鍵名。
    • CONSUMER_DATA_REGION: コントロール プレーン リージョンのサブリージョン。CONTROL_PLANE_LOCATION と CONSUMER_DATA_REGION の両方を指定する必要があります。
    • CONSUMER_DATA_KEY_RING_NAME: 消費者データのキーリング名。

    ランタイム データベース

    gcloud kms keys add-iam-policy-binding RUNTIMEDB_KEY_NAME \
      --location RUNTIMEDB_KEY_LOCATION \
      --keyring RUNTIMEDB_KEY_RING_NAME \
      --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com \
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
      --project PROJECT_ID

    次のように置き換えます。

    • RUNTIMEDB_KEY_NAME: 作成するデータベースの鍵の名前。
    • RUNTIMEDB_KEY_RING_NAME: 作成するデータベースのキーリングの名前。
    • RUNTIMEDB_KEY_LOCATION: データベースのキーリングの物理的なロケーション。
    • PROJECT_NUMBER: Google Cloud プロジェクト番号。
    • PROJECT_ID: Google Cloud プロジェクト ID。

    ランタイム ディスク

    gcloud kms keys add-iam-policy-binding RUNTIMEDISK_KEY_NAME \
      --location RUNTIMEDISK_KEY_LOCATION \
      --keyring RUNTIMEDISK_KEY_RING_NAME \
      --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com \
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
      --project PROJECT_ID

    次のように置き換えます。

    • RUNTIMEDISK_KEY_NAME: 作成するディスクの鍵の名前。
    • RUNTIMEDISK_KEY_RING_NAME: 作成するディスクのキーリングの名前。
    • RUNTIMEDISK_KEY_LOCATION: ディスクのキーリングの物理的な場所。
    • PROJECT_NUMBER: Google Cloud プロジェクト番号。
    • PROJECT_ID: Google Cloud プロジェクト ID。

    このコマンドにより、鍵が Apigee サービス エージェントにバインドされます。

    このリクエストが正常に完了すると、gcloud から次のようなレスポンスが返されます。

    Updated IAM policy for key [runtime].
    bindings:
    - members:
    - serviceAccount:service-1234567890@gcp-sa-apigee.iam.gserviceaccount.com
    role: roles/cloudkms.cryptoKeyEncrypterDecrypter
    etag: BwWqgEuCuwk=
    version: 1

    次のようなエラーが発生することがあります。

    INVALID_ARGUMENT: Role roles/cloudkms.cryptokms.cryptoKeyEncrypterDecrypter is not supported for this resource.

    サービス アカウントのメールアドレスにプロジェクト名ではなく、プロジェクト番号を使用していることを確認してください。

    鍵が Apigee サービス エージェントにバインドされていることを確認するには:

    gcloud kms keys get-iam-policy $DISK_KEY_NAME \
      --keyring $DISK_KEY_RING_NAME \
      --location  \
      --project $PROJECT_ID

    gcloud kms keys describe $DISK_KEY_NAME \
      --keyring $DISK_KEY_RING_NAME \
      --location  \
      --project $PROJECT_ID

Google Cloud コンソールを使用した新しい鍵の生成

コンソールを使用して新しい鍵を生成できます。詳細については、対称暗号鍵の作成をご覧ください。

コンソールを使用して新しい鍵を作成する場合:

  • ランタイム データベースの暗号鍵のロケーションには、Cloud HSMCloud EKM をサポートする任意の Cloud KMS のロケーションを設定します。UI では鍵の他の場所を選択できないため、キーリングで選択したものと一致します。
  • 鍵を作成した後、鍵のパスを暗号鍵ペインで取得するには、鍵の横にある その他メニューをクリックし、[リソース名のコピー] を選択します。

鍵 ID を取得する

Cloud KMS API または Google Cloud CLI を使用して Cloud Key Management Service リソースを参照する場合は、リソース ID を使用します。鍵 ID は、gcloud kms keys list コマンドで取得できます。

コントロール プレーン

データ所在地が有効になっている場合は、コントロール プレーン用のキーリングと、消費者データ リージョン用のキーリングがあります。

gcloud kms keys list \
--location=CONTROL_PLANE_LOCATION \
--keyring=CONTROL_PLANE_KEY_RING_NAME \
--project=PROJECT_ID

gcloud kms keys list \
--location=CONSUMER_DATA_REGION \
--keyring=CONSUMER_DATA_KEY_RING_NAME \
--project=PROJECT_ID

鍵 ID の構文は次のとおりです(ファイルパスに似ています)。

projects/PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/CONTROL_PLANE_KEY_RING_NAME/cryptoKeys/CONTROL_PLANE_KEY_NAME

ランタイム データベース

gcloud kms keys list \
--location=RUNTIMEDB_KEY_LOCATION \
--keyring=RUNTIMEDB_KEY_RING_NAME \
--project=PROJECT_ID

鍵 ID の構文は次のとおりです(ファイルパスに似ています)。

projects/PROJECT_ID/locations/RUNTIMEDB_KEY_LOCATION/keyRings/RUNTIMEDB_KEY_RING_NAME/cryptoKeys/RUNTIMEDB_KEY_NAME

ランタイム ディスク

gcloud kms keys list \
  --location=RUNTIMEDISK_KEY_LOCATION \
  --keyring=RUNTIMEDISK_KEY_RING_NAME \
  --project=PROJECT_ID

鍵 ID の構文は次のとおりです(ファイルパスに似ています)。

projects/PROJECT_ID/locations/RUNTIMEDISK_KEY_LOCATION/keyRings/RUNTIMEDISK_KEY_RING_NAME/cryptoKeys/RUNTIMEDISK_KEY_NAME

例:

NAME: projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key
PURPOSE: ENCRYPT_DECRYPT
ALGORITHM: GOOGLE_SYMMETRIC_ENCRYPTION
PROTECTION_LEVEL: SOFTWARE
LABELS:
PRIMARY_ID: 1
PRIMARY_STATE: ENABLED

鍵 ID は Google Cloud コンソールで取得することもできます。詳細については、Cloud KMS リソース ID の取得をご覧ください。