AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
通过 AWS KMS API 和 AWS SDK for PHP 版本 3 使用密钥
AWS Key Management Service (AWS KMS) 中的主要资源是客户主密钥 (CMK)。您可以使用 CMK 加密数据。
以下示例演示如何:
版本 3 的所有示例代码在 AWS SDK for PHP 上的此处提供。GitHub
Credentials
有关使用 AWS Key Management Service (AWS KMS) 的更多信息,请参阅 AWS KMS 开发人员指南。
创建 CMK
导入
require 'vendor/autoload.php';
use Aws\Kms\KmsClient;
use Aws\Exception\AwsException;
示例代码
$KmsClient = new Aws\Kms\KmsClient([
'profile' => 'default',
'version' => '2014-11-01',
'region' => 'us-east-2'
]);
//Creates a customer master key (CMK) in the caller's AWS account.
$desc = "Key for protecting critical data";
try {
$result = $KmsClient->createKey([
'Description' => $desc,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
echo $e->getMessage();
echo "\n";
}
生成数据密钥
要生成数据加密密钥,请使用 GenerateDataKey 操作。该操作返回其创建的数据密钥的明文和加密副本。指定要根据其生成数据密钥的客户主密钥 (CMK)。
导入
require 'vendor/autoload.php';
use Aws\Kms\KmsClient;
use Aws\Exception\AwsException;
示例代码
$KmsClient = new Aws\Kms\KmsClient([
'profile' => 'default',
'version' => '2014-11-01',
'region' => 'us-east-2'
]);
$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';
$keySpec = 'AES_256';
try {
$result = $KmsClient->generateDataKey([
'KeyId' => $keyId,
'KeySpec' => $keySpec,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
echo $e->getMessage();
echo "\n";
}
查看 CMK
要获取有关 CMK 的详细信息(包括 CMK 的 Amazon 资源名称 (ARN) 和密钥状态),请使用 DescribeKey 操作。
DescribeKey 不会获取别名。要获取别名,请使用 ListAliases 操作。
导入
require 'vendor/autoload.php';
use Aws\Kms\KmsClient;
use Aws\Exception\AwsException;
示例代码
$KmsClient = new Aws\Kms\KmsClient([
'profile' => 'default',
'version' => '2014-11-01',
'region' => 'us-east-2'
]);
$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';
try {
$result = $KmsClient->describeKey([
'KeyId' => $keyId,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
echo $e->getMessage();
echo "\n";
}
获取 CMK 的密钥 ID 和密钥ARNs
要获取 CMK 的 ID 和 ARN,请使用 ListAliases 操作。
导入
require 'vendor/autoload.php';
use Aws\Kms\KmsClient;
use Aws\Exception\AwsException;
示例代码
$KmsClient = new Aws\Kms\KmsClient([
'profile' => 'default',
'version' => '2014-11-01',
'region' => 'us-east-2'
]);
$limit = 10;
try {
$result = $KmsClient->listKeys([
'Limit' => $limit,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
echo $e->getMessage();
echo "\n";
}
启用 CMK
要启用已禁用的 CMK,请使用 EnableKey 操作。
导入
require 'vendor/autoload.php';
use Aws\Kms\KmsClient;
use Aws\Exception\AwsException;
示例代码
$KmsClient = new Aws\Kms\KmsClient([
'profile' => 'default',
'version' => '2014-11-01',
'region' => 'us-east-2'
]);
$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';
try {
$result = $KmsClient->enableKey([
'KeyId' => $keyId,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
echo $e->getMessage();
echo "\n";
}
禁用 CMK
要禁用 CMK,请使用 DisableKey 操作。禁用 CMK 可防止其被使用。
导入
require 'vendor/autoload.php';
use Aws\Kms\KmsClient;
use Aws\Exception\AwsException;
示例代码
$KmsClient = new Aws\Kms\KmsClient([
'profile' => 'default',
'version' => '2014-11-01',
'region' => 'us-east-2'
]);
$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';
try {
$result = $KmsClient->disableKey([
'KeyId' => $keyId,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
echo $e->getMessage();
echo "\n";
}