注意事项
如果仅授予子账户系统策略 CRS admin ,可能存在订购企业版实例后无法支付和查询订单的情况,需要配置订单相关系统策略: mktadmin(优惠券相关权限)、bss admin(订单相关权限)、acctadmin(账单相关权限)。详情参考相关文档:子用户如何查看账单管理界面和子用户如何创建和下单一类节点资源。
系统策略说明
CRS默认设置三种系统策略,您可以直接使用系统权限策略为子账号授权,提供的三种系统策略如下:
CRS admin:容器镜像服务CRS-管理员权限策略,拥有CRS所有资源的读写权限。
CRS user:容器镜像服务CRS-普通用户权限策略,拥有除了订单相关操作之外的所有读写权限。
CRS viewer:容器镜像服务CRS-只读用户权限策略,拥有CRS所有资源的只读权限。
子账户授权系统权限
以授权子账户管理员权限策略为例说明:
使用天翼云账号登入IAM控制台。
在左侧导航栏,选择"用户"授权子账户。
选择"操作" - "查看",进入用户界面,选择"权限管理"标签页,选择 "个人权限" - "新增权限"。
搜索框输入CRS,搜索CRS系统权限策略,勾选CRS admin系统策略。
点击下一步,由于CRS系统权限为全局服务资源,无需设置资源池。
点击确定按钮,即可完成为子账户授权。
子账户授权自定义权限策略
使用IAM策略助手创建自定义策略(推荐)
登录容器镜像服务控制台,选择左侧导航栏的"IAM策略"助手功能。
若选择在系统策略的基础上自定义策略,可以选择所需系统策略,然后点击"克隆";若选择从零创建自定义策略,点击 "创建权限策略"
以从零创建自定义策略为例,输入策略名称,输入策略备注(可选),点击 "新增权限语句" 为策略配置允许或者拒绝的权限
权限语句分为三个部分,配置完成后,点击保存权限语句:
权限效力:允许(允许策略中配置的权限和资源),拒绝(拒绝策略中配置的权限和资源)。
操作权限:勾选需要配置的操作权限
操作权限的资源:对于具体操作权限,部分权限可以配置限定资源(实例,命名空间,镜像仓库),具体见 CRS资源权限管控 内容
完成权限语句配置后点击下一步,可预览所配置自定义权限策略的JSON,默认勾选 ctiam 同步生效,点击保存,完成自定义权限策略配置
推荐勾选 ctiam 同步生效,会在CTIAM控制台同步生成对应的自定义策略
如果不勾选 ctiam 同步生效,用户可以复制预览中的权限策略的JSON,登入 IAM控制台,创建自定义策略
用户可以通过克隆、编辑和删除管理已保存的自定义策略。
状态栏表示该自定义策略是否在CTIAM生效,例如用户通过CTIAM修改现存自定义策略,导致策略内容与IAM策略助手中的不一致,状态栏将显示未生效。推荐使用IAM策略助手统一管理您的CRS相关自定义策略。
IAM控制台创建自定义策略
1.使用天翼云账号登入IAM控制台。
2.在左侧导航栏,选择 "策略管理" - "创建自定义策略"。
3.输入策略名称,输入策略描述(可选),点击下一步。
4.设置策略内容,本文介绍使用可视化视图的方式设置,如果需要使用更灵活的JSON视图,请参考IAM文档。
效果:允许(允许策略中配置的权限),拒绝(拒绝策略中配置的权限)
云服务:搜索关键字“容器镜像服务”
操作:根据需求勾选需要配置的操作(即权限)
资源:具体见资源权限管控内容
条件:该配置参考具体IAM文档。
5. 点击保存,完成自定义策略的创建。
为子账户设置自定义权限策略
使用天翼云账号登入IAM控制台。
在左侧导航栏,选择用户授权子账户。
选择操作 - 查看,进入用户界面,选择权限管理标签页,选择个人权限的新增权限。
搜索框输入上一步设置的自定义权限策略名称,勾选上一步创建的自定义权限策略。
点击“下一步”,由于CRS自定义权限为全局服务资源,无需设置资源池。
点击 “确定”,即可完成为子账户授权。
CRS资源权限管控
使用IAM的JSON视图创建自定义策略时,可以通过设置资源字段来实现细粒度的资源权限管控。
CRS的资源定义
CRS的资源定义方式如下表所示:
资源类型 | 资源含义 | Resource示例 | Resource含义 |
---|---|---|---|
* | 全部实例 | ctrn:crs:$regionid:$accountid:* | 拥有全部实例的权限 |
instance | 实例 | ctrn:crs:$regionid:$accountid:instance/$instanceId | 拥有$instanceId实例的权限 |
repository | 镜像 | ctrn:crs:$regionid:$accountid:repository/$instanceId | 拥有$instanceId实例下所有命名空间和仓库的权限 |
ctrn:crs:$regionid:$accountid:repository/$instanceId/$namespaceName | 拥有$instanceId实例$namespaceName命名空间及其下仓库的权限 | ||
ctrn:crs:$regionid:$accountid:repository/$instanceId/$namespaceName/$repositoryName | 拥有$instanceId实例$namespaceName命名空间$repositoryName仓库的权限 | ||
chart | Helm Chart | ctrn:crs:$regionid:$accountid:chart/$instanceId | 拥有$instanceId实例下所有chart命名空间和chart仓库的权限 |
ctrn:crs:$regionid:$accountid:chart/$instanceId/$chartNamespaceName | 拥有$instanceId实例$chartNamespaceName chart命名空间及其下chart仓库的权限 | ||
ctrn:crs:$regionid:$accountid:chart/$instanceId/$chartNamespaceName/$chartRepositoryName | 拥有$instanceId实例$chartNamespaceName chart命名空间$chartRepositoryName chart仓库的权限 |
参数含义如下:
参数名称 | 说明 |
---|---|
regionId | 资源池ID,可用*代替 |
accountId | 账号ID,可用*代替 |
instanceId | 容器镜像服务实例ID |
namespaceName | 命名空间名称 |
repositoryName | 镜像仓库名称 |
chartNamespaceName | Chart命名空间名称 |
chartRepositoryName | Chart仓库名称 |
CRS实例、命名空间和仓库的权限管控
创建自定义策略时,使用JSON视图配置权限编码(Action字段)和资源(Resource字段),可实现对CRS实例、命名空间和仓库的权限管控。
在如下自定义策略示例中,授予了实例ID1845994351386169346、命名空间ns1和ns2、以及镜像仓库repo1和repo2的权限。
在配置时,可根据实际情况替换实例ID、命名空间和仓库名称,也可按需增加权限编码,随后将策略内容复制到JSON视图的文本框中,便可实现策略的创建。
{
"Version": "1.1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"crs:inst:instance-list",
"crs:inst:get_instance",
"crs:inst:get_instance_quotas",
"crs:inst:get_instance_storage_config",
"crs:inst:update_instance_storage_config",
"crs:inst:update_password",
"crs:inst:list_instance_quotas",
"crs:inst:get_token"
],
"Resource": [
"ctrn:crs:*:*:instance/1845994351386169346"
]
},
{
"Effect": "Allow",
"Action": [
"crs:inst:list_namespace",
"crs:inst:get_namespace",
"crs:inst:validate_namespace_name",
"crs:inst:update_namespace",
"crs:inst:delete_namespace"
],
"Resource": [
"ctrn:crs:*:*:repository/1845994351386169346/ns1",
"ctrn:crs:*:*:repository/1845994351386169346/ns2"
]
},
{
"Effect": "Allow",
"Action": [
"crs:inst:list_repository",
"crs:inst:get_repository",
"crs:inst:validate_repository",
"crs:inst:update_repository",
"crs:inst:delete_repository",
"crs:inst:get_layers",
"crs:inst:pull_image",
"crs:inst:push_image"
],
"Resource": [
"ctrn:crs:*:*:repository/1845994351386169346/ns1/repo1",
"ctrn:crs:*:*:repository/1845994351386169346/ns2/repo2"
]
}
]
}
子账户登录CRS实例的访问凭证
查看子账户的访问凭证
使用子账户登录容器镜像服务控制台。
左侧导航栏,选择访问控制 - 访问凭证,即可查看子账户登录实例的用户名,即docker login命令中--username参数指定的值。
子账户的用户名和密码有两种情况:
CRS实例不是由子账户所创建: 子账户用户名的形式为: <创建实例时填写的用户名>@<子账户的数字ID>,例如:zhangsan@1234。子账户的密码默认没有设置,在初次登录实例之前,需要在访问凭证页面点击重置密码按钮设置密码,之后才能使用用户名和设置的密码登录实例。子账户的密码与其他子账户和主账户的密码相互独立。重置密码不会影响其他账户。
CRS实例是由子账户所创建: 子账户的用户名和密码即为创建实例时填写的用户名和密码,可直接使用用户名和密码登录实例。子账户与主账户共用密码。重置密码也会影响主账户。
子账户的访问凭证与IAM的关系
子账户的访问凭证仅用于登录CRS实例以推拉镜像,访问凭证的用户名与IAM授权时所选择的子账户用户名无关。
要查询子账户在IAM授权时对应的用户名,可使用子账户登录IAM控制台,左侧导航栏选择概览,查询到子账户的用户ID。
使用主账户登录IAM控制台,左侧导航栏选择用户,即可查看到子账户用户ID对应用户,便可对其进行授权。