AWS Key Management Service
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用密钥策略

本主题中的示例使用 AWS KMS API 查看和更改 AWS KMS 客户主密钥 (CMK) 的密钥策略。有关如何使用密钥策略和 IAM 策略管理对您的 CMK 的访问的详细信息,请参阅 AWS KMS 的身份验证和访问控制

列出密钥策略名称

要获取客户主密钥的密钥策略名称,请使用 ListKeyPolicies 操作。它返回的唯一密钥策略名称是 default

此示例使用您在kmsClient中创建的 创建客户端 客户端对象。

JavaC#PythonRubyPHPNode.js
Java

有关 Java 实施的详细信息,请参阅 AWS SDK for Java API Reference 中的 listKeyPolicies 方法

// List key policies // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; ListKeyPoliciesRequest req = new ListKeyPoliciesRequest().withKeyId(keyId); ListKeyPoliciesResult result = kmsClient.listKeyPolicies(req);
C#

有关详细信息,请参阅 适用于 .NET 的 AWS 开发工具包 中的 ListKeyPolicies 方法

// List key policies // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; ListKeyPoliciesRequest listKeyPoliciesRequest = new ListKeyPoliciesRequest() { KeyId = keyId }; ListKeyPoliciesResponse listKeyPoliciesResponse = kmsClient.ListKeyPolicies(listKeyPoliciesRequest);
Python

有关详细信息,请参阅 适用于 Python 的 AWS 开发工具包 (Boto3) 中的 list_key_policies 方法

# List key policies # 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' response = kms_client.list_key_policies( KeyId=key_id )
Ruby

有关详细信息,请参阅 适用于 Ruby 的 AWS 开发工具包 中的 list_key_policies 实例方法。

# List key policies # 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' response = kmsClient.list_key_policies({ key_id: keyId })
PHP

有关详细信息,请参阅 适用于 PHP 的 AWS 开发工具包 中的 ListKeyPolicies 方法

// List key policies // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN $keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'; $result = $KmsClient->listKeyPolicies([ 'KeyId' => $keyId ]);
Node.js

有关详细信息,请参阅 AWS SDK for JavaScript in Node.js 中的 listKeyPolicies 属性

// List key policies // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN const KeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'; kmsClient.listKeyPolicies({ KeyId }, (err, data) => { ... });

获取密钥策略

要获取客户主密钥的密钥策略,请使用 GetKeyPolicy 操作。

GetKeyPolicy 需要策略名称。唯一有效的策略名称是 default

此示例使用您在kmsClient中创建的 创建客户端 客户端对象。

JavaC#PythonRubyPHPNode.js
Java

有关详细信息,请参阅 AWS SDK for Java API Reference 中的 getKeyPolicy 方法

// Get the policy for a CMK // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; String policyName = "default"; GetKeyPolicyRequest req = new GetKeyPolicyRequest().withKeyId(keyId).withPolicyName(policyName); GetKeyPolicyResult result = kmsClient.getKeyPolicy(req);
C#

有关详细信息,请参阅 适用于 .NET 的 AWS 开发工具包 中的 GetKeyPolicy 方法

// Get the policy for a CMK // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; String policyName = "default"; GetKeyPolicyRequest getKeyPolicyRequest = new GetKeyPolicyRequest() { KeyId = keyId, PolicyName = policyName }; GetKeyPolicyResponse getKeyPolicyResponse = kmsClient.GetKeyPolicy(getKeyPolicyRequest);
Python

有关详细信息,请参阅 适用于 Python 的 AWS 开发工具包 (Boto3) 中的 get_key_policy 方法

# Get the policy for a CMK # 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' policy_name = 'default' response = kms_client.get_key_policy( KeyId=key_id, PolicyName=policy_name )
Ruby

有关详细信息,请参阅 适用于 Ruby 的 AWS 开发工具包 中的 get_key_policy 实例方法。

# Get the policy for a CMK # 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' policyName = 'default' response = kmsClient.get_key_policy({ key_id: keyId, policy_name: policyName })
PHP

有关详细信息,请参阅 适用于 PHP 的 AWS 开发工具包 中的 GetKeyPolicy 方法

// Get the policy for a CMK // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN $keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'; $policyName = "default"; $result = $KmsClient->getKeyPolicy([ 'KeyId' => $keyId, 'PolicyName' => $policyName ]);
Node.js

有关详细信息,请参阅 AWS SDK for JavaScript in Node.js 中的 getKeyPolicy 属性

// Get the policy for a CMK // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN const KeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'; const PolicyName = 'default'; kmsClient.getKeyPolicy({ KeyId, PolicyName }, (err, data) => { ... });

设置密钥策略

要为 CMK 建立或更改密钥策略,请使用 PutKeyPolicy 操作。

PutKeyPolicy 需要策略名称。唯一有效的策略名称是 default

此示例使用您在kmsClient中创建的 创建客户端 客户端对象。

JavaC#PythonRubyPHPNode.js
Java

有关详细信息,请参阅 AWS SDK for Java API Reference 中的 putKeyPolicy 方法

// Set a key policy for a CMK // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; String policyName = "default"; String policy = "{" + " \"Version\": \"2012-10-17\"," + " \"Statement\": [{" + " \"Sid\": \"Allow access for ExampleUser\"," + " \"Effect\": \"Allow\"," + // Replace the following user ARN with one for a real user. " \"Principal\": {\"AWS\": \"arn:aws:iam::111122223333:user/ExampleUser\"}," + " \"Action\": [" + " \"kms:Encrypt\"," + " \"kms:GenerateDataKey*\"," + " \"kms:Decrypt\"," + " \"kms:DescribeKey\"," + " \"kms:ReEncrypt*\"" + " ]," + " \"Resource\": \"*\"" + " }]" + "}"; PutKeyPolicyRequest req = new PutKeyPolicyRequest().withKeyId(keyId).withPolicy(policy).withPolicyName(policyName); kmsClient.putKeyPolicy(req);
C#

有关详细信息,请参阅 适用于 .NET 的 AWS 开发工具包 中的 PutKeyPolicy 方法

// Set a key policy for a CMK // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; String policyName = "default"; String policy = "{" + " \"Version\": \"2012-10-17\"," + " \"Statement\": [{" + " \"Sid\": \"Allow access for ExampleUser\"," + " \"Effect\": \"Allow\"," + // Replace the following user ARN with one for a real user. " \"Principal\": {\"AWS\": \"arn:aws:iam::111122223333:user/ExampleUser\"}," + " \"Action\": [" + " \"kms:Encrypt\"," + " \"kms:GenerateDataKey*\"," + " \"kms:Decrypt\"," + " \"kms:DescribeKey\"," + " \"kms:ReEncrypt*\"" + " ]," + " \"Resource\": \"*\"" + " }]" + "}"; PutKeyPolicyRequest putKeyPolicyRequest = new PutKeyPolicyRequest() { KeyId = keyId, Policy = policy, PolicyName = policyName }; kmsClient.PutKeyPolicy(putKeyPolicyRequest);
Python

有关详细信息,请参阅 适用于 Python 的 AWS 开发工具包 (Boto3) 中的 put_key_policy 方法

# Set a key policy for a CMK # 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' policy_name = 'default' policy = """ { "Version": "2012-10-17", "Statement": [{ "Sid": "Allow access for ExampleUser", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:user/ExampleUser"}, "Action": [ "kms:Encrypt", "kms:GenerateDataKey*", "kms:Decrypt", "kms:DescribeKey", "kms:ReEncrypt*" ], "Resource": "*" }] }""" response = kms_client.put_key_policy( KeyId=key_id, Policy=policy, PolicyName=policy_name )
Ruby

有关详细信息,请参阅 适用于 Ruby 的 AWS 开发工具包 中的 put_key_policy 实例方法。

# Set a key policy for a CMK # 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' policyName = 'default' policy = "{\n \n "Version": "2012-10-17", \n "Statement": [{ \n "Sid": "Allow access for ExampleUser", \n "Effect": "Allow", \n "Principal": {"AWS": "arn:aws:iam::111122223333:user/ExampleUser"}, \n "Action": [ \n "kms:Encrypt", \n "kms:GenerateDataKey*", \n "kms:Decrypt", \n "kms:DescribeKey", \n "kms:ReEncrypt*" \n ], \n "Resource": "*" \n }] \n}\n" response = kmsClient.put_key_policy({ key_id: keyId, policy: policy, policy_name: policyName })
PHP

有关详细信息,请参阅 适用于 PHP 的 AWS 开发工具包 中的 PutKeyPolicy 方法

// Set a key policy for a CMK // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN $keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'; $policyName = "default"; $result = $KmsClient->putKeyPolicy([ 'KeyId' => $keyId, 'PolicyName' => $policyName, 'Policy' => '{ "Version": "2012-10-17", "Id": "custom-policy-2016-12-07", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/root" }, "Action": [ "kms:*" ], "Resource": "*" }, { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": [ "kms:Encrypt*", "kms:GenerateDataKey*", "kms:Decrypt*", "kms:DescribeKey*", "kms:ReEncrypt*" ], "Resource": "*" } ] } ' ]);
Node.js

有关详细信息,请参阅适用于 Node.js 的 AWS 开发工具包 中的 putKeyPolicy 属性

// Set a key policy for a CMK // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN const KeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'; const PolicyName = 'default'; const Policy = `{ "Version": "2012-10-17", "Id": "custom-policy-2016-12-07", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": [ "kms:Encrypt*", "kms:GenerateDataKey*", "kms:Decrypt*", "kms:DescribeKey*", "kms:ReEncrypt*" ], "Resource": "*" } ] }`; // The key policy document kmsClient.putKeyPolicy({ KeyId, Policy, PolicyName }, (err, data) => { ... });