このページの内容は 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 HSM と Cloud EKM をサポートするすべての Cloud KMS のロケーションをサポートしています。この鍵を作成する際は、マルチリージョンのロケーション( データ所在地を使用する場合、ランタイム データベースの暗号鍵のロケーションは、コントロール プレーンのロケーション内に存在する必要があります。 |
ディスク暗号鍵 |
Google Cloud コンソール: コマンドライン インターフェース(CLI): |
ランタイム インスタンス データをディスクに書き込む前に暗号化します。 暗号化されるデータの種類としては、鍵管理システム(KMS)、Key-Value マップ(KVM)、割り当て定義、バケット、カウンタや、キャッシュに保存されたすべてのデータなどが挙げられます。KMS データには、API プロダクト、デベロッパー、デベロッパー アプリ、OAuth トークン(アクセス トークン、更新トークン、認証コードなど)、API キーが含まれます。 この鍵はランタイム インスタンスと同じリージョンにあります。新しい鍵を作成するときは、鍵のロケーションをランタイム インスタンスのロケーションに合わせてください。 インスタンスとリージョンの組み合わせごとに、独自のディスク暗号鍵があります。 |
要点
ディスクとランタイム データベースの暗号鍵を作成する場合は、次の点に注意してください。
- Apigee ランタイム データベースの暗号鍵のロケーションでは、Cloud HSM と Cloud EKM をサポートするすべての Cloud KMS のロケーションがサポートされます。
- ディスク暗号鍵のロケーションは、鍵が使用されているランタイム インスタンスのロケーションと一致する必要があります。
- 一度設定した鍵のロケーションは変更できません。
- 鍵はすべてキーリング内にある必要があります。
- 異なるタイプのキーは別々のキーリングに存在する必要があります。ディスク暗号鍵は、ランタイム データベースの暗号鍵と同じキーリングにすることはできません。
-
鍵には
purpose
が必要です。コマンドラインを使用して新しい鍵を生成する場合は、purpose
をencryption
に設定します。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 --keyringKEY_RING_NAME --locationKEY_RING_LOCATION
次のように置き換えます。
-
KEY_RING_NAME: キーリングの名前(例:
my-key-ring
)。 -
KEY_RING_LOCATION: キーリングの物理的なロケーション(例:
us-west1
)。
また、Google Cloud コンソールに鍵を表示することもできます。
コマンドラインでの新しい鍵の生成
キーリングと鍵は、コマンドラインまたは Google Cloud コンソールで作成できます。
鍵のタイプごとに、独自のキーリングが必要です。たとえば、ディスク暗号鍵は 1 つのキーリングに保管できますが、ランタイム データベースの暗号鍵は別のキーリングに保存する必要があります。
以降のステップでは、キーリングと鍵を作成する方法と、Apigee サービス エージェントに新しい鍵を使用するためのアクセス権を付与する方法について説明します。コントロール プレーン(データ所在地を使用する場合)、ランタイム データベース、ランタイム ディスクのキーリングと鍵を作成します。
-
gcloud kms keyrings create
コマンドを使用して、新しいキーリングを作成します。データ所在地が有効になっている場合は、コントロール プレーン用のキーリングと、消費者データ リージョン用のキーリングを作成します。
gcloud kms keyrings create
CONTROL_PLANE_KEY_RING_NAME \ --locationCONTROL_PLANE_LOCATION \ --projectPROJECT_ID gcloud kms keyrings create
CONSUMER_DATA_KEY_RING_NAME \ --locationCONSUMER_DATA_REGION \ --projectPROJECT_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 \ --locationRUNTIMEDB_KEY_LOCATION \ --projectPROJECT_ID 次のように置き換えます。
- RUNTIMEDB_KEY_RING_NAME: 作成するデータベースのキーリングの名前。
- RUNTIMEDB_KEY_LOCATION: データベースのキーリングの物理的なロケーション。
- PROJECT_ID: Google Cloud プロジェクト ID。
Apigee の暗号鍵のロケーションは、Cloud HSM と Cloud EKM をサポートするすべての Cloud KMS のロケーションをサポートします。
gcloud kms keyrings create
RUNTIMEDISK_KEY_RING_NAME \ --locationRUNTIMEDISK_KEY_LOCATION \ --projectPROJECT_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
-
kms keys create
コマンドを使用して鍵を作成します。データ所在地が有効になっている場合は、コントロール プレーン用のキーリングと、消費者データ リージョン用のキーリングを作成します。
gcloud kms keys create
CONTROL_PLANE_KEY_NAME \ --keyringCONTROL_PLANE_KEY_RING_NAME \ --locationCONTROL_PLANE_LOCATION \ --purpose "encryption" \ --projectPROJECT_ID gcloud kms keys create
CONSUMER_DATA_KEY_NAME \ --keyringCONSUMER_DATA_KEY_RING_NAME \ --locationCONSUMER_DATA_REGION \ --purpose "encryption" \ --projectPROJECT_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 \ --keyringRUNTIMEDB_KEY_RING_NAME \ --locationRUNTIMEDB_KEY_LOCATION \ --purpose "encryption" \ --projectPROJECT_ID 次のように置き換えます。
- RUNTIMEDB_KEY_NAME: 作成するデータベースの鍵の名前。
- RUNTIMEDB_KEY_RING_NAME: 作成するデータベースのキーリングの名前。
- RUNTIMEDB_KEY_LOCATION: データベースのキーリングの物理的なロケーション。
- PROJECT_ID: Google Cloud プロジェクト ID。
gcloud kms keys create
RUNTIMEDISK_KEY_NAME \ --keyringRUNTIMEDISK_KEY_RING_NAME \ --locationRUNTIMEDISK_KEY_LOCATION \ --purpose "encryption" \ --projectPROJECT_ID 次のように置き換えます。
- RUNTIMEDISK_KEY_NAME: 作成するディスクの鍵の名前。
- RUNTIMEDISK_KEY_RING_NAME: 作成するディスクのキーリングの名前。
- RUNTIMEDISK_KEY_LOCATION: ディスクのキーリングの物理的な場所。
- PROJECT_ID: Google Cloud プロジェクト ID。
このコマンドを実行すると鍵が作成され、キーリングに追加されます。
鍵を参照する場合は、鍵 ID を使用します。
-
gcloud kms keys add-iam-policy-binding
コマンドを使用して、Apigee サービス エージェントに新しい鍵を使用するためのアクセス権を付与します。データ所在地が有効になっている場合は、コントロール プレーン用のキーリングと、消費者データ リージョン用のキーリングを作成します。
gcloud kms keys add-iam-policy-binding
CONTROL_PLANE_KEY_NAME \ --locationCONTROL_PLANE_LOCATION \ --keyringCONTROL_PLANE_KEY_RING_NAME \ --member "serviceAccount:service-PROJECT_NUMBER @gcp-sa-apigee.iam.gserviceaccount.com" \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --projectPROJECT_ID gcloud kms keys add-iam-policy-binding
CONSUMER_DATA_KEY_NAME \ --locationCONSUMER_DATA_REGION \ --keyringCONSUMER_DATA_KEY_RING_NAME \ --member "serviceAccount:service-PROJECT_NUMBER @gcp-sa-apigee.iam.gserviceaccount.com" \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --projectPROJECT_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 \ --locationRUNTIMEDB_KEY_LOCATION \ --keyringRUNTIMEDB_KEY_RING_NAME \ --member serviceAccount:service-PROJECT_NUMBER @gcp-sa-apigee.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --projectPROJECT_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 \ --locationRUNTIMEDISK_KEY_LOCATION \ --keyringRUNTIMEDISK_KEY_RING_NAME \ --member serviceAccount:service-PROJECT_NUMBER @gcp-sa-apigee.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --projectPROJECT_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 HSM と Cloud 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 の取得をご覧ください。