朕亦甚想你——从后宫管理看阿里云访问控制(下)

2024-01-21 11:59

本文主要是介绍朕亦甚想你——从后宫管理看阿里云访问控制(下),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

相关文章:"朕亦甚想你"——从后宫管理看阿里云访问控制(上)

授权策略管理

  控制台上,授权策略管理界面,如下图所示。

_

  系统授权策略,阿里云提供的一组通用授权策略,主要针对不同产品的只读权限、所有权限。对于阿里云提供的这组授权策略,用户只能用于授权,不能编辑和修改。更详细的解释,请参看 系统授权策略。
  有4个重要的系统授权策略您需要了解,应该会使用到它们。

系统授权策略说明备注
AdministratorAccess管理所有阿里云资源的权限用户下所有阿里云服务的所有权限
AliyunOSSFullAccess管理开放存储服务(OSS)权限用户下OSS所有Bucket和Object的所有权限
AliyunOSSReadOnlyAccess只读访问开放存储服务(OSS)的权限可以读取/列举OSS的所有Bucket和Object
AliyunSTSAssumeRoleAccess调用STS服务AssumeRole接口的权限子用户角色扮演需要拥有该权限

  如果您有更细粒度的授权需求,需要创建自定义授权策略。创建OSS的自定义授权策略,强烈建议使用 RAM Policy Editor 生成。控制台上授权策略管理的路径如下:

  • 创建自定义授权策略:访问控制 -> 授权策略管理 -> 自定义授权策略 -> 新建授权策略
  • 查看自定义授权策略:访问控制 -> 授权策略管理 -> 自定义授权策略 -> 查看
  • 修改自定义授权策略:访问控制 -> 授权策略管理 -> 自定义授权策略 -> 修改
  • 删除自定义授权策略:访问控制 -> 授权策略管理 -> 自定义授权策略 -> 删除

扮演角色

流程

  后宫中人员充当角色,需要皇后的遴选或批准。阿里云访问控制中临时用户怎么扮演角色呢?流程如下:

_

  上述步骤详细说明如下表:

步骤说明
1.创建角色并授权在控制台完成,步骤请参考“授权->授权->角色授权”。
2.创建子用户并授权AliyunSTSAssumeRoleAccess在控制台完成,步骤请参考“授权->授权->子用户授权”。只能由子用户申请角色扮演,主用户、临时用户不可以。子用户必须授予AliyunSTSAssumeRoleAccess权限后,才能申请角色扮演。
在后宫,皇上是不管理宫女、宦官等角色的。皇上许可后,皇后管理后宫各角色。皇上许可相当于授予了AliyunSTSAssumeRoleAccess权限。
3.申请临时用户扮演角色需要使用STS SDK的完成,调用AssumeRole接口。下面重点讲述,给出Java SDK的示例。
临时用户的权限跟扮演的角色有关,跟子用户的权限没有关系。
4.临时用户密钥AssumeRole接口会返回密钥,即AccessKeyID、AccessKeySecret、SecurityToken。
5.密钥返回给临时用户临时用户获取到密钥。
6.使用密钥访问OSS临时用户使用密钥访问OSS等阿里云服务。

  第3步,需要使用STS SDK完成。以Java SDK说明使用方法。在Maven工程中添加如下依赖。

<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-sts</artifactId><version>2.1.6</version>
</dependency>
<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>2.1.7</version>
</dependency>

代码如下:

public class StsServiceSample {// 目前只有"cn-hangzhou"这个region可用, 不要使用填写其他region的值public static final String REGION_CN_HANGZHOU = "cn-hangzhou";// 当前 STS API 版本public static final String STS_API_VERSION = "2015-04-01";// STS服务必须为 HTTPSpublic static final ProtocolType STS_PROTOCOL_TYPE = ProtocolType.HTTPS;static AssumeRoleResponse assumeRole(String accessKeyId,String accessKeySecret, String roleArn, String roleSessionName, String policy, long expired, ProtocolType protocolType)
throws ClientException {// 创建一个 Aliyun Acs Client, 用于发起 OpenAPI 请求IClientProfile profile = DefaultProfile.getProfile(REGION_CN_HANGZHOU, accessKeyId, accessKeySecret);DefaultAcsClient client = new DefaultAcsClient(profile);// 创建一个 AssumeRoleRequest 并设置请求参数final AssumeRoleRequest request = new AssumeRoleRequest();request.setVersion(STS_API_VERSION);request.setMethod(MethodType.POST);request.setProtocol(protocolType);request.setRoleArn(roleArn);request.setRoleSessionName(roleSessionName);request.setPolicy(policy);request.setDurationSeconds(expired);// 发起请求,并得到responsereturn client.getAcsResponse(request);}public static void main(String[] args) {// 只有 子账号才能调用 AssumeRole接口// 阿里云主账号的AccessKeys不能用于发起AssumeRole请求// 请首先在RAM控制台创建子用户,并为这个用户创建AccessKeysString accessKeyId = "b6R5********SQmR";String accessKeySecret = "QzubQ****Dzzc****eCdD****LPjF4";// AssumeRole API 请求参数: RoleArn, RoleSessionName, Policy, and// DurationSeconds// RoleArn可以到控制台上获取,路径是 访问控制 > 角色管理 > 角色名称 > 基本信息 > ArnString roleArn = "acs:ram::10858****7845250:role/accessossforinnerrole";// RoleSessionName 是临时Token的会话名称,自己指定用于标识你的用户,主要用于审计,或者用于区分Token颁发给谁// 但是注意RoleSessionName的长度和规则,不要有空格,只能有'-' '_' 字母和数字等字符// 具体规则请参考API文档中的格式要求String roleSessionName = "alice-001";// 如何定制你的policy,如果policy为null,则STS的权限与roleArn的policy的定义的权限String policy = null;// 过期时间设置默认是一小时,单位秒有效值是[900, 3600],即15分钟到60分钟。long expired = 3600;try {AssumeRoleResponse response = assumeRole(accessKeyId,accessKeySecret, roleArn, roleSessionName, policy, expired, STS_PROTOCOL_TYPE);System.out.println("Expiration: " + response.getCredentials().getExpiration());System.out.println("Access Key Id: " + response.getCredentials().getAccessKeyId());System.out.println("Access Key Secret: " + response.getCredentials().getAccessKeySecret());System.out.println("Security Token: " + response.getCredentials().getSecurityToken());} catch (ClientException e) {System.out.println("Error code: " + e.getErrCode());System.out.println("Error message: " + e.getErrMsg());}}
}

  上面代码的完整示例,请参看 GitHub ;

  其它的STS SDK的使用示例,请参考:

  • Java STS Demo ;
  • PHP STS Demo ;
  • Ruby STS Demo ;
  • JS STS Demo ;
  • C STS Demo 。

  STS SDK使用更详细的说明,请参看 STS SDK使用手册 。

角色扮演常见问题

  角色扮演场景错误及原因如下:

序号问题原因
1ErrorCode: NoPermission
ErrorMessage: Roles may not be assumed by root accounts.
使用主用户的密钥调用AssumeRole,请使用子用户的密钥。
2ErrorCode: MissingSecurityToken
ErrorMessage: SecurityToken is mandatory for this action.
使用临时用户的密钥调用AssumeRole,请使用子用户的密钥。
3Error code: InvalidAccessKeyId.NotFound
Error message: Specified access key is not found
AccessKeyId无效,请检查是否写错,特别是前后不能后空格。
4Error code: InvalidAccessKeyId.Inactive
Error message: Specified access key is disabled.
使用的子用户的密钥,已经被禁止,请启用密钥或更换密钥。 密钥是否被禁止,请控制台的“访问控制->用户管理->管理->用户详情->用户AccessKey”确认,并开启。
5ErrorCode: InvalidParameter.PolicyGrammar
ErrorMessage: The parameter Policy has not passed grammar check.
角色扮演时指定的授权策略无效。AssumeRole时可以指定授权(Policy),也可以不指定。如果指定授权策略,则临时用户的权限是指定的授权策略和角色权限的交集;如果不指定授权策略,临时用户的权限是角色的权限。
报该错误时,请检查指定的授权策略Policy。不推荐临时用户扮演角色时指定授权策略。如果的确需要使用授权策略,强烈建使用 RAM Policy Editor 生成授权策略。
6ErrorCode: InvalidParameter.RoleSessionName
ErrorMessage: The parameter RoleSessionName is wrongly formed.
角色扮演时指定RoleSessionName无效。此参数用来区分不同的Token,以标明谁在使用此Token,便于审计; 格式:^[a-zA-Z0-9.@-_]+$,2-32个字符,了解更多请参看 扮演角色操作接口。如命名a,1,abc\*abc,忍者神龟等都是非法的
7ErrorCode: InvalidParameter.DurationSeconds
Error message: The Min/Max value of DurationSeconds is 15min/1hr.
角色扮演时指定的过期时间无效,即AssumeRoleRequest.setDurationSeconds参数无效。角色扮演时可以指定过期时间,单位为秒,有效时间是900 ~ 3600,如assumeRoleRequest.setDurationSeconds(60L * 20); 20分钟内有效。
8ErrorCode: NoPermission
ErrorMessage: No permission perform sts:AssumeRole on this Role. Maybe you are not authorized to perform sts:AssumeRole or the specified role does not trust you
原因1:AssumeRole的子用户没有权限,请给子用户授予AliyunSTSAssumeRoleAccess系统授权策略。请在“访问控制->用户管理->授权->可选授权策略名称”中给子用户授权AliyunSTSAssumeRoleAccess。
原因2:申请角色扮演的子用户的云账号ID与角色的“受信云账号ID”不符,请角色创建者确认并修改。子用户的云账号ID,即创建子用户的主用户的ID;角色的云账号ID,即创建角色的主用户的云账号ID。请在如下位置确认修改 访问控制 -> 角色管理 -> 管理 -> 角色详细 -> 编辑基本信息 中确认修改。
原因3:角色的类型错误,如果角色的类型分为“用户角色”和“服务角色”,服务角色不能使用AssumeRole扮演临时用户。

最佳实践

  典型使用场景,请参看 RAM使用场景 。

  最佳实践原则,请参看 最佳实践原则 。

  最佳实践补充:

  • 权限分配要简洁明了,便于管理;
  • 子用户最好只有一个授权策略,或只加入一个群;
  • 角色最好只有一个授权策略;
  • 自定义授权策略命名尽量符合含义,备注中详细说明授予的权限和资源;
  • 授权策略尽量使用系统授权策略,更精细的权限管理,请使用RAM Policy Editor生成;
  • 子用户有重复授权现象,请使用群组;
  • 群组要有尽量少、尽量清晰的授权策略;
  • 扮演时角色尽量不指定policy,通过角色的权限控制。

常见问题及排查

OSS 403问题

  OSS返回的常见错误,请参看 OSS的错误响应。
  其中403错误及原因如下表:

| 错误 | 错误码错误信息 | 错误原因 | 解决办法 |
| -------------- | --------------------------- | ---------------------------------------- | ------------------ |
| UserDisable.UserDisable | ErrorCode: UserDisable
ErrorMessage: UserDisable | 用户欠费或者因为安全原因被禁止访问 | OSS常见错误及排查 |
| RequestTimeTooSkewed | ErrorCode: RequestTimeTooSkewed
ErrorMessage: The difference between the request time and the current time is too large. | 发起请求的时间和服务器时间超出15分钟,一般是客户端系统时间错误 | OSS常见错误及排查 |
| InvalidAccessKeyId | ErrorCode: InvalidAccessKeyId
ErrorMessage: The OSS Access Key Id you provided does not exist in our records. | AccessKeyId无效/被禁止或者过期。 | OSS常见错误及排查 |
| SignatureDoesNotMatch | ErrorCode: SignatureDoesNotMatch
ErrorMessage: The request signature we calculated does not match the signature you provided. Check your key and signing method. | 客户端和服务计算的签名不符 | OSS常见错误及排查 |
| PostObject | ErrorCode: AccessDenied
ErrorMessage: Invalid according to Policy: Policy expired.
ErrorCode: AccessDenied
ErrorMessage: Invalid according to Policy: Policy Condition failed: … | PostObject中Policy无效 | PostObject |
| Cors | ErrorCode: AccessForbidden
ErrorMessage: CORSResponse: This CORS request is not allowed. This is usually because the evalution of Origin, request method / Access-Control-Request-Method or Access-Control-Requet-Headers are not whitelisted by the resource's CORS spec. | CORS没有配置或配置不对 | OSS设置跨域访问 |
| Refers | ErrorCode: AccessDenied
ErrorMessage: You are denied by bucket referer policy. | 请检查Bucket的Refers配置 | OSS防盗链 |
| AccessDenied | 见下面表权限问题错误及原因 | 无权限 | 下面详细讲述 |
| 其它小类错误 | | | |

权限问题

  权限问题错误及原因见下表:

序号错误原因
1ErrorCode: AccessDenied
ErrorMessage: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
Bucket和Endpoint不符
2ErrorCode: AccessDenied
ErrorMessage: You are forbidden to list buckets.
没有listBuckets权限
3ErrorCode: AccessDenied
ErrorMessage: You do not have write acl permission on this object
无setObjectAcl权限
4ErrorCode: AccessDenied
ErrorMessage: You do not have read acl permission on this object.
无getObjectAcl权限
5ErrorCode: AccessDenied
ErrorMessage: The bucket you visit is not belong to you.
子用户没有Bucket管理的权限(如getBucketAcl CreateBucket、deleteBucket setBucketReferer、 getBucketReferer等)
6ErrorCode: AccessDenied
ErrorMessage: You have no right to access this object because of bucket acl.
子用户/临时用户没有访问Object的权限(如putObject getObject、appendObject deleteObject、postObject)等
7ErrorCode: AccessDenied
ErrorMessage: Access denied by authorizer's policy.
临时用户访问无权限,该临时用户角色扮演指定授权策略,该授权策略无权限
8ErrorCode: AccessDenied
ErrorMessage: You have no right to access this object.
子用户/临时用户无当前操作权限(如initiateMultipartUpload等)

问题排查

  先熟悉如下操作:

  • 怎么辨别密钥是主用户、子用户还是临时用户的?
    临时的用户的密钥的AccessKeyID,以STS开头比较好辨认,如“STS.MpsSonrqGM8bGjR6CRKNMoHXe”。是否是主用户的密钥,需要到 控制台 查看AccessKeyID是否存在,如果存在说明是主用户;如果不存在,该用户子用户。在“访问控制 -> 用户管理 -> 管理 -> 用户详情 -> 用户AccessKey”,查看子用户的AccessKeyID,并找到对应的子用户。
  • 怎么查看子用户的权限,即子用户的授权策略?
    在控制台的如下位置查看,访问控制 ->用户管理 -> 管理(操作下方) -> 用户授权策略 -> 个人授权策略/加入组的授权策略 -> 查看权限。
  • 怎么查看临时用户的权限,即对应角色的权限?
    在控制的如下位置查看,临时用户 -> 访问控制 -> 角色管理 -> 管理(操作下方) -> 角色授权策略 -> 查看权限。

访问权限错误流程如下图。

_

权限检查流程一般如下:

_

如果检查不出来需要调试,步骤如下:

_

附录

常见问题排查连接

  OSS常见错误及排查  https://help.aliyun.com/document_detail/31945.html
  OSS授权常见问题  https://help.aliyun.com/knowledge_list/9091191.html

常用链接汇总

  阿里云官网  https://www.aliyun.com/
  阿里云控制台  https://home.console.aliyun.com/
  控制台访问控制主页面  https://ram.console.aliyun.com/
  控制台主用户密钥  https://ak-console.aliyun.com/
  阿里云访问控制帮助与文档  https://help.aliyun.com/product/8315075_28625.html
  阿里云授权策略语言  https://help.aliyun.com/document_detail/28664.html
  访问控制系统授权策略  https://help.aliyun.com/document_detail/28652.html
  访问控制角色扮演示例  https://help.aliyun.com/document_detail/28788.html
  对象存储OSS常见错误  https://help.aliyun.com/document_detail/32005.html
  对象存储OSS帮助与文档  https://help.aliyun.com/product/8314910_31815.html
  对象存储OSS安全管理  https://help.aliyun.com/document_detail/31867.html
  对象存储OSS常用授权策略  https://help.aliyun.com/knowledge_list/9091191.html
  OSS上做RAM主子账号的授权  http://www.atatech.org/articles/42666
  OSS授权策略生成工具RAM Policy Editor  http://oss-demo.aliyuncs.com/ram-policy-editor
  OSS常见错误及排查  https://help.aliyun.com/document_detail/31945.html

相关文章:"朕亦甚想你"——从后宫管理看阿里云访问控制(上)

这篇关于朕亦甚想你——从后宫管理看阿里云访问控制(下)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/629474

相关文章

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Sentinel 高可用流量管理框架

Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 Sentinel 具有以下特性: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应

NGINX轻松管理10万长连接 --- 基于2GB内存的CentOS 6.5 x86-64

转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=190176&id=4234854 一 前言 当管理大量连接时,特别是只有少量活跃连接,NGINX有比较好的CPU和RAM利用率,如今是多终端保持在线的时代,更能让NGINX发挥这个优点。本文做一个简单测试,NGINX在一个普通PC虚拟机上维护100k的HTTP

PMBOK® 第六版 规划进度管理

目录 读后感—PMBOK第六版 目录 规划进度管理主要关注为整个项目期间的进度管理提供指南和方向。以下是两个案例,展示了进度管理中的复杂性和潜在的冲突: 案例一:近期,一个长期合作的客户因政策要求,急需我们为多家医院升级一个小功能。在这个过程中出现了三个主要问题: 在双方确认接口协议后,客户私自修改接口并未通知我们,直到催进度时才发现这个问题关于UI设计的部分,后台开发人员未将其传递给

PHP原理之内存管理中难懂的几个点

PHP的内存管理, 分为俩大部分, 第一部分是PHP自身的内存管理, 这部分主要的内容就是引用计数, 写时复制, 等等面向应用的层面的管理. 而第二部分就是今天我要介绍的, zend_alloc中描写的关于PHP自身的内存管理, 包括它是如何管理可用内存, 如何分配内存等. 另外, 为什么要写这个呢, 因为之前并没有任何资料来介绍PHP内存管理中使用的策略, 数据结构, 或者算法. 而在我们

C++学习笔记----6、内存管理(四)---- 通常的内存陷阱(2)

3、Windows环境下使用Visual C++发现并修复内存渗露         内存渗露很难跟踪是因为你无法很容易地看着内存并且看到什么对象处于使用中,一开始在哪儿分配的内存。然而,是有程序可以为你做到这一点的。内存渗露检测工具有昂贵的专业软件包,也有免费下载的工具。如果你是在Microsoft Visual C++环境下工作,它的排错工具库有内建的对于内存渗露检测的支持。该内存检测默认没有