密钥策略是基于资源的策略,用于控制哪些阿里云账号、RAM用户、RAM角色有权限来管理或使用KMS密钥,KMS实例中的每个密钥必须有且只有一个密钥策略。本文介绍密钥策略的详细信息。
密钥策略与 RAM 权限策略的关系
策略说明
密钥策略(Key Policy)与 RAM 权限策略从不同维度控制对 KMS 密钥的访问权限。在密钥策略中添加 RAM 用户或 RAM 角色后,还可配置 RAM 权限策略,管理RAM 用户或 RAM 角色已在 RAM 控制台配置了相应的 KMS 密钥操作权限。
密钥策略:资源级策略,绑定在具体密钥上,用于声明哪些身份(RAM 用户、RAM 角色或阿里云账号)可以管理或使用该密钥。具体操作,请参见设置密钥策略。
RAM 权限策略:身份级策略,绑定在 RAM 用户或 RAM 角色上,用于声明该身份可以执行哪些 KMS 操作。具体操作,请参见管理RAM用户的权限、管理RAM角色的权限、密钥管理服务自定义权限策略参考。
权限判断优先级
当前账号(密钥创建者账号)的RAM 用户/角色:
判定原则:任一允许即可” (OR 逻辑),只要满足以下 任意一个 条件,且没有显式拒绝(Explicit Deny),即允许访问。
说明关于Explicit Deny(显式拒绝)、Implicit Deny(隐式拒绝)的详细介绍,请参见权限策略判定流程。
KMS 密钥策略 中明确允许该用户/角色。
RAM 权限策略 中明确允许该用户/角色。
详细规则:
KMS 密钥策略 (资源侧)
RAM 权限策略 (身份侧)
判定结果
Allow(允许)
未配置
Allow(允许)
未配置
Allow(允许)
Allow(允许)
Allow(允许)
Allow(允许)
Allow(允许)
Allow(允许)
Deny(拒绝)
Deny(拒绝)
Deny(拒绝)
Allow(允许)
Deny(拒绝)
未配置
未配置
Deny(拒绝)
其他账号的RAM 用户/角色(跨账号)
判定原则:“必须同时允许” (AND 逻辑)。必须同时满足以下两个条件,才允许访问。
KMS 密钥策略 中明确允许该外部用户/角色(或外部账号)。
RAM 权限策略 中明确允许该外部用户/角色调用 KMS 相关接口。
详细规则:
KMS 密钥策略 (资源侧)
RAM 权限策略 (身份侧)
判定结果
Allow(允许)
Deny(拒绝)
Deny(拒绝)
Deny(拒绝)
Allow(允许)
Deny(拒绝)
Allow(允许)
Allow(允许)
Allow(允许)
未配置
未配置
Deny(拒绝)
注意事项
密钥策略说明
完整的密钥策略包含如下内容:
Version:密钥策略的版本,目前版本仅支持设置为1。
Statement:密钥策略的语句,每个密钥策略包含一个或多个语句。每个语句包含以下几个参数。
Sid
可选,表示自定义的语句标识符。内容长度小于等于128字符,支持的字符为:大写英文字母(A-Z)、小写英文字母(a-z)、数字(0-9),特殊字符( _/+=.@-)。
Effect
必选,表示是允许还是拒绝该策略语句中的权限。取值为:
Allow或Deny。Principal
必选,表示权限策略的授权主体,支持设置为以下主体:
当前阿里云账号,即密钥所属的阿里云账号。
当前阿里云账号下的RAM用户、RAM角色。
其他阿里云账号下的RAM用户、RAM角色。
重要授权给其他阿里云账号下的RAM用户、RAM角色后,您仍需在访问控制RAM侧,使用该RAM用户、RAM角色的阿里云账号为其授权使用该密钥,RAM用户、RAM角色才能使用该密钥。
具体操作,请参见密钥管理服务自定义权限策略参考、管理RAM用户的权限、管理RAM角色的权限。
Action
必选,表示要允许或拒绝的API操作,内容必须以"kms:"开头。操作权限列表的范围如下,如果您设置了列表外的操作,设置后也不会生效。
Resource
必选,表示权限策略生效的目标资源。取值为
*或密钥的 ARN。取值为*时表示本 KMS 密钥。您也可以指定具体的密钥 ARN 来限制策略的生效范围。Condition
可选,表示授权生效的限制条件。Condition元素也称为条件块(Condition Block),它是由一个或多个条件子句构成。一个条件子句由条件操作类型、条件关键字和条件值组成。详细信息,请参见权限策略基本元素。
格式为
"Condition": {"condition operator": {"condition key": "condition value"}}。condition operator:具体请参见条件操作类型。condition key、condition value:密钥策略支持的条件关键字及取值,具体请参见策略(Policy)条件键。
常见问题
如何查看密钥创建者?
通过控制台:登录密钥管理服务控制台,在密钥管理页面,进入密钥详情页面,查看创建者。
通过OpenAPI:调用DescribeKey接口,响应消息中的
Creator即创建者。