手動でのルート鍵のローテート
回転させることができます ルートキーA symmetric wrapping key that is used for encrypting and decrypting other keys that are stored in a data service.オンデマンドでIBM Cloud®Hyper Protect Crypto Services 。
ルート鍵をローテートすると、鍵の存続期間が短くなり、その鍵で保護される情報量が制限されます。
鍵のローテーションがどのように業界標準や暗号のベスト・プラクティスへの準拠に役立つのかについては、『鍵のローテーション』を参照してください。
UI でルート キーをローテーションする
グラフィカル インターフェイスを使用してルート キーをローテーションする場合は、UI を使用できます。
サービス内にルート鍵を作成するか、既存のルート鍵をインポートした後、鍵をローテートするには以下の手順を実行します。
-
「メニュー」>**「リソース・リスト」**に移動し、リソースのリストを表示します。
-
IBM Cloud リソース・リストで、Hyper Protect Crypto Services のプロビジョン済みインスタンスを選択します。
-
**「KMS 鍵 (KMS keys)」ページで、「鍵」**テーブルを使用して、このサービスの鍵を参照します。
-
削除したいキーを選択し、アクション・アイコン
をクリックしてそのキーのオプションのリストを開きます。
-
オプション・メニューから、 **「鍵のローテート (Rotate key)」**をクリックします。
最初に鍵の鍵素材を指定した場合は、サービスで保管および管理する新しい base64 エンコードの鍵素材を指定します。 鍵の素材が以下の要件に適合していることを確認してください。
- 128、192、または 256 ビットである必要があります。
- データのバイト数 (例えば、256 ビットの場合は 32 バイト) は、base64 エンコードを使用してエンコードされていなければなりません。
-
**「鍵のローテート (Rotate key)」**をクリックして確認します。
API を使用したルート鍵のローテート
以下のエンドポイントに対して POST
呼び出しを行うことによって、ルート鍵をローテートできます。
https://<instance_ID>.api.<region>.hs-crypto.appdomain.cloud/api/v2/keys/<key_ID>/actions/rotate
-
ローテートするルート鍵の ID をコピーします。
サービスインスタンス内のキーのIDは、次の方法で見つけることができます。キーのリストを取得しています、または UI にアクセスして行います。
-
以下の cURL コマンドを実行して、この鍵を新しい鍵素材に置き換えます。
curl -X POST \ 'https://<instance_ID>.api.<region>.hs-crypto.appdomain.cloud/api/v2/keys/<key_ID>/actions/rotate' \ -H 'accept: application/vnd.ibm.kms.key_action+json' \ -H 'authorization: Bearer <IAM_token>' \ -H 'bluemix-instance: <instance_ID>' \ -H "x-kms-key-ring: <key_ring_ID>" \ -H 'content-type: application/vnd.ibm.kms.key_action+json' \ -d '{ "payload": "<key_material>" }'
次の表に従って、例の要求内の変数を置き換えてください。
変数 説明 region
必須。 Hyper Protect Crypto Services サービス・インスタンスを置く地理的領域を表す、地域の省略形 ( us-south
、au-syd
など)。 詳細については、リージョナル・サービス・エンドポイントを参照してください。port
必須。 API エンドポイントのポート番号。 key_ID
必須。 ローテートするルート鍵の固有 ID。 IAM_token
必須。 IBM Cloud アクセス・トークン。 Bearer 値を含む、 IAM
トークンの全コンテンツを cURL 要求に組み込みます。 詳細については、アクセス・トークンのリトリーブを参照してください。instance_ID
必須。 Hyper Protect Crypto Services サービス・インスタンスに割り当てられた固有 ID。 詳細については、インスタンス ID のリトリーブを参照してください。 key_ring_ID
オプション。 鍵が属する鍵リングの固有 ID。 指定しないと、Hyper Protect Crypto Services は、指定されたインスタンスに関連付けられているすべての鍵リングで鍵を検索します。 このため、鍵リング ID を指定して、より最適化された要求を行うことをお勧めします。 注:
x-kms-key-ring
ヘッダーを指定せずに作成した鍵の鍵リング ID は「default」になります。 詳しくは、鍵リングの管理を参照してください。key_material
オプション。 サービスで保管および管理する、新しい base64 エンコードの 鍵素材。 この値は、サービスへの鍵の追加時に鍵素材を最初にインポートした場合に必要になります。 \n \n 最初に生成されたキーをローテーションするにはHyper Protect Crypto Services 、省略 `payload` 属性を追加し、空のリクエスト エンティティ本体を渡します。 インポートしたキーをローテーションするには、次の要件を満たすキー マテリアルを提供します。 \n * キーは 128、192、または 256 ビットである必要があります。 \n * データのバイト数 (例えば、256 ビットの場合は 32 バイト) は、base64 エンコードを使用してエンコードされていなければなりません。 |
ローテーション要求が成功すると、HTTP
204 No Content
応答が返されます。これは、ルート鍵が新しい鍵素材に置き換えられたことを示しています。 -
オプション: 次の呼び出しを実行して Hyper Protect Crypto Services サービス・インスタンス内の鍵を表示し、鍵がローテートされたことを確認します。
curl -X GET \ https://<instance_ID>.api.<region>.hs-crypto.appdomain.cloud/api/v2/keys \ -H 'accept: application/vnd.ibm.collection+json' \ -H 'authorization: Bearer <IAM_token>' \ -H 'bluemix-instance: <instance_ID>' \
応答エンティティー本体内の
lastRotateDate
の値を確認して、鍵が最後にローテートされた日時を調べます。{ "metadata": { "collectionType": "application/vnd.ibm.kms.key+json", "collectionTotal": 1 }, "resources": [ { "type": "application/vnd.ibm.kms.key+json", "id": "02fd6835-6001-4482-a892-13bd2085f75d", "name": "test-root-key", "state": 1, "extractable": false, "crn": "crn:v1:bluemix:public:hs-crypto:us-south:a/f047b55a3362ac06afad8a3f2f5586ea:12e8c9c2-a162-472d-b7d6-8b9a86b815a6:key:02fd6835-6001-4482-a892-13bd2085f75d", "imported": false, "creationDate": "2020-03-12T03:50:12Z", "createdBy": "...", "algorithmType": "AES", "algorithmMetadata": { "bitLength": "256", "mode": "CBC_PAD" }, "algorithmBitSize": 256, "algorithmMode": "CBC_PAD", "lastUpdateDate": "2020-03-12T03:50:12Z", "lastRotateDate": "2020-03-12T03:49:01Z", "keyVersion": { "id": "2291e4ae-a14c-4af9-88f0-27c0cb2739e2", "creationDate": "2020-03-12T03:50:12Z" }, "dualAuthDelete": { "enabled": false }, "deleted": false } ] }
keyVersion
属性には、ルート鍵の最新バージョンを記述する識別情報が含まれています。また、以下を使用して、キーに使用可能なバージョンをリストすることもできます。 Hyper Protect Crypto Services キー管理サービス API。 詳しくは、鍵のバージョンの表示を参照してください。
インポート・トークンを使用した鍵のローテート
最初にインポート・トークンを使用してルート鍵をインポートした場合は、以下のエンドポイントに対して POST
呼び出しを行うことによって、鍵をローテートできます。
https://<instance_ID>.api.<region>.hs-crypto.appdomain.cloud/api/v2/keys/<key_ID>/actions/rotate
-
サービス内で鍵の処理を行うために、認証資格情報を取得します。
キーをローテーションするには、インスタンスまたはキーの_「ライター」または「マネージャー」_アクセス権限ポリシーが割り当てられている必要があります。 IAM 役割と Hyper Protect Crypto Services サービスでのアクションの対応関係について詳しくは、サービス・アクセスの役割を参照してください。
-
ローテートする鍵の ID を取得します。
指定したキーのIDを取得するには、
GET /v2/keys
リクエストするか、UI でキーを表示します。 -
インポート・トークンを使用して、既存の鍵をローテートするために使用する鍵素材を暗号化します。
インポート・トークンの使用方法については、 チュートリアル: 暗号鍵の作成とインポートを確認してください。
-
以下の cURL コマンドを実行して、既存の鍵を新しい鍵素材に置き換えます。
curl -X POST \ https://<instance_ID>.api.<region>.hs-crypto.appdomain.cloud/api/v2/keys/<key_ID>/actions/rotate \ -H 'authorization: Bearer <IAM_token>' \ -H 'bluemix-instance: <instance_ID>' \ -H 'accept: application/vnd.ibm.kms.key_action+json' \ -H 'content-type: application/vnd.ibm.kms.key_action+json' \ -d '{ "type": "application/vnd.ibm.kms.key+json", "name": "<key_alias>", "description": "<key_description>", "extractable": <key_type>, "payload": "<encrypted_key>", "encryptionAlgorithm": "RSAES_OAEP_SHA_1", "encryptedNonce": "<encrypted_nonce>", "iv": "<iv>" }'
次の表に従って、例の要求内の変数を置き換えてください。
変数 説明 region
必須。 Hyper Protect Crypto Services サービス・インスタンスを置く地理的領域を表す、地域の省略形 ( us-south
、au-syd
など)。 詳細については、リージョナル・サービス・エンドポイントを参照してください。port
必須。 API エンドポイントのポート番号。 key_ID
必須。 ローテートする鍵の 固有 ID。 |
|
IAM_token
| 必須。 IBM Cloud アクセス・トークン。 Bearer 値を含む、IAM
トークンの全コンテンツを cURL 要求に組み込みます。 詳細については、アクセス・トークンのリトリーブを参照してください。 | |instance_ID
| 必須。 Hyper Protect Crypto Services サービス・インスタンスに割り当てられた固有 ID。 詳細については、インスタンス ID のリトリーブを参照してください。 | |key_alias
| 必須。 鍵を簡単に識別するための、人間が理解できる固有の名前。 プライバシーを保護するため、個人データを鍵のメタデータとして保管しないでください。 | |key_description
| 鍵の詳しい説明。 プライバシーを保護するため、個人データを鍵のメタデータとして保管しないでください。 | |encrypted_key
| 必須。 インポート・トークンによって暗号化される新しい鍵素材。 この値は base64 エンコードでなければ なりません。 鍵素材が以下の要件を満たしていることを確認してください。 \n * 鍵は 128 ビット、192 ビット、または 256 ビットでなければなりません。 \n * データのバイト数 (例えば、256 ビットの場合は 32 バイト) は、base64 エンコードを使用してエンコードされていなければなりません。 \n \n 詳しくは、 チュートリアル: 暗号鍵の作成とインポートを参照してください。 | |key_type
| 鍵の素材をサービスの外に出すことができるかどうかを決定するブール値。 設定するとextractable
属性false
サービスはキーをルートキーとして指定し、wrap
またはunwrap
オペレーション。 | |encrypted_nonce
| 必須。 要求の一部として送信されるビットがその送信先で受信されるビットとまったく同じであることを確認するための、AES-GCM で暗号化された nonce。 復元しようとしている鍵は、この nonce によって検証されます。 詳細については、チュートリアル: 暗号キーの作成とインポートを参照してください。 | |iv
| 必須。 nonce を暗号化する際に、AES-GCM アルゴリズムによって生成される初期設定ベクトル (IV)。 この値は、Hyper Protect Crypto Services システムへの保管のために鍵をデコードするために使用されます。 詳細については、チュートリアル: 暗号キーの作成とインポートを参照してください。 |ローテーション要求が成功すると、HTTP
204 No Content
応答が返されます。これは、ルート鍵が新しい鍵素材に置き換えられたことを示しています。 -
オプション: 鍵に関する詳細を取得して、鍵がローテートされたことを確認します。
curl -X GET \ https://<instance_ID>.api.<region>.hs-crypto.appdomain.cloud/api/v2/keys/<key_id>/metadata \ -H 'authorization: Bearer <IAM_token>' \ -H 'bluemix-instance: <instance_ID>' -H 'accept: application/vnd.ibm.kms.key+json'
応答エンティティー本体内の
lastRotateDate
およびkeyVersion
の値を確認して、 鍵が最後にローテートされた日時を調べます。また、Hyper Protect Crypto Services APIを使用して、鍵の使用可能なバージョンをリストすることもできます。 詳しくは、鍵のバージョンの表示を参照してください。
次の作業
- ルート鍵をローテートすると、そのルート鍵に関連付けられたデータ暗号鍵 (DEK) を保護するための新しい暗号鍵素材が使用可能になります。 プレーンテキスト形式でキーを公開せずにDEKSを再暗号化または再ラップする方法については、以下を参照してください。キーの再ラッピング。
- エンベロープ暗号化がクラウド内の保存データのセキュリティー制御にどのように役立つかについては、エンベロープ暗号化を使用したデータ保護を参照してください。
- プログラムによるキーの管理の詳細については、チェックしてくださいHyper Protect Crypto Servicesキー管理サービス API リファレンス ドキュメント。