curl --request POST \
--url https://kms.{region}.basaltic.sh/v1/keys/{key_id}/generate-data-key \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"number_of_bytes": 32
}
'import requests
url = "https://kms.{region}.basaltic.sh/v1/keys/{key_id}/generate-data-key"
payload = { "number_of_bytes": 32 }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({number_of_bytes: 32})
};
fetch('https://kms.{region}.basaltic.sh/v1/keys/{key_id}/generate-data-key', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://kms.{region}.basaltic.sh/v1/keys/{key_id}/generate-data-key",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'number_of_bytes' => 32
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://kms.{region}.basaltic.sh/v1/keys/{key_id}/generate-data-key"
payload := strings.NewReader("{\n \"number_of_bytes\": 32\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://kms.{region}.basaltic.sh/v1/keys/{key_id}/generate-data-key")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"number_of_bytes\": 32\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://kms.{region}.basaltic.sh/v1/keys/{key_id}/generate-data-key")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"number_of_bytes\": 32\n}"
response = http.request(request)
puts response.read_body{
"plaintext": "MzItYnl0ZS1yYW5kb20tZGF0YS1rZXktaGVyZQ==",
"ciphertext": "AQIDBHByb2QtbWFzdGVyL3dyYXBwZWQtZGs="
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "ACCESS_DENIED",
"message": "You don't have permission to perform this action",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"params": {
"instances": 2,
"pools": 0
}
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"params": {
"instances": 2,
"pools": 0
}
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "An internal error occurred",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}Generar una nueva clave de datos
Devuelve una clave de datos de texto sin formato nuevamente aleatoria más su forma envuelta (cifrada bajo esta clave KMS). Usar el texto sin cifrar inmediatamente y eliminarlo de la memoria; mantener el texto cifrado junto con los datos que protege la clave y volver a llamar a Decrypt para recuperar el texto sin cifrar a petición.
curl --request POST \
--url https://kms.{region}.basaltic.sh/v1/keys/{key_id}/generate-data-key \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"number_of_bytes": 32
}
'import requests
url = "https://kms.{region}.basaltic.sh/v1/keys/{key_id}/generate-data-key"
payload = { "number_of_bytes": 32 }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({number_of_bytes: 32})
};
fetch('https://kms.{region}.basaltic.sh/v1/keys/{key_id}/generate-data-key', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://kms.{region}.basaltic.sh/v1/keys/{key_id}/generate-data-key",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'number_of_bytes' => 32
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://kms.{region}.basaltic.sh/v1/keys/{key_id}/generate-data-key"
payload := strings.NewReader("{\n \"number_of_bytes\": 32\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://kms.{region}.basaltic.sh/v1/keys/{key_id}/generate-data-key")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"number_of_bytes\": 32\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://kms.{region}.basaltic.sh/v1/keys/{key_id}/generate-data-key")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"number_of_bytes\": 32\n}"
response = http.request(request)
puts response.read_body{
"plaintext": "MzItYnl0ZS1yYW5kb20tZGF0YS1rZXktaGVyZQ==",
"ciphertext": "AQIDBHByb2QtbWFzdGVyL3dyYXBwZWQtZGs="
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "ACCESS_DENIED",
"message": "You don't have permission to perform this action",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"params": {
"instances": 2,
"pools": 0
}
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"params": {
"instances": 2,
"pools": 0
}
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "An internal error occurred",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}kms:GenerateDataKey. Consulte permisos de KMS para obtener la lista completa, lo que cubre cada uno y un ejemplo de directiva.Autorizaciones
Un token bearer de OAuth 2.0, enviado como Authorization: Bearer <token>. Esta es la forma recomendada de autenticación.
Obtén el token intercambiando el par de claves de acceso de una cuenta de servicio en POST /v1/oauth/token con grant_type=client_credentials. Es el flujo estándar de credenciales de cliente; las bibliotecas compatibles con OAuth pueden obtener y renovar el token por ti.
curl -s -u "$KEY_ID:$SECRET" -d grant_type=client_credentials \
https://iam.basaltic.sh/v1/oauth/token
Los tokens duran una hora por defecto. El mismo par de claves de acceso también sirve como credencial AWS SigV4 para el endpoint de objetos compatible con S3, que solo acepta ese método de autenticación.
Parámetros de ruta
"3f8a1c2e-9b47-4d6a-bc11-0e2f5a7d9c41"
Cuerpo
Tamaño de la clave de datos generada en bytes: 16 (AES-128), 32 (AES-256, por defecto) o 64 (HMAC-SHA512). No se admite ningún otro tamaño: el HSM solo mantiene las claves de datos en esos tres anchos, y cualquier otro valor falla en la operación.
16, 32, 64 32
Respuesta
Clave de datos
Clave de datos de texto sin formato codificada en Base64. Usar inmediatamente, luego soltar — los que llaman NO deben persistir en esto. Vuelva a derivarlo bajo demanda llamando a Decrypt con el texto cifrado almacenado.
"MzItYnl0ZS1yYW5kb20tZGF0YS1rZXktaGVyZQ=="
Clave de datos codificada en Base64 envuelta bajo la clave KMS. Se puede almacenar de forma segura en reposo junto con los datos que protege la llave.
"AQIDBHByb2QtbWFzdGVyL3dyYXBwZWQtZGs="

