-
响应消息 表3 响应参数 参数名称 是否必选 参数类型 说明 is_success 是 Boolean 执行请求是否成功。“true”表示请求执行成功。 message 是 String 系统提示信息。执行成功时,信息可能为空。 object_name 否 String 对象名称。 object_type 否 String 对象类型。 privileges 否 Array of Object 权限信息。具体内容请参考表4。 count 否 Integer 权限总数量。 表4 privileges参数 参数名称 是否必选 参数类型 说明 object 否 String 授权对象,和赋权API中的“object”对应。 is_admin 否 Boolean 判断用户是否为管理员。 user_name 否 String 用户名称,即该用户在当前数据库上有权限。 privileges 否 Array of Strings 该用户在数据库上的权限。
-
响应示例 {
"is_success": true,
"message": "",
"object_name": "9561",
"object_type": "flink",
"count": 2,
"privileges": [
{
"user_name": "testuser1",
"is_admin": true,
"privileges": [
"ALL"
]
},
{
"user_name": "user1",
"is_admin": false,
"privileges": [
"GET"
]
}
]
}
-
关于OBS OperateAccess和OBS ReadOnlyAccess在控制台列举对象失败的问题说明 由于OBS提供的系统策略OBS OperateAccess和OBS ReadOnlyAccess中预置的列举权限只有列举对象(obs:bucket:ListBucket),而不包含列举多版本对象(obs:bucket:ListBucketVersions)。 所以当桶中存在多版本对象时,
IAM 用户通过控制台进入桶对象列表可能出现无法列举出对象的情况。此时需要额外授予列举多版本对象的权限(obs:bucket:ListBucketVersions)。
-
原因 给用户配置了OBS系统权限 在IAM中给用户配置了OBS ReadOnlyAccess、OBS OperateAccess、OBS Buckets Viewer等系统权限后,实际上只允许执行一部分OBS操作,例如OBS OperateAccess可以执行列举桶、获取桶基本信息、获取桶元数据、列举对象(不包含多版本)、上传对象、下载对象、删除对象、获取对象ACL操作。 给用户配置了桶读写权限 通过桶策略给用户配置了桶的读写权限后,实际上授予的权限如下: GetObject:下载对象 GetObjectVersion:下载多版本对象 PutObject:上传对象 DeleteObject:删除对象 DeleteObjectVersion:删除多版本对象 上述每一个权限对应一个OBS功能接口,用户使用API或SDK可以正常调用这些接口。但是通过控制台或者客户端工具(OBS Browser+)登录时,加载桶列表、桶概览等页面时会调用获取桶列表(ListAllMyBuckets)等接口,加载对象列表时会调用列举桶内对象(ListBucket)等接口,其他页面也会调用其他的OBS接口。如果授予的权限中没有包含这些接口,则会提示“拒绝访问,请检查相应权限”,或者“不允许在请求的资源上执行此操作”。 例如桶概览页面会通过接口查看桶的生命周期规则、CORS规则等是否已经配置,如图1,而预置的系统权限并未包含这些操作权限。 图1 桶的基础配置
-
排查项二:集群与U
CS 网络连接状态 公网接入: 检查集群是否绑定公网IP或配置公网NAT网关。 检查集群安全组的出方向是否放通。如需对出方向做访问控制,请联系技术支持获取目的地址和端口号。 解决网络问题后,删掉已有的proxy-agent Pod使其重新生成Pod资源,查看新建Pod的日志中是否存在“Start serving”的日志打印。 kubectl -n kube-system logs proxy-agent-*** | grep "Start serving" 日志正常打印后,刷新UCS控制台页面,查看集群是否正常连接。 私网接入: 检查集群安全组的出方向是否放通。如需对出方向做访问控制,请联系技术支持获取目的地址和端口号。 排除集群与UCS和IDC之间的网络连接故障。 根据网络连接方式不同,请参考以下文档进行故障排除。 云专线(DC):请参考故障排除。
虚拟专用网络 (VPN):请参考故障排除。 排除集群私网接入的VPCEP故障,VPCEP状态需为“已接受”。如VPCEP被误删除,则需重新创建,请参见私网接入的集群误删除VPCEP后如何恢复?。 图1 VPCEP状态 解决网络问题后,删掉已有的proxy-agent Pod使其重新生成Pod资源,查看新建Pod的日志中是否存在“Start serving”的日志打印。 kubectl -n kube-system logs proxy-agent-*** | grep "Start serving" 日志正常打印后,刷新UCS控制台页面,查看集群是否正常连接。
-
排查项三:集群认证信息变化 如错误显示“cluster responded with non-successful status: [401][Unauthorized]”,通过观察集群三个Master节点“/var/paas/sys/log/kubernetes/auth-server.log”日志,可能是IAM网络连通故障。请确认IAM
域名 解析能力,及IAM服务连通性正常。 常见问题日志如下: Failed to authenticate token: *******: dial tcp: lookup iam.myhuaweicloud.com on *.*.*.*:53: no such host 此类日志说明,节点缺少对iam.myhuaweicloud.com解析能力,请参考安装前准备,配置对应的域名解析。 Failed to authenticate token: Get *******: dial tcp *.*.*.*:443: i/o timeout 此类日志说明,节点访问IAM服务超时,请确保节点与华为云IAM服务能正常通信。 currently only supports Agency token 此类日志说明请求不是从UCS服务发起,目前本地集群只支持UCS服务IAM Token访问。 IAM assumed user has no authorization/iam assumed user should allowed by TEAdmin 此类日志说明UCS服务访问集群故障,请联系华为技术人员进行排障。 Failed to authenticate token: token expired, please acquire a new token 此类日志说明Token存在过期现象,请使用date命令确定时间是否差距过大,如果节点时间与标准时间差距过大,请同步时间后,查看集群是否恢复。如果长时间未恢复,可能需要重装集群,请联系华为技术人员进行排障。 解决上述问题后,请使用crictl ps | grep auth | awk '{print $1}' | xargs crictl stop命令重启auth-server容器。
-
排查思路 舰队或集群添加权限时出现异常事件的排查思路大致可根据报错信息进行定位,如表1所示。 表1 报错信息说明 报错信息 说明 推荐排查项 ClusterRole failed reason:Get \"https://kubernetes.default.svc.cluster.local/apis/rbac.authorization.k8s.io/v1/clusterroles/XXXXXXX?timeout=30s\": Precondition Required" Or Get ClusterRole failed reason:an error on the server (\"unknown\") has prevented the request from succeeding (get clusterroles.rbac.authorization.k8s.io 出现该错误的原因大概率为集群还未接入,接入集群中的proxy-agent运行状态异常,或者网络异常。 排查项一:proxy-agent的运行状态 排查项二:集群与UCS网络连接状态 Unauthorized 出现该错误的原因可能是多样的,请根据实际状态码进行排查。 例如状态码401表示用户没有访问权限,可能的原因是集群认证信息过期。 排查项三:集群认证信息变化 Get cluster namespace[x] failed. Or Reason:namespace "x" not found. 出现该错误的原因是集群内没有对应的命名空间。 在集群下创建对应的命名空间并进行重试操作。 如:kubectl create namespace ns_name 如果不需要使用该命名空间,该异常事件可以忽略。
-
排查项一:proxy-agent的运行状态 集群从UCS注销后,原有proxy-agent配置文件中包含的认证信息将会失效,请同时删除集群中已部署的proxy-agent实例。如需再次接入UCS,必须重新从UCS控制台下载proxy-agent配置文件进行部署。 登录目标集群Master节点。 查看集群代理部署状态。 kubectl -n kube-system get pod | grep proxy-agent 如果部署成功,预期输出如下: proxy-agent-*** 1/1 Running 0 9s 说明proxy-agent部署正常,如proxy-agent没有处于正常Running状态,可以使用kubectl -n kube-system describe pod proxy-agent-***查看Pod的告警信息,详细排查思路可参考proxy-agent部署失败怎么办?。 proxy-agent默认部署两个Pod实例,存在一个Pod正常Running即可使用基本功能,但是高可用性无法保证。 打印proxy-agent的Pod日志,查看代理程序是否可以连接到UCS。 kubectl -n kube-system logs proxy-agent-*** | grep "Start serving" 如没有“Start serving”的日志打印但是proxy-agent实例状态正常,则需要继续检查其他排查项。
-
请求示例 赋予某项目(项目ID:0732e57c728025922f04c01273686950)数据库db1的查询权限、数据表db1.tbl的删除权限、数据表指定列db1.tbl.column1的查询权限。 {
"projectId": "0732e57c728025922f04c01273686950",
"action": "grant",
"privileges": [
{
"object": "databases.db1.tables.tb2.columns.column1",
"privileges": ["SELECT"]
},
{
"object": "databases.db1.tables.tbl",
"privileges": ["DROP_TABLE"]
},
{
"object": "databases.db1",
"privileges": ["SELECT"]
}
]
} 赋予某用户dlitest的数据库dbtest的查询数据权限。 {
"action": "grant",
"privileges": [
{
"object": "databases.dbtest",
"privileges": [
"SELECT"
]
}
],
"user_name": "dlitest"
}
-
请求消息 表2 请求参数 参数 是否必选 参数类型 说明 user_name 否 String 被赋权的用户名称,该用户将有权访问指定的数据库或数据表,被收回或者更新访问权限。 projectId 否 String 被赋权的项目ID,数据赋权给其他项目后,该项目的管理员将有权访问指定的数据库或数据表。 action 是 String 指定赋权或回收。 grant:赋予权限 revoke:回收权限 update:更新权限 说明: 当用户同时拥有grant和revoke权限的时候才有权限使用update操作。 privileges 是 Array of objects 赋权信息。具体参数请参考表3。 表3 privileges参数 参数 是否必选 参数类型 说明 object 是 String 被赋权的数据对象,命名方式为: “databases.数据库名”,则数据库下面的所有数据都将被共享。 “databases.数据库名.tables.表名”, 指定的表的数据将被共享。 “databases.数据库名.tables.表名.columns.列名”,指定的列将被共享。 “edsconnections.连接ID”,赋予某增强型跨源连接的使用权限。 privileges 是 Array of strings 待赋权,回收或更新的权限列表。 说明: 若“action”为“update”,更新列表为空,则表示回收用户在该数据库或表的所有权限。
-
URI URI格式: GET /v1.0/{project_id}/databases/{database_name}/tables/{table_name}/users 参数说明 表1 URI 参数 参数名称 是否必选 说明 project_id 是 项目编号,用于资源隔离。获取方式请参考获取项目ID。 database_name 是 被查询的表所在的数据库名称。 table_name 是 被查询的表名称。
-
响应示例 { "is_success": true, "message": "", "privileges": [ { "is_admin": false, "object": "databases.dsstest.tables.csv_par_table", "privileges": [ "SELECT" ], "user_name": "tent2" }, { "is_admin": true, "object": "databases.dsstest.tables.csv_par_table", "privileges": [ "ALL" ], "user_name": "tent4" } ]} 调用API出错后,将不会返回上述结果,而是返回错误码和错误信息,详细介绍请参见错误码。
-
示例 回收用户user_name1对于数据库db1的删除数据库权限。 1 REVOKE DROP_DATABASE ON databases.db1 FROM USER user_name1; 回收用户user_name1对于数据库db1的表tb1的SELECT权限。 1 REVOKE SELECT ON databases.db1.tables.tb1 FROM USER user_name1; 回收角色role_name对于数据库db1的表tb1的SELECT权限。 1 REVOKE SELECT ON databases.db1.tables.tb1 FROM ROLE role_name;
-
注意事项 privilege必须为赋权对象在resource中的已授权限,否则会回收失败。Privilege支持的权限类型可参见数据权限列表。 resource可以是queue、database、table、view、column,格式分别为: queue的格式为:queues.queue_name database的格式为:databases.db_name table的格式为:databases.db_name.tables.table_name view的格式为:databases.db_name.tables.view_name column的格式为:databases.db_name.tables.table_name.columns.column_name
-
IAM账号进入CodeArts API首页报错 IAM账号首次进入CodeArts API首页报错,需要给IAM账号进行授权。 CodeArts API支持的系统权限如下: DevCloud Console ReadOnlyAccess:软件开发生产线控制台只读权限,授权后可正常使用CodeArts API产品,但不可创建项目。 DevCloud Console FullAccess:软件开发生产线控制台管理员权限,拥有该权限的用户可以购买CodeArts。 ProjectMan ConfigOperations:设置新建项目权限。 详细授权操作请参照授权IAM账号。 父主题: 权限相关