put_key_policy
¶
put_key_policy(
key_id: KeyIdType,
policy: PolicyType,
*,
config_overrides: Optional[KMSClientConfig] = None,
policy_name: Optional[PolicyNameType] = None,
bypass_policy_lockout_safety_check: Optional[BooleanType] = None,
) -> None
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 Use PutKeyPolicy with an Amazon Web Services SDK or CLI 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
Eventual consistency: The KMS API follows an eventual consistency model. For more information, see KMS eventual consistency.
Parameters:
-
key_id(KeyIdType) –Sets the key policy on the specified KMS key.
Specify the key ID or key ARN of the KMS key.
For example:
-
Key ID:
1234abcd-12ab-34cd-56ef-1234567890ab -
Key ARN:
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.
-
-
policy_name(Optional[PolicyNameType], default:None) –The name of the key policy. If no policy name is specified, the default value is
default. The only valid value isdefault. -
policy(PolicyType) –The key policy to attach to the KMS key.
The key policy must meet the following criteria:
-
The key policy must allow the calling principal to make a subsequent
PutKeyPolicyrequest 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, setBypassPolicyLockoutSafetyCheckto true.) -
Each statement in the key policy must contain one or more principals. The principals in the key policy must exist and be visible to KMS. When you create a new Amazon Web Services principal, you might need to enforce a delay before including the new principal in a key policy because the new principal might not be immediately visible to KMS. For more information, see Changes that I make are not always immediately visible in the Amazon Web Services Identity and Access Management User Guide.
If either of the required
ResourceorActionelements are missing from a key policy statement, the policy statement has no effect. When a key policy statement is missing one of these elements, the KMS console correctly reports an error, but thePutKeyPolicyAPI request succeeds, even though the policy statement is ineffective.For more information on required key policy elements, see Elements in a key policy in the Key Management Service Developer Guide.
A key policy document can include only the following characters:
-
Printable ASCII characters from the space character (
\u0020) through the end of the ASCII character range. -
Printable characters in the Basic Latin and Latin-1 Supplement character set (through
\u00FF). -
The tab (
\u0009), line feed (\u000A), and carriage return (\u000D) special characters
If the key policy exceeds the length constraint, KMS returns a
LimitExceededException.For 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 .
-
-
bypass_policy_lockout_safety_check(Optional[BooleanType], default:None) –Skips ("bypasses") the key policy lockout safety check. The default value is false.
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.
Raises:
-
DependencyTimeoutException–The system timed out while trying to fulfill the request. You can retry the request.
-
InvalidArnException–The request was rejected because a specified ARN, or an ARN in a key policy, is not valid.
-
KMSInternalException–The request was rejected because an internal exception occurred. The request can be retried.
-
KMSInvalidStateException–The request was rejected because the state of the specified resource is not valid for this request.
This exceptions means one of the following:
-
The key state of the KMS key is not compatible with the operation.
To find the key state, use the DescribeKey operation. For more information about which key states are compatible with each KMS operation, see Key states of KMS keys in the Key Management Service Developer Guide .
-
For cryptographic operations on KMS keys in custom key stores, this exception represents a general failure with many possible causes. To identify the cause, see the error message that accompanies the exception.
-
-
LimitExceededException–The request was rejected because a length constraint or quota was exceeded. For more information, see Quotas in the Key Management Service Developer Guide.
-
MalformedPolicyDocumentException–The request was rejected because the specified policy is not syntactically or semantically correct.
-
NotFoundException–The request was rejected because the specified entity or resource could not be found.
-
UnsupportedOperationException–The request was rejected because a specified parameter is not supported or a specified resource is not valid for this operation.
-
UnknownServiceError–The service returned an error code this client does not model.
Examples:
To attach a key policy to a KMS key The following example attaches a key policy to the specified KMS key.
>>> client.put_key_policy(key_id='1234abcd-12ab-34cd-56ef-1234567890ab', policy_name='default', 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')
Source code in docs_src/capo_kms/_services/kms.py
3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 | |