ข้ามไปยังเนื้อหา
getnextpdf.com

Pro รุ่น

การลงนามด้วย Cloud KMS — การอ้างอิงเชิงลึก

หน้านี้เป็นเอกสารอ้างอิงระดับสัญญาสำหรับพื้นผิวการลงนาม cloud-KMS ของ NextPDF Pro พื้นผิวนี้ประกอบด้วย Service Provider Interface หนึ่งตัวคือ NextPDF\Pro\Security\Signing\Kms\KmsSignerInterface และตัวลงนามของผู้ให้บริการสามตัว ได้แก่ AwsKmsSigner, AzureKeyVaultSigner และ GcpKmsSigner อะแดปเตอร์สองตัวคือ AwsKmsSigningStrategy และ AzureKeyVaultSigningStrategy ทำหน้าที่เชื่อมตัวลงนามเข้ากับสัญญา SigningStrategy ของ Pro ตัวลงนามแต่ละตัวส่งเฉพาะ message digest ไปยังผู้ให้บริการผ่าน PSR-18 HTTP เท่านั้น คีย์ส่วนตัวและเอกสารจะไม่ข้ามขอบเขตนี้เลย หน้านี้ระบุ public API, สัญญาพฤติกรรมที่สังเกตได้ และโหมดความล้มเหลวแบบมีชนิดกำกับ การจัดการเซสชัน (RemoteSigningSession, SequentialSigner) และการประทับเวลา (PadesBtTimestamper) อยู่ในหน้าของตนเอง

ความสามารถนี้มาพร้อมกับ NextPDF Pro (nextpdf/pro) และเปิดใช้งานด้วย license envelope ระดับ Pro การติดตั้งที่ไม่มีสิทธิ์ดังกล่าวจะไม่โหลดคลาสของความสามารถนี้ เปรียบเทียบรุ่นและรับสิทธิ์ใช้งาน

สัญลักษณ์พารามิเตอร์พฤติกรรมเริ่มต้นคืนค่าโยนข้อยกเว้นหรือล้มเหลวด้วยหมายเหตุ
KmsSignerInterfaceขยายสัญญา HsmSignerInterface ของ CoreSPI สำหรับไดรเวอร์ KMS และ HSM; id ในตัวที่สงวนไว้: aws-kms, azure-keyvault, gcp-kms, pkcs11, openssl-cli
KmsSignerInterface::providerId()ไม่มีคีย์สำหรับค้นหาใน registry ที่เสถียรnon-empty-stringไดรเวอร์ของบุคคลที่สามต้องกำหนด namespace ให้กับตัวระบุของตน
KmsSignerInterface::signWithVersion()$data, $algorithm = 'sha256WithRSAEncryption', $keyVersion = nullเวอร์ชันคีย์ที่เป็น null จะย้อนกลับไปใช้ค่าเริ่มต้นของผู้ให้บริการออกเทตของลายเซ็นชนิด string: RSA ตามที่ผู้ให้บริการคืนค่ามา (วางลงใน SignerInfo.signature โดยตรง), ECDSA เป็น DER ECDSA-Sig-Value ตามกฎของ CMSKeyManagementException, UnsupportedAlgorithmException, SignatureFailedExceptionความหมายของ null ต่างกันในแต่ละผู้ให้บริการ; ดูสัญญาพฤติกรรม
KmsSignerInterface::supportsAlgorithm()string $algorithmการตรวจสอบความสามารถ; ไม่มีการทำ I/Oboolเรียกใช้ก่อนการเลือกผู้ให้บริการ
KmsSignerInterface::supportedAlgorithms()ไม่มีแสดงรายชื่อแบบ OpenSSL ที่ผู้ให้บริการยอมรับlist<non-empty-string>
AwsKmsSignerconstructor: AwsKmsConfig, cert DER, chain DER, PSR-18 client, PSR-17 factories, PSR-3 loggerอัลกอริทึมมีค่าเริ่มต้นเป็น KmsSigningAlgorithm::RsaPkcs1Sha256ดูเมท็อดfinal; PROVIDER_ID = 'aws-kms'
AwsKmsSigner::create()key id, cert DER, dependency ของ PSR, chain ที่เลือกได้, config, loggerสร้าง AwsKmsConfig::fromEnvironment($keyId) เมื่อ $config เป็น nullselfอ่านตัวแปรสภาพแวดล้อม AWS_* มาตรฐาน
AwsKmsSigner::withAlgorithm()KmsSigningAlgorithm $algorithmคืนค่าโคลนที่ถูกแก้ไขselfต้องตรงกับชนิดของคีย์ที่จัดเตรียมไว้ใน AWS KMS
AwsKmsSigner::sign()$data, $algorithm = 'sha256WithRSAEncryption'มอบหมายให้ signWithVersion($data, $algorithm, null)stringเหมือน signWithVersion()เส้นทางสัญญา Core แบบสองอาร์กิวเมนต์รุ่นเดิม
AzureKeyVaultSignerconstructor: AzureKeyVaultConfig, cert DER, chain DER, PSR-18 client, PSR-17 factories, PSR-3 loggerอัลกอริทึมมีค่าเริ่มต้นเป็น AzureSigningAlgorithm::Rs256; access token ใน config จะใช้เป็นค่าเริ่มต้นของ bearer tokenดูเมท็อดfinal; PROVIDER_ID = 'azure-keyvault'
AzureKeyVaultSigner::create()vault name, key name, cert DER, dependency ของ PSR, chain ที่เลือกได้, config, loggerสร้าง AzureKeyVaultConfig::fromEnvironment() เมื่อ $config เป็น nullselfรองรับ token ที่ได้มาล่วงหน้าหรือ credential ของ service-principal
AzureKeyVaultSigner::withAlgorithm()AzureSigningAlgorithm $algorithmคืนค่าโคลนที่ถูกแก้ไขselfคีย์ RSA ใช้ค่า RS/PS; คีย์ EC ใช้ค่า ES
GcpKmsSignerconstructor: GcpKmsConfig, cert DER, chain DER, PSR-18 client, PSR-17 factories, PSR-3 loggerอัลกอริทึมมีค่าเริ่มต้นเป็น GcpKmsSigningAlgorithm::RsaSignPkcs1_2048Sha256ดูเมท็อดfinal; PROVIDER_ID = 'gcp-kms', API_VERSION = 'v1'
GcpKmsSigner::create()project id, location, key ring, crypto key, cert DER, dependency ของ PSR, chain ที่เลือกได้, config, loggerสร้าง GcpKmsConfig::fromEnvironment() เมื่อ $config เป็น nullselfการขอ bearer token ถูกมอบหมายให้ผู้เรียกใช้
GcpKmsSigner::withAlgorithm()GcpKmsSigningAlgorithm $algorithmเป็นเพียงการแสดงตัวอย่างในช่วง config เท่านั้น; wire name ต่อการเรียกจะมีผลเหนือกว่าในเวลาลงนามselfขนาดคีย์ถูกกำหนดตายตัวโดย CryptoKeyVersion ที่จัดเตรียมไว้
AwsKmsSigningStrategyconstructor: AwsKmsSigner $signerทำงานแบบซิงโครนัส; isAsync() คืนค่า falseส่งต่อข้อยกเว้นของตัวลงนามที่ถูกห่อไว้อะแดปเตอร์สำหรับ RemoteSigningSession::complete()
AzureKeyVaultSigningStrategyconstructor: AzureKeyVaultSigner $signerทำงานแบบซิงโครนัส; isAsync() คืนค่า falseส่งต่อข้อยกเว้นของตัวลงนามที่ถูกห่อไว้อะแดปเตอร์สำหรับ RemoteSigningSession::complete()
KmsSigningAlgorithmenum, 9 เคส (RSA PKCS#1, RSA-PSS, ECDSA; SHA-256/384/512)ค่า wire ของ SigningAlgorithm ใน AWS KMSInvalidArgumentException จาก fromOpenSslName()resolveForWireName() คงค่า PSS digest ที่กำหนดไว้
AzureSigningAlgorithmenum, 9 เคส (RS256ES512)ค่าแบบ JWA ของ Azure Key VaultInvalidArgumentException จาก fromOpenSslName()isEcdsa() ระบุค่าที่ผลลัพธ์ต้องแปลงเป็น DER
GcpKmsSigningAlgorithmenum, 10 เคส (EC P-256/P-384, RSA PKCS#1, RSA-PSS)ค่าอัลกอริทึมของ CryptoKeyVersion ใน GCPUnsupportedAlgorithmException จาก fromOpenSslName()การแปลง wire name จะเลือกขนาดคีย์ที่ตรงกันเล็กที่สุด
public function providerId(): string;
public function signWithVersion(
string $data,
string $algorithm = 'sha256WithRSAEncryption',
?string $keyVersion = null,
): string;
public function supportsAlgorithm(string $algorithm): bool;
public function supportedAlgorithms(): array;
public static function create(
string $keyId,
string $certDer,
ClientInterface $httpClient,
RequestFactoryInterface $requestFactory,
StreamFactoryInterface $streamFactory,
array $chainDer = [],
?AwsKmsConfig $config = null,
?LoggerInterface $logger = null,
): self
public function withAlgorithm(KmsSigningAlgorithm $algorithm): self
public function sign(string $data, string $algorithm = 'sha256WithRSAEncryption'): string
public static function create(
string $vaultName,
string $keyName,
string $certDer,
ClientInterface $httpClient,
RequestFactoryInterface $requestFactory,
StreamFactoryInterface $streamFactory,
array $chainDer = [],
?AzureKeyVaultConfig $config = null,
?LoggerInterface $logger = null,
): self
public function withAlgorithm(AzureSigningAlgorithm $algorithm): self
public static function create(
string $projectId,
string $location,
string $keyRing,
string $cryptoKey,
string $certDer,
ClientInterface $httpClient,
RequestFactoryInterface $requestFactory,
StreamFactoryInterface $streamFactory,
array $chainDer = [],
?GcpKmsConfig $config = null,
?LoggerInterface $logger = null,
): self
public function withAlgorithm(GcpKmsSigningAlgorithm $algorithm): self
public function __construct(
private AwsKmsSigner $signer,
) {}
public function sign(string $signedAttributesDer): string
public function __construct(
private AzureKeyVaultSigner $signer,
) {}
public function sign(string $signedAttributesDer): string

KmsSignerInterface ขยายสัญญา HsmSignerInterface ของ Core โดยเพิ่ม providerId(), signWithVersion() ที่รับรู้เวอร์ชันคีย์ และการตรวจสอบความสามารถ supportsAlgorithm() และ supportedAlgorithms() เมท็อด sign() แบบสองอาร์กิวเมนต์ที่สืบทอดมาจะมอบหมายให้ signWithVersion() ด้วยเวอร์ชันคีย์ที่เป็น null บนตัวลงนามทั้งสามตัว getCertificateDer(), getCertificateChainDer() และ getPublicKeyAlgorithm() ถูกสร้างขึ้นจากวัสดุที่ constructor จัดหาให้ การตรวจสอบความสามารถไม่มีการทำ I/O ตัวลงนามแต่ละตัวยังเปิดเผย accessor getSigningAlgorithm() และ getConfig() สำหรับการตรวจสอบด้วย

ตัวลงนามแต่ละตัวจะแฮช $data ภายในเครื่องด้วย digest ของอัลกอริทึมที่แปลงแล้ว และส่งเฉพาะ digest นั้น AWS รับ digest แบบ base64 พร้อม MessageType: DIGEST Azure รับ digest แบบ base64url ใน body ของคำขอลงนาม GCP รับ digest แบบ base64 ในฟิลด์ digest เฉพาะของอัลกอริทึม ไบต์ของเอกสารจะไม่ปรากฏในคำขอของผู้ให้บริการเลย การส่งข้อมูลทั้งหมดใช้ PSR-18 HTTP client มาตรฐานผ่าน HTTPS endpoint ของผู้ให้บริการ; ไม่มีการใช้ SDK ของผู้ให้บริการคลาวด์ใด ๆ

signWithVersion() ตรวจสอบอาร์กิวเมนต์เวอร์ชันคีย์แบบ fail-closed ก่อนที่จะสร้างคำขอใด ๆ ค่าที่ไม่ผ่านไวยากรณ์ของผู้ให้บริการจะทำให้เกิด KeyManagementException และป้องกันการแทรก URL-segment หรือ KeyId

ผู้ให้บริการเวอร์ชันคีย์ nullสตริงว่างไวยากรณ์การแทนที่
AwsKmsSignerใช้ AwsKmsConfig::$keyId; alias หรือ ARN จะถูกแปลงเป็นคีย์ปัจจุบันที่ฝั่งผู้ให้บริการถูกปฏิเสธUUID (มีหรือไม่มีขีดคั่น), alias/<name> หรือ ARN ของคีย์/alias ใน KMS
AzureKeyVaultSignerใช้เวอร์ชันคีย์ที่กำหนดไว้; ค่า config ที่ว่างจะเลือกเวอร์ชันที่เปิดใช้งานล่าสุดที่ฝั่งเซิร์ฟเวอร์ถูกปฏิเสธตัวระบุเลขฐานสิบหก 32 อักขระ
GcpKmsSignerใช้เวอร์ชันที่ปักหมุดไว้ใน GcpKmsConfig; หากไม่มีการปักหมุด จะทำให้เกิด KeyManagementExceptionถูกปฏิเสธid ของ CryptoKeyVersion แบบเลขฐานสิบ เป็นตัวเลขเท่านั้น

GCP ไม่มี primitive “active version” ที่ฝั่งเซิร์ฟเวอร์ asymmetric-sign endpoint ทำงานกับทรัพยากร cryptoKeyVersions/{n} ที่เจาะจงเท่านั้น ดังนั้นจึงต้องสามารถแปลงเวอร์ชันได้เสมอ

ชั้น strategy จะส่งต่อ wire name แบบ OpenSSL AWS และ Azure ยอมรับ wire name เจ็ดชื่อ (PKCS#1 และ ECDSA ที่ SHA-256/384/512 บวกกับ RSASSA-PSS) GCP ยอมรับห้าชื่อ (sha256WithRSAEncryption, sha512WithRSAEncryption, RSASSA-PSS, ecdsa-with-SHA256, ecdsa-with-SHA384) wire name RSASSA-PSS ไม่ได้เข้ารหัส digest ไว้ จึงมีความกำกวมด้าน digest AwsKmsSigner แปลงมันผ่าน KmsSigningAlgorithm::resolveForWireName() ซึ่งคงค่า digest ของตัวแปร PSS ที่กำหนดไว้ AzureKeyVaultSigner เชื่อถือตัวแปร PSS ที่กำหนดไว้สำหรับชื่อที่กำกวม โดยจะทำให้เกิด UnsupportedAlgorithmException หาก digest ของ PSS ที่แปลงได้แตกต่างจากค่าที่กำหนดไว้ GcpKmsSigner แปลง enum จาก wire name ใหม่ในทุกการเรียก; withAlgorithm() บน GCP เป็นการแสดงตัวอย่างในช่วง config และไม่เปลี่ยนพฤติกรรมในเวลาลงนาม wire name ที่ไม่รองรับจะทำให้เกิด UnsupportedAlgorithmException ก่อนการเรียกเครือข่ายใด ๆ บน AwsKmsSigner และ GcpKmsSigner การเรียกลงนามจะอัปเดตค่าที่ getSigningAlgorithm() รายงานในภายหลังให้เป็นอัลกอริทึมต่อการเรียกที่แปลงแล้ว บน AzureKeyVaultSigner การแปลงเป็นแบบเฉพาะการเรียกและค่าที่กำหนดไว้ยังคงเป็นค่าหลัก

AWS และ GCP คืนค่าลายเซ็นในรูปแบบที่ CMS ใช้: ออกเทตของลายเซ็น RSA จะเข้าสู่ SignerInfo.signature โดยไม่เปลี่ยนแปลง และ ECDSA มาในรูปแบบที่เข้ารหัส DER แล้ว Azure คืนค่า ECDSA ในรูปแบบดิบ IEEE P1363 (r||s) ซึ่งตัวลงนามจะแปลงเป็น DER ECDSA-Sig-Value ก่อนคืนค่า

อะแดปเตอร์ SigningStrategy จะลงนามในแอตทริบิวต์ที่ลงนามซึ่งเข้ารหัส DER แล้วที่เซสชันจัดหาให้ เมื่อมีแอตทริบิวต์ที่ลงนามอยู่ ข้อมูลนำเข้าของลายเซ็น CMS คือ digest ของการเข้ารหัส DER ทั้งหมดของค่า SignedAttrs — RFC 5652 §5.4 getSignatureAlgorithmOid() และ getDigestAlgorithm() ของอะแดปเตอร์จะป้อนค่าให้ฟิลด์ signatureAlgorithm และ digestAlgorithm ของ SignerInfo — RFC 5652 §5.3 ไบต์ที่คืนค่ามาจะกลายเป็น OCTET STRING ของลายเซ็นใน SignerInfo — RFC 5652 §5.5 การประกอบ CMS, การจัดการ ByteRange และวงจรชีวิตของเซสชันเป็นของ RemoteSigningSession; โฟลว์แบบหลายฝ่ายเป็นของ SequentialSigner การประทับเวลาลายเซ็น PAdES B-T ซึ่ง messageImprint แฮชค่าลายเซ็นของ SignerInfo — RFC 3161 Appendix A — ถูกใช้โดย PadesBtTimestamper ไม่ใช่โดยตัวลงนามเหล่านี้ ทั้งสามตัวมีการบันทึกไว้ใน เอกสารอ้างอิงเชิงลึกด้านความปลอดภัยของ Pro

  • เวอร์ชันคีย์ที่เป็นสตริงว่างจะถูกปฏิเสธบนผู้ให้บริการทั้งสามตัว ส่ง null เพื่อสืบทอดค่าเริ่มต้นที่กำหนดไว้
  • เวอร์ชันคีย์ที่มีรูปแบบไม่ถูกต้องจะถูกปฏิเสธก่อนที่จะสร้างคำขอใด ๆ โดยระบุค่าที่เป็นปัญหาไว้ในข้อยกเว้น
  • AwsKmsSigner ที่มี AwsKmsConfig::$keyId ว่างและเวอร์ชันคีย์ null จะทำให้เกิด KeyManagementException
  • การตอบกลับของผู้ให้บริการที่บ่งชี้ความล้มเหลวด้านการจัดการคีย์จะแมปไปยัง KeyManagementException: AWS NotFoundException, DisabledException, KeyUnavailableException, InvalidKeyUsageException หรือ HTTP 404; Azure HTTP 404, KeyNotFound, KeyDisabled หรือ KeyNotActive; GCP HTTP 404 หรือ 409, NOT_FOUND, FAILED_PRECONDITION หรือ HTTP 400 ที่ข้อความระบุเวอร์ชัน
  • การตอบกลับของผู้ให้บริการที่ไม่ใช่ 200 อื่น ๆ จะทำให้เกิด SignatureFailedException บน AWS และ GCP และ AzureKeyVaultException บน Azure
  • ความล้มเหลวในการขนส่ง PSR-18 ระหว่างการลงนามจะแมปไปยัง SignatureFailedException โดยเก็บข้อยกเว้นของ client ไว้เป็น throwable ก่อนหน้า
  • AzureKeyVaultSigner ที่ไม่มี access token และไม่มี credential ของ service-principal จะทำให้เกิด AzureKeyVaultException ก่อนการเรียก vault ใด ๆ การขอ token ของ Azure AD ที่ล้มเหลวก็ทำให้เกิด AzureKeyVaultException เช่นกัน
  • AzureKeyVaultSigner ตรวจสอบ vault name, key name, key version และ tenant id กับไวยากรณ์ที่ Azure เผยแพร่ ณ จุดคอขวดของคำขอ ค่าที่มีอักขระเชิงโครงสร้างของ URL จะล้มเหลวแบบ fail closed ด้วย AzureKeyVaultException
  • GcpKmsSigner ที่ไม่มี OAuth2 bearer token จะทำให้เกิด SignatureFailedException; การขอ token เป็นความรับผิดชอบของผู้เรียกใช้
  • การตอบกลับของผู้ให้บริการที่ไม่ใช่ JSON ที่ถูกต้อง หรือที่ไม่มีฟิลด์ลายเซ็น จะทำให้เกิด SignatureFailedException (Azure: ฟิลด์ value ที่ขาดหายจะทำให้เกิด AzureKeyVaultException)
  • ฟิลด์ลายเซ็นของผู้ให้บริการที่ถอดรหัส base64 ไม่สำเร็จจะทำให้เกิด SignatureFailedException บน AWS และ GCP และ AzureKeyVaultException บน Azure
  • ไม่มีอะแดปเตอร์ SigningStrategy สำหรับ GcpKmsSigner ในเวอร์ชัน 3.1.0 ตัวลงนาม GCP ถูกใช้งานผ่านสัญญา KmsSignerInterface โดยตรง

AwsKmsConfig::withFipsEndpoint() กำหนดเส้นทางคำขอไปยัง kms-fips endpoint ของภูมิภาค สถานะการตรวจรับรอง FIPS ของ endpoint นั้นเป็นคุณสมบัติของ AWS ไม่ใช่ของ NextPDF AzureKeyVaultConfig และ GcpKmsConfig ไม่ได้เปิดเผยตัวช่วย FIPS endpoint เฉพาะในเวอร์ชัน 3.1.0 การคำนวณ digest ทำงานภายในกระบวนการด้วยฟังก์ชัน hash() ของ PHP และตัวมันเองไม่ใช่โมดูลที่ผ่านการตรวจรับรอง NextPDF Pro สามารถทำงานกับขอบเขต KMS หรือ HSM ที่ผ่านการตรวจรับรอง FIPS ได้ แต่ NextPDF ไม่ใช่โมดูลการเข้ารหัสที่ผ่านการตรวจรับรอง FIPS และไม่ได้อ้างการรับรอง FIPS ใด ๆ

ข้อกล่าวอ้างมาตรฐานข้อ
strategy ลงนามในแอตทริบิวต์ที่ลงนามซึ่งเข้ารหัส DER แล้ว; digest ของข้อมูลนำเข้าลายเซ็น CMS ครอบคลุมการเข้ารหัส DER ทั้งหมดของ SignedAttrsRFC 5652§5.4
SignedAttributes เข้ารหัส DER และมีอย่างน้อย content-type และ message-digest; signatureAlgorithm ระบุอัลกอริทึมของตัวลงนามRFC 5652§5.3
ไบต์ลายเซ็นที่คืนค่ามาเข้ารหัสเป็น OCTET STRING และบรรจุในฟิลด์ลายเซ็นของ SignerInfoRFC 5652§5.5
messageImprint ของการประทับเวลาลายเซ็นแฮชค่าลายเซ็นของ SignerInfo (พื้นผิว B-T ที่อยู่ติดกัน ไม่ใช่ตัวลงนามเหล่านี้)RFC 3161Appendix A

ทุกข้อเป็นการถอดความ; NextPDF ไม่ได้ทำซ้ำข้อความเชิงบรรทัดฐาน สิ่งเหล่านี้เป็นคำแถลงความสามารถ ไม่ใช่การรับรอง NextPDF ไม่ได้ถือการรับรองใด ๆ และไม่ได้มอบให้ ลายเซ็นที่ผลิตขึ้นจะผ่านการตรวจสอบหรือไม่นั้นเป็นการตัดสินใจของผู้ตรวจสอบเทียบกับ trust anchor และนโยบายของตนเอง; ตัวลงนามคืนค่าไบต์ลายเซ็นและไม่ได้ยืนยันผลลัพธ์ที่เชื่อถือได้ใด ๆ การเก็บรักษาคีย์ การป้องกันคีย์ และการตรวจสอบอัลกอริทึมที่ฝั่งผู้ให้บริการเป็นคุณสมบัติของ KMS ที่กำหนดค่าไว้ ไม่ใช่ของ NextPDF

  • ความพร้อมใช้งานภายในแพ็กเกจ Pro: AwsKmsSigner ตั้งแต่ 1.9.0, AzureKeyVaultSigner ตั้งแต่ 2.0.0, GcpKmsSigner และ KmsSignerInterface ตั้งแต่ 2.1.0 ทั้งหมดเป็นเวอร์ชันปัจจุบันใน nextpdf/pro 3.1.0
  • ตัวลงนามพึ่งพาเฉพาะ PSR-18, PSR-17 และ PSR-3 เท่านั้น ไม่จำเป็นต้องมีและไม่มีการรวม SDK ของ AWS, Azure หรือ Google มาด้วย
  • ตรวจสอบ supportsAlgorithm() ก่อนการลงนามเพื่อให้ผู้ให้บริการที่ไม่เข้ากันถูกปฏิเสธในเวลาเลือก ไม่ใช่กลางเซสชัน
  • ฟิลด์ credential ถูกฉีดผ่าน constructor และถูกทำเครื่องหมายเป็นพารามิเตอร์ที่มีความอ่อนไหว ข้อความบันทึกมีเฉพาะฟิลด์เชิงโครงสร้างเท่านั้น; ไม่มีการเขียน credential, token หรือเนื้อหาเอกสารลงในบันทึก
  • ปักหมุดเวอร์ชันคีย์อย่างชัดเจนในการติดตั้งที่มีการกำกับดูแล ค่าเริ่มต้นแบบ alias-resolution (AWS) และ latest-enabled (Azure) สะดวกแต่ไม่แน่นอนเมื่อมีการหมุนเวียนคีย์
  • ไดรเวอร์ของบุคคลที่สามทำการ implement KmsSignerInterface และต้องกำหนด namespace ให้ providerId() ของตนเพื่อหลีกเลี่ยงการชนกันกับตัวระบุในตัวที่สงวนไว้

หน้านี้บันทึกเฉพาะพฤติกรรมที่สังเกตได้จากภายนอกและพื้นผิว public API ที่รองรับเท่านั้น เส้นทาง namespace ภายใน คลาสตัวช่วย ตารางกลไก ชื่อไฟล์ runbook และคำนำหน้า ticket อยู่นอกขอบเขต