put_key_policy
(**kwargs)¶Attaches a key policy to the specified KMS key.
For more information about key policies, see Key Policies in the Key Management Service Developer Guide . For help writing and formatting a JSON policy document, see the IAM JSON Policy Reference in the Identity and Access Management User Guide . For examples of adding a key policy in multiple programming languages, see Setting a key policy in the Key Management Service Developer Guide .
Cross-account use : No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.
Required permissions : kms:PutKeyPolicy (key policy)
Related operations : GetKeyPolicy
See also: AWS API Documentation
Request Syntax
response = client.put_key_policy(
KeyId='string',
PolicyName='string',
Policy='string',
BypassPolicyLockoutSafetyCheck=True|False
)
[REQUIRED]
Sets the key policy on the specified KMS key.
Specify the key ID or key ARN of the KMS key.
For example:
1234abcd-12ab-34cd-56ef-1234567890ab
arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
To get the key ID and key ARN for a KMS key, use ListKeys or DescribeKey.
[REQUIRED]
The name of the key policy. The only valid value is default
.
[REQUIRED]
The key policy to attach to the KMS key.
The key policy must meet the following criteria:
PutKeyPolicy
request on the KMS key. This reduces the risk that the KMS key becomes unmanageable. For more information, see Default key policy in the Key Management Service Developer Guide . (To omit this condition, set BypassPolicyLockoutSafetyCheck
to true.)A key policy document can include only the following characters:
\u0020
) through the end of the ASCII character range.\u00FF
).\u0009
), line feed ( \u000A
), and carriage return ( \u000D
) special charactersFor information about key policies, see Key policies in KMS in the Key Management Service Developer Guide .For help writing and formatting a JSON policy document, see the IAM JSON Policy Reference in the Identity and Access Management User Guide .
Skips ("bypasses") the key policy lockout safety check. The default value is false.
Warning
Setting this value to true increases the risk that the KMS key becomes unmanageable. Do not set this value to true indiscriminately.
For more information, see Default key policy in the Key Management Service Developer Guide .
Use this parameter only when you intend to prevent the principal that is making the request from making a subsequent PutKeyPolicy request on the KMS key.
None
Exceptions
KMS.Client.exceptions.NotFoundException
KMS.Client.exceptions.InvalidArnException
KMS.Client.exceptions.MalformedPolicyDocumentException
KMS.Client.exceptions.DependencyTimeoutException
KMS.Client.exceptions.UnsupportedOperationException
KMS.Client.exceptions.KMSInternalException
KMS.Client.exceptions.LimitExceededException
KMS.Client.exceptions.KMSInvalidStateException
Examples
The following example attaches a key policy to the specified KMS key.
response = client.put_key_policy(
# The identifier of the KMS key to attach the key policy to. You can use the key ID or the Amazon Resource Name (ARN) of the KMS key.
KeyId='1234abcd-12ab-34cd-56ef-1234567890ab',
# The key policy document.
Policy='{\n "Version": "2012-10-17",\n "Id": "custom-policy-2016-12-07",\n "Statement": [\n {\n "Sid": "Enable IAM User Permissions",\n "Effect": "Allow",\n "Principal": {\n "AWS": "arn:aws:iam::111122223333:root"\n },\n "Action": "kms:*",\n "Resource": "*"\n },\n {\n "Sid": "Allow access for Key Administrators",\n "Effect": "Allow",\n "Principal": {\n "AWS": [\n "arn:aws:iam::111122223333:user/ExampleAdminUser",\n "arn:aws:iam::111122223333:role/ExampleAdminRole"\n ]\n },\n "Action": [\n "kms:Create*",\n "kms:Describe*",\n "kms:Enable*",\n "kms:List*",\n "kms:Put*",\n "kms:Update*",\n "kms:Revoke*",\n "kms:Disable*",\n "kms:Get*",\n "kms:Delete*",\n "kms:ScheduleKeyDeletion",\n "kms:CancelKeyDeletion"\n ],\n "Resource": "*"\n },\n {\n "Sid": "Allow use of the key",\n "Effect": "Allow",\n "Principal": {\n "AWS": "arn:aws:iam::111122223333:role/ExamplePowerUserRole"\n },\n "Action": [\n "kms:Encrypt",\n "kms:Decrypt",\n "kms:ReEncrypt*",\n "kms:GenerateDataKey*",\n "kms:DescribeKey"\n ],\n "Resource": "*"\n },\n {\n "Sid": "Allow attachment of persistent resources",\n "Effect": "Allow",\n "Principal": {\n "AWS": "arn:aws:iam::111122223333:role/ExamplePowerUserRole"\n },\n "Action": [\n "kms:CreateGrant",\n "kms:ListGrants",\n "kms:RevokeGrant"\n ],\n "Resource": "*",\n "Condition": {\n "Bool": {\n "kms:GrantIsForAWSResource": "true"\n }\n }\n }\n ]\n}\n',
# The name of the key policy.
PolicyName='default',
)
print(response)
Expected Output:
{
'ResponseMetadata': {
'...': '...',
},
}