このトピックでは、鍵を自動または手動でローテーションする方法について説明します。鍵のローテーションの詳細については、鍵のローテーションをご覧ください。
必要なロール
鍵をローテーションするために必要な権限を取得するには、鍵に対する次の IAM ロールを付与するよう管理者に依頼してください。
- Cloud KMS 管理者 (
roles/cloudkms.admin) -
データを再暗号化する: Cloud KMS CryptoKey の暗号化/復号 (
roles/cloudkms.cryptoKeyEncrypterDecrypter)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
これらの事前定義ロールには、鍵のローテーションに必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
鍵をローテーションするには、次の権限が必要です。
-
メインの鍵バージョンを変更する:
cloudkms.cryptoKeys.update -
自動ローテーションを変更または無効にする:
cloudkms.cryptoKeys.update -
新しい鍵バージョンを作成する:
cloudkms.cryptoKeyVersions.create -
古い鍵バージョンを無効にする:
cloudkms.cryptoKeyVersions.update -
データを再暗号化する:
-
cloudkms.cryptoKeyVersions.useToDecrypt -
cloudkms.cryptoKeyVersions.useToEncrypt
-
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
これらの権限のすべてを含むカスタムロールを持つ 1 人のユーザーが、鍵をローテーションし、独自にデータを再暗号化できます。Cloud KMS 管理者のロールを持つユーザーと Cloud KMS 暗号鍵の暗号化/復号のロールを持つユーザーは、協力して鍵のローテーションとデータの再暗号化を行うことができます。ロールを割り当てるときは、最小権限の原則に従います。詳細については、権限とロールをご覧ください。
鍵をローテーションする場合、以前の鍵バージョンで暗号化されたデータは自動的に再暗号化されることはありません。詳しくは、復号と再暗号化をご覧ください。鍵をローテーションしても、既存の鍵バージョンが自動的に無効になったり、破棄されたりすることはありません。不要になった鍵バージョンを破棄すると、費用を削減できます。
自動ローテーションを構成する
カスタム ローテーション スケジュールで新しい鍵を作成する
新しい鍵の作成時に自動ローテーションを構成するには:
コンソール
Google Cloud コンソールを使用して鍵を作成すると、Cloud KMS は自動的にローテーション期間と次のローテーション時間を設定します。デフォルト値を使用するか、別の値を指定できます。
異なるローテーション期間と開始時間を指定する場合は、鍵の作成時に次の操作を行ってから、[作成] ボタンをクリックします。
[鍵のローテーション期間] で、オプションを選択します。
[開始日] で、最初の自動ローテーションを行う日付を選択します。[開始日] をデフォルト値のままにして、鍵を作成してから 1 回の鍵のローテーション期間が経過した後に最初の自動ローテーションを開始できます。
gcloud
コマンドラインで Cloud KMS を使用するには、まず Google Cloud CLI の最新バージョンをインストールまたはアップグレードします。
gcloud kms keys create KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--purpose "encryption" \
--rotation-period ROTATION_PERIOD \
--next-rotation-time NEXT_ROTATION_TIME
以下を置き換えます。
KEY_NAME: 鍵の名前KEY_RING: 鍵を含むキーリングの名前。LOCATION: キーリングの Cloud KMS のロケーションROTATION_PERIOD: 鍵をローテーションする間隔。たとえば、30dは 30 日ごとに鍵をローテーションします。ローテーション期間は 1 日~100 年にする必要があります。詳細については、CryptoKey.rotationPeriod をご覧ください。NEXT_ROTATION_TIME: 最初のローテーションが完了する時点のタイムスタンプ(例:2023-01-01T01:02:03)。--next-rotation-timeを省略すると、最初のローテーションをコマンドの実行時から 1 回のローテーション期間にスケジュール設定できます。詳細については、CryptoKey.nextRotationTimeをご覧ください。
すべてのフラグと有効な値については、--help フラグを指定してコマンドを実行してください。
C#
このコードを実行するには、まず C# 開発環境を設定し、Cloud KMS C# SDK をインストールします。
Go
このコードを実行するには、まず Go 開発環境を設定し、Cloud KMS Go SDK をインストールします。
Java
このコードを実行するには、まず Java 開発環境を設定し、Cloud KMS Java SDK をインストールします。
Node.js
このコードを実行するには、まず Node.js 開発環境を設定し、Cloud KMS Node.js SDK をインストールします。
PHP
このコードを実行するには、まず Google Cloudでの PHP の使用について学び、Cloud KMS PHP SDK をインストールします。
Python
このコードを実行するには、まず Python 開発環境を設定し、Cloud KMS Python SDK をインストールします。
Ruby
このコードを実行するには、まず Ruby 開発環境を設定し、Cloud KMS Ruby SDK をインストールします。
API
これらの例では、HTTP クライアントとして curl を使用して API の使用例を示しています。アクセス制御の詳細については、Cloud KMS API へのアクセスをご覧ください。
鍵を作成するには、CryptoKey.create メソッドを使用します。
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?crypto_key_id=KEY_NAME" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data '{"purpose": "PURPOSE", "rotationPeriod": "ROTATION_PERIOD", "nextRotationTime": "NEXT_ROTATION_TIME"}'
以下を置き換えます。
PURPOSE: 鍵の目的。ROTATION_PERIOD: 鍵をローテーションする間隔。たとえば、30dは 30 日ごとに鍵をローテーションします。ローテーション期間は 1 日~100 年にする必要があります。詳細については、CryptoKey.rotationPeriod をご覧ください。NEXT_ROTATION_TIME: 最初のローテーションが完了する時点のタイムスタンプ(例:2023-01-01T01:02:03)。詳細については、CryptoKey.nextRotationTimeをご覧ください。
既存の鍵を更新してローテーション スケジュールを追加する
既存の鍵で自動ローテーションを構成するには:
コンソール
Google Cloud コンソールで、[鍵管理] ページに移動します。
ローテーション スケジュールを追加する鍵を含むキーリングの名前をクリックします。
ローテーション スケジュールを追加する鍵をクリックします。
ヘッダーで [ローテーション期間を編集] をクリックします。
プロンプトで、[ローテーション期間] フィールドと [開始日] フィールドで新しい値を選択します。
プロンプトで [保存] をクリックします。
gcloud
コマンドラインで Cloud KMS を使用するには、まず Google Cloud CLI の最新バージョンをインストールまたはアップグレードします。
gcloud kms keys update KEY_NAME \
--location LOCATION \
--keyring KEY_RING \
--rotation-period ROTATION_PERIOD \
--next-rotation-time NEXT_ROTATION_TIME
以下を置き換えます。
KEY_NAME: 鍵の名前KEY_RING: 鍵を含むキーリングの名前。LOCATION: キーリングの Cloud KMS のロケーションROTATION_PERIOD: 鍵をローテーションする間隔。たとえば、30dは 30 日ごとに鍵をローテーションします。ローテーション期間は 1 日~100 年にする必要があります。詳細については、CryptoKey.rotationPeriod をご覧ください。NEXT_ROTATION_TIME: 次のローテーションが完了する時点のタイムスタンプ(例:2023-01-01T01:02:03)。--next-rotation-timeを省略すると、次のローテーションをコマンドの実行時から 1 回のローテーション期間にスケジュール設定できます。詳細については、CryptoKey.nextRotationTimeをご覧ください。
すべてのフラグと有効な値については、--help フラグを指定してコマンドを実行してください。
C#
このコードを実行するには、まず C# 開発環境を設定し、Cloud KMS C# SDK をインストールします。
Go
このコードを実行するには、まず Go 開発環境を設定し、Cloud KMS Go SDK をインストールします。
Java
このコードを実行するには、まず Java 開発環境を設定し、Cloud KMS Java SDK をインストールします。
Node.js
このコードを実行するには、まず Node.js 開発環境を設定し、Cloud KMS Node.js SDK をインストールします。