既存の鍵にローテーション スケジュールを追加する
もっと見る
このコードサンプルを含む詳細なドキュメントについては、以下をご覧ください。
コードサンプル
C#
Cloud KMS 用のクライアント ライブラリをインストールして使用する方法については、Cloud KMS クライアント ライブラリをご覧ください。
Cloud KMS に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
using Google.Cloud.Kms.V1;
using Google.Protobuf.WellKnownTypes;
using System;
public class UpdateKeyAddRotationSample
{
public CryptoKey UpdateKeyAddRotation(string projectId = "my-project", string locationId = "us-east1", string keyRingId = "my-key-ring", string keyId = "my-key")
{
// Create the client.
KeyManagementServiceClient client = KeyManagementServiceClient.Create();
// Build the key.
CryptoKey key = new CryptoKey
{
// Provide the name of the key to update.
CryptoKeyName = new CryptoKeyName(projectId, locationId, keyRingId, keyId),
// Rotate the key every 30 days.
RotationPeriod = new Duration
{
Seconds = 60 * 60 * 24 * 30, // 30 days
},
// Start the first rotation in 24 hours.
NextRotationTime = new Timestamp
{
Seconds = new DateTimeOffset(DateTime.UtcNow.AddHours(24)).ToUnixTimeSeconds(),
}
};
// Build the update mask.
FieldMask fieldMask = new FieldMask
{
Paths = { "rotation_period", "next_rotation_time" },
};
// Call the API.
CryptoKey result = client.UpdateCryptoKey(key, fieldMask);
// Return the updated key.
return result;
}
}
Go
Cloud KMS 用のクライアント ライブラリをインストールして使用する方法については、Cloud KMS クライアント ライブラリをご覧ください。
Cloud KMS に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
import (
"context"
"fmt"
"io"
"time"
kms "cloud.google.com/go/kms/apiv1"
"cloud.google.com/go/kms/apiv1/kmspb"
fieldmask "google.golang.org/genproto/protobuf/field_mask"
"google.golang.org/protobuf/types/known/durationpb"
"google.golang.org/protobuf/types/known/timestamppb"
)
// addRotationSchedule updates a key to add a rotation schedule. If the key
// already has a rotation schedule, it is overwritten.
func addRotationSchedule(w io.Writer, name string) error {
// name := "projects/my-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key"
// Create the client.
ctx := context.Background()
client, err := kms.NewKeyManagementClient(ctx)
if err != nil {
return fmt.Errorf("failed to create kms client: %w", err)
}
defer client.Close()
// Build the request.
req := &kmspb.UpdateCryptoKeyRequest{
CryptoKey: &kmspb.CryptoKey{
// Provide the name of the key to update
Name: name,
// Rotate the key every 30 days
RotationSchedule: &kmspb.CryptoKey_RotationPeriod{
RotationPeriod: &durationpb.Duration{
Seconds: int64(60 * 60 * 24 * 30), // 30 days
},
},
// Start the first rotation in 24 hours
NextRotationTime: ×tamppb.Timestamp{
Seconds: time.Now().Add(24 * time.Hour).Unix(),
},
},
UpdateMask: &fieldmask.FieldMask{
Paths: []string{"rotation_period", "next_rotation_time"},
},
}
// Call the API.
result, err := client.UpdateCryptoKey(ctx, req)
if err != nil {
return fmt.Errorf("failed to update key: %w", err)
}
fmt.Fprintf(w, "Updated key: %s\n", result.Name)
return nil
}
Java
Cloud KMS 用のクライアント ライブラリをインストールして使用する方法については、Cloud KMS クライアント ライブラリをご覧ください。
Cloud KMS に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
import com.google.cloud.kms.v1.CryptoKey;
import com.google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose;
import com.google.cloud.kms.v1.CryptoKeyName;
import com.google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionAlgorithm;
import com.google.cloud.kms.v1.CryptoKeyVersionTemplate;
import com.google.cloud.kms.v1.KeyManagementServiceClient;
import com.google.protobuf.Duration;
import com.google.protobuf.FieldMask;
import com.google.protobuf.Timestamp;
import com.google.protobuf.util.FieldMaskUtil;
import java.io.IOException;
import java.time.temporal.ChronoUnit;
public class UpdateKeyAddRotation {
public void updateKeyAddRotation() throws IOException {
// TODO(developer): Replace these variables before running the sample.
String projectId = "your-project-id";
String locationId = "us-east1";
String keyRingId = "my-key-ring";
String keyId = "my-key";
updateKeyAddRotation(projectId, locationId, keyRingId, keyId);
}
// Update a key to add or change a rotation schedule.
public void updateKeyAddRotation(
String projectId, String locationId, String keyRingId, String keyId) throws IOException {
// Initialize client that will be used to send requests. This client only
// needs to be created once, and can be reused for multiple requests. After
// completing all of your requests, call the "close" method on the client to
// safely clean up any remaining background resources.
try (KeyManagementServiceClient client = KeyManagementServiceClient.create()) {
// Build the name from the project, location, and key ring.
CryptoKeyName cryptoKeyName = CryptoKeyName.of(projectId, locationId, keyRingId, keyId);
// Calculate the date 24 hours from now (this is used below).
long tomorrow = java.time.Instant.now().plus(24, ChronoUnit.HOURS).getEpochSecond();
// Build the key to update with a rotation schedule.
CryptoKey key =
CryptoKey.newBuilder()
.setName(cryptoKeyName.toString())
.setPurpose(CryptoKeyPurpose.ENCRYPT_DECRYPT)
.setVersionTemplate(
CryptoKeyVersionTemplate.newBuilder()
.setAlgorithm(CryptoKeyVersionAlgorithm.GOOGLE_SYMMETRIC_ENCRYPTION))
// Rotate every 30 days.
.setRotationPeriod(
Duration.newBuilder().setSeconds(java.time.Duration.ofDays(30).getSeconds()))
// Start the first rotation in 24 hours.
.setNextRotationTime(Timestamp.newBuilder().setSeconds(tomorrow))
.build();
// Construct the field mask.
FieldMask fieldMask = FieldMaskUtil.fromString("rotation_period,next_rotation_time");
// Update the key.
CryptoKey updatedKey = client.updateCryptoKey(key, fieldMask);
System.out.printf("Updated key %s%n", updatedKey.getName());
}
}
}
Node.js
Cloud KMS 用のクライアント ライブラリをインストールして使用する方法については、Cloud KMS クライアント ライブラリをご覧ください。
Cloud KMS に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
//
// TODO(developer): Uncomment these variables before running the sample.
//
// const projectId = 'my-project';
// const locationId = 'us-east1';
// const keyRingId = 'my-key-ring';
// const keyId = 'my-key';
// const versionId = '123';
// Imports the Cloud KMS library
const {KeyManagementServiceClient} = require('@google-cloud/kms');
// Instantiates a client
const client = new KeyManagementServiceClient();
// Build the key name
const keyName = client.cryptoKeyPath(projectId, locationId, keyRingId, keyId);
async function updateKeyAddRotation() {
const [key] = await client.updateCryptoKey({
cryptoKey: {
name: keyName,
// Rotate the key every 30 days.
rotationPeriod: {
seconds: 60 * 60 * 24 * 30,
},
// Start the first rotation in 24 hours.
nextRotationTime: {
seconds: new Date().getTime() / 1000 + 60 * 60 * 24,
},
},
updateMask: {
paths: ['rotation_period', 'next_rotation_time'],
},
});
console.log(`Updated rotation for: ${key.name}`);
return key;
}
return updateKeyAddRotation();
PHP
Cloud KMS 用のクライアント ライブラリをインストールして使用する方法については、Cloud KMS クライアント ライブラリをご覧ください。
Cloud KMS に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
use Google\Cloud\Kms\V1\Client\KeyManagementServiceClient;
use Google\Cloud\Kms\V1\CryptoKey;
use Google\Cloud\Kms\V1\UpdateCryptoKeyRequest;
use Google\Protobuf\Duration;
use Google\Protobuf\FieldMask;
use Google\Protobuf\Timestamp;
function update_key_add_rotation(
string $projectId = 'my-project',
string $locationId = 'us-east1',
string $keyRingId = 'my-key-ring',
string $keyId = 'my-key'
): CryptoKey {
// Create the Cloud KMS client.
$client = new KeyManagementServiceClient();
// Build the key name.
$keyName = $client->cryptoKeyName($projectId, $locationId, $keyRingId, $keyId);
// Build the key.
$key = (new CryptoKey())
->setName($keyName)
// Rotate the key every 30 days.
->setRotationPeriod((new Duration())
->setSeconds(60 * 60 * 24 * 30)
)
// Start the first rotation in 24 hours.
->setNextRotationTime((new Timestamp())
->setSeconds(time() + 60 * 60 * 24)
);
// Create the field mask.
$updateMask = (new FieldMask())
->setPaths(['rotation_period', 'next_rotation_time']);
// Call the API.
$updateCryptoKeyRequest = (new UpdateCryptoKeyRequest())
->setCryptoKey($key)
->setUpdateMask($updateMask);
$updatedKey = $client->updateCryptoKey($updateCryptoKeyRequest);
printf('Updated key: %s' . PHP_EOL, $updatedKey->getName());
return $updatedKey;
}
Python
Cloud KMS 用のクライアント ライブラリをインストールして使用する方法については、Cloud KMS クライアント ライブラリをご覧ください。
Cloud KMS に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
import time
from google.cloud import kms
def update_key_add_rotation(
project_id: str, location_id: str, key_ring_id: str, key_id: str
) -> kms.CryptoKey:
"""
Add a rotation schedule to an existing key.
Args:
project_id (string): Google Cloud project ID (e.g. 'my-project').
location_id (string): Cloud KMS location (e.g. 'us-east1').
key_ring_id (string): ID of the Cloud KMS key ring (e.g. 'my-key-ring').
key_id (string): ID of the key to use (e.g. 'my-key').
Returns:
CryptoKey: Updated Cloud KMS key.
"""
# Create the client.
client = kms.KeyManagementServiceClient()
# Build the key name.
key_name = client.crypto_key_path(project_id, location_id, key_ring_id, key_id)
key = {
"name": key_name,
"rotation_period": {
"seconds": 60 * 60 * 24 * 30 # Rotate the key every 30 days.
},
"next_rotation_time": {
"seconds": int(time.time())
+ 60 * 60 * 24 # Start the first rotation in 24 hours.
},
}
# Build the update mask.
update_mask = {"paths": ["rotation_period", "next_rotation_time"]}
# Call the API.
updated_key = client.update_crypto_key(
request={"crypto_key": key, "update_mask": update_mask}
)
print(f"Updated key: {updated_key.name}")
return updated_key
Ruby
Cloud KMS 用のクライアント ライブラリをインストールして使用する方法については、Cloud KMS クライアント ライブラリをご覧ください。
Cloud KMS に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
# TODO(developer): uncomment these values before running the sample.
# project_id = "my-project"
# location_id = "us-east1"
# key_ring_id = "my-key-ring"
# key_id = "my-key"
# Require the library.
require "google/cloud/kms"
# Create the client.
client = Google::Cloud::Kms.key_management_service
# Build the parent key name.
key_name = client.crypto_key_path project: project_id,
location: location_id,
key_ring: key_ring_id,
crypto_key: key_id
# Build the key.
key = {
name: key_name,
# Rotate the key every 30 days.
rotation_period: {
seconds: 60 * 60 * 24 * 30
},
# Start the first rotation in 24 hours.
next_rotation_time: {
seconds: (Time.now + (60 * 60 * 24)).to_i
}
}
# Build the field mask.
update_mask = { paths: ["rotation_period", "next_rotation_time"] }
# Call the API.
updated_key = client.update_crypto_key crypto_key: key, update_mask: update_mask
puts "Updated key: #{updated_key.name}"
次のステップ
他の Google Cloud プロダクトに関連するコードサンプルの検索およびフィルタ検索を行うには、Google Cloud のサンプルをご覧ください。