使用RAM实现对资源的访问控制
阿里云账号(主账号)对该账号下的所有资源拥有完整的操作权限,为保障业务数据安全,您可以为用户创建不同的RAM(Resource Access Management)用户(子账号),通过授予RAM用户系统权限策略和自定义权限策略,实现账号权限的精细化管理。本文介绍如何授权RAM用户对KMS资源的访问控制。
前提条件
已创建RAM用户。具体操作,请参见创建RAM用户。
授予RAM用户系统策略
阿里云提供了部分与密钥管理服务KMS(Key Management Service)相关的系统权限策略,您可以按需授予指定的RAM用户。如果默认的系统权限策略无法满足您的权限分配需求,您可以自定义访问权限策略。具体操作,请参见授予RAM用户自定义策略。
阿里云默认提供的KMS相关系统权限如下:
AliyunKMSFullAccess:管理KMS的所有权限。
AliyunKMSReadOnlyAccess:只读访问KMS的权限。
AliyunKMSCryptoAdminAccess:在KMS中管理密钥的权限。
AliyunKMSCryptoUserAccess:使用KMS的密钥进行密码运算的权限。
AliyunKMSSecretUserAccess:获取KMS中的凭据的权限。
AliyunKMSSecretAdminAccess:在KMS中管理凭据的权限。
使用阿里云账号登录RAM控制台。
在左侧导航栏,选择 。
在用户页面,找到目标RAM用户,在操作列单击添加权限。
在添加权限面板,配置授权范围和授权主体。
配置项
说明
授权范围
选择权限在当前阿里云账号生效或者在指定资源组内生效。目前KMS还未支持资源组功能,请选择整个云账号。
授权主体
需要授权的RAM用户。系统自动填入您选择的RAM用户,您也可以手动添加其他RAM用户。
单击系统策略,根据使用场景选择系统权限策略,然后单击确定。
确认授权范围和权限策略,单击完成。
授予RAM用户自定义策略
如果默认的系统权限策略无法满足您的需求,您可以通过创建自定义权限策略实现精细化权限管理。
使用阿里云账号登录RAM控制台。
创建自定义的权限策略。
在左侧导航栏,选择 。
在权限策略页面,单击创建权限策略。
在创建权限策略页面,单击脚本编辑页签。
说明RAM提供可视化编辑和脚本编辑方式来创建权限策略。创建KMS资源的自定义权限策略时,您需要使用脚本编辑方式,可视化编辑方式仅支持选择KMS的全部资源和全部操作。
编辑权限策略脚本,然后单击继续编辑基本信息。
编写KMS权限策略脚本时,您需要自定义授权语句,包括效果(Effect)、操作(Action)、资源(Resource)以及条件(Condition,可选项)。更多信息,请参见KMS定义的RAM权限策略和常见的授权策略示例。
说明关于权限策略语法结构的详情,请参见权限策略语法和结构。
输入权限策略名称和备注信息,根据页面提示检查并优化权限策略内容。
单击确定。
授予RAM用户自定义的权限策略。
在左侧导航栏,选择 。
在用户页面,找到目标RAM用户,在操作列单击添加权限。
在添加权限面板,配置授权范围和授权主体。
配置项
说明
授权范围
选择权限在当前阿里云账号生效或者在指定资源组内生效。目前KMS还未支持资源组功能,请选择整个云账号。
授权主体
需要授权的RAM用户。系统自动填入您选择的RAM用户,您也可以手动添加其他RAM用户。
单击自定义策略,根据使用场景选择自定义的权限策略,然后单击确定。
确认授权范围和权限策略,单击完成。
KMS定义的RAM权限策略
资源(Resource)
KMS定义的资源类型包括抽象密钥容器、抽象凭据容器、抽象别名容器、抽象证书容器、密钥、凭据、别名和证书,您可以通过以下方式获取资源对应的资源名称ARN(Aliyun Resource Names),用于RAM权限策略的Resource元素。
登录密钥管理服务控制台,在顶部菜单栏选择地域信息后,在左侧导航栏单击密钥管理页面。
在用户主密钥页签,定位到目标密钥,单击操作列的详情,在密钥详情页面获取ARN。
不同资源类型对应的ARN格式不同,具体信息,如下表所示。
资源类型
ARN
抽象密钥容器
acs:kms:${region}:${account}:key
抽象凭据容器
acs:kms:${region}:${account}:secret
抽象别名容器
acs:kms:${region}:${account}:alias
密钥
acs:kms:${region}:${account}:key/${key-id}
说明密钥资源的ARN支持通配符*。例如:
acs:kms:${region}:${account}:key/*
:表示对应地域和账号下的所有密钥。acs:kms:*:${account}:key/*
:表示对应账号下所有地域的所有密钥。
凭据
acs:kms:${region}:${account}:secret/${secret-name}
说明凭据资源的ARN支持以下两种通配方式:
acs:kms:${region}:${account}:secret/*
:表示对应地域和账号下的所有凭据。acs:kms:${region}:${account}:secret/prefix*
:表示对应地域和账号下凭据名称前缀为prefix
的所有凭据。
别名
acs:kms:${region}:${account}:alias/${alias-name}
证书
acs:kms:${region}:${account}:certificate/${id}
操作(Action)
针对每一个需要进行访问控制的接口,KMS都定义了用于RAM权限策略的操作(Action),通常为kms:<api-name>
。
DescribeRegions不需要进行访问控制,只要请求可以通过认证校验,即可调用。调用者可以是阿里云账号、RAM用户或RAM角色。
以下表格列出了KMS接口的对应RAM权限策略操作,以及接口所访问的资源类型。
密钥服务接口
KMS接口
Action
资源类型
ARN
ListKeys
kms:ListKeys
抽象密钥容器
acs:kms:${region}:${account}:key
CreateKey
kms:CreateKey
DescribeKey
kms:DescribeKey
密钥
acs:kms:${region}:${account}:key/${key-id}
UpdateKeyDescription
kms:UpdateKeyDescription
EnableKey
kms:EnableKey
DisableKey
kms:DisableKey
ScheduleKeyDeletion
kms:ScheduleKeyDeletion
CancelKeyDeletion
kms:CancelKeyDeletion
GetParametersForImport
kms:GetParametersForImport
ImportKeyMaterial
kms:ImportKeyMaterial
DeleteKeyMaterial
kms:DeleteKeyMaterial
ListAliasesByKeyId
kms:ListAliasesByKeyId
CreateKeyVersion
kms:CreateKeyVersion
DescribeKeyVersion
kms:DescribeKeyVersion
ListKeyVersions
kms:ListKeyVersions
UpdateRotationPolicy
kms:UpdateRotationPolicy
Encrypt
kms:Encrypt
Decrypt
kms:Decrypt
ReEncrypt
kms:ReEncryptFrom
kms:ReEncryptTo
kms:ReEncrypt*
GenerateDataKey
kms:GenerateDataKey
GenerateDataKeyWithoutPlaintext
kms:GenerateDataKeyWithoutPlaintext
ExportDataKey
kms:ExportDataKey
GenerateAndExportDataKey
kms:GenerateAndExportDataKey
AsymmetricSign
kms:AsymmetricSign
AsymmetricVerify
kms:AsymmetricVerify
AsymmetricEncrypt
kms:AsymmetricEncrypt
AsymmetricDecrypt
kms:AsymmetricDecrypt
GetPublicKey
kms:GetPublicKey
ListAliases
kms:ListAliases
抽象别名容器
acs:kms:${region}:${account}:alias
CreateAlias
kms:CreateAlias
别名和密钥
别名:acs:kms:${region}:${account}:alias/${alias-name}
密钥:acs:kms:${region}:${account}:key/${key-id}
UpdateAlias
kms:UpdateAlias
DeleteAlias
kms:DeleteAlias
凭据管家接口
KMS 接口
Action
资源类型
ARN
CreateSecret
kms:CreateSecret
抽象凭据容器
acs:kms:${region}:${account}:secret
ListSecrets
kms:ListSecrets
DescribeSecret
kms:DescribeSecret
凭据
acs:kms:${region}:${account}:secret/${secret-name}
DeleteSecret
kms:DeleteSecret
UpdateSecret
kms:UpdateSecret
RestoreSecret
kms:RestoreSecret
GetSecretValue
kms:GetSecretValue
kms:Decrypt
说明仅当您使用自己创建的CMK作为通用凭据的加密主密钥时,需要验证kms:Decrypt。
PutSecretValue
kms:PutSecretValue
kms:GenerateDataKey
说明仅当您使用自己创建的CMK作为通用凭据的加密主密钥时,需要验证kms:GenerateDataKey。
ListSecretVersionIds
kms:ListSecretVersionIds
UpdateSecretVersionStage
kms:UpdateSecretVersionStage
GetRandomPassword
kms:GetRandomPassword
无
无
证书管家接口
KMS 接口
Action
资源类型
ARN
CreateCertificate
kms:CreateCertificate
证书
acs:kms:${region}:${account}:certificate/${id}
UploadCertificate
kms:UploadCertificate
GetCertificate
kms:GetCertificate
DescribeCertificate
kms:DescribeCertificate
UpdateCertificateStatue
kms:UpdateCertificateStatue
DeleteCertificate
kms:DeleteCertificate
CertificatePrivateKeySign
kms:CertificatePrivateKeySign
CertificatePublicKeyVerify
kms:CertificatePublicKeyVerify
CertificatePublicKeyEncrypt
kms:CertificatePublicKeyEncrypt
CertificatePrivateKeyDecrypt
kms:CertificatePrivateKeyDecrypt
标签管理接口
KMS 接口
Action
资源类型
ARN
ListResourceTags
kms:ListResourceTags
密钥
密钥:acs:kms:${region}:${account}:key/${key-id}
凭据:acs:kms:${region}:${account}:secret/${secret-name}
UntagResource
kms:UntagResource
密钥或凭据
TagResource
kms:TagResource
条件(Condition)
Condition元素用于指定授权生效的限制条件,是可选元素。您可以在RAM权限策略中设定条件关键字控制对KMS的访问,只有当条件满足时,权限验证才能通过。
使用阿里云通用条件关键字:命名格式为
acs:<condition-key>
。例如,您可以使用acs:CurrentTime
条件限制权限策略有效的时间。更多信息,请参见权限策略基本元素。
使用标签作为条件关键字:命名格式为
kms:tag/<tag-key>
。您可以使用标签限制对Encrypt、Decrypt、GenerateDataKey等密码运算API的使用。您可以通过以下方式查询密钥的标签:
通过控制台获取密钥的标签
登录密钥管理服务控制台,在页面左上角选择地域信息后,在左侧导航栏单击密钥管理页面。
在密钥管理页面,根据您要处理的密钥管理类型,单击软件密钥管理页签或硬件密钥管理页签。
单击实例名称,在实例详情页面,找到目标密钥。
单击密钥名称,在密钥详情页面的标签区域,查看密钥的标签键和标签值。
通过调用ListResourceTags接口获取密钥的标签。
常见的授权策略示例
场景 | 策略脚本 |
允许访问所有的KMS资源 | 重要 为保障数据安全,不推荐您配置允许访问KMS所有资源的权限策略。
|
允许指定的IP地址段或IP地址访问KMS所有资源 | 以下代码以192.168.0.0/16、172.16.215.218为例。
|
列出和查看密钥,使用密钥进行加密、解密和生成数据密钥 | 说明 请将
|
允许使用含有指定标签的密钥进行信封加密、解密和生成数据密钥 | 以下代码以标签键为 说明 请将
|
列举凭据、读取凭据属性权限 | 说明 请将
|
获取指定凭据名称的凭据值 | 以下代码以example-secret凭据名称为例,并且该凭据通过密钥ID为keyId-example的密钥加密。 说明 请将
|
证书签名和验签权限,即使用指定证书生成和验证数字签名的权限 |
|