使用临时令牌访问 OSS 遇到授权问题的分析说明

本文涉及的产品
对象存储 OSS,20GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
文件存储 NAS,50GB 3个月
简介: 本文针对移动APP开发客户在使用OSS过程中遇到的一个常见的权限错误问题,进行了分析说明,并在说明过程中引用了阿里云官方文档里RAM的部分解释。

在对象存储OSS的访问场景中,有很常见的一种场景是移动应用使用临时安全令牌访问OSS。在这个场景中,有不止一个用户遇到过在配置初始时,测试发现上传下载报错,而这时候检查令牌对应的授权,发现给到的OSS访问授权是没有的问题的。而且错误提示基本都是:"You are not authorized to do this action. You should be authorized by RAM."

针对这个报错,一句话总结解决办法,就是给使用该安全令牌的RAM用户(注意是RAM用户,不是RAM角色)授予权限“AliyunSTSAssumeRoleAccess”。然后就可以正常工作了。

然而这里要指出,这个办法有些简单粗暴,有可能会导致授权放大,使得RAM用户可以得到权限范围更大的令牌。更好的做法,是让RAM用户只能得到特定的令牌。这个文章最后会给出办法。

为了更好的理解导致这个问题的原因和为什么通过这样的授权来解决问题,本文对这里的权限策略逻辑进行了简单梳理,给各位参考。首先把一些基本概念在这里在列一下。

  • RAM(访问控制):使用阿里云服务的客户,一定会使用到阿里云的访问控制(RAM)功能。RAM允许在一个云账号下创建并管理多个身份,并允许给单个身份或一组身份分配不同的权限,从而实现不同用户拥有不同资源访问权限的目的。

针对本文提到的场景,重点说明下RAM用户和RAM角色两个身份。

  • RAM用户:是RAM的一种实体身份类型,有确定的身份ID和身份凭证。RAM用户必须在获得云账号(主账号)的授权后才能登录控制台或使用API操作云账号下的资源。
  • RAM角色:RAM角色是一种虚拟用户,不是实体用户。RAM角色可以被赋予一组权限策略,但没有确定的登录密码或访问密钥。RAM角色需要被一个受信的实体用户(RAM用户)扮演,扮演成功后实体用户将获得RAM角色的安全令牌,使用这个安全令牌就能以角色身份访问被授权的资源。

在RAM角色里,有个概念是角色的令牌。这个令牌是通过阿里云的STS服务来提供的。

  • STS(Security Token Service),是阿里云提供的一种临时访问权限管理服务。通过STS服务,您所授权的身份主体(RAM用户、用户组或RAM角色)可以获取一个自定义时效和访问权限的临时访问令牌。STS令牌持有者可以通过API或者控制台操作被授权的云资源
  • 角色令牌:是角色身份的一种临时访问密钥。角色身份没有确定的访问密钥,当一个实体用户要使用角色时,必须通过扮演角色来获取对应的角色令牌,然后使用角色令牌来调用阿里云服务API。

所以,扮演角色,就是RAM用户访问STS服务获取临时访问令牌。RAM用户调用STS API AssumeRole可以获得角色的安全令牌,使用安全令牌可以访问云服务API。
pic1

有了以上的逻辑,我们再看文章开始提到的问题就很明白了。

在文章开始的场景中,同一个主账号下,创建了一个RAM用户和一个RAM角色,并给了RAM角色对应的授权(例如OSS的完全控制权限)。当RAM用户去拿这个角色临时令牌的时候,他必须要有权限扮演这个角色,这样他去调用STS AssumeRole,携带角色名称参数时,才不会被STS服务鉴权失败。而“AliyunSTSAssumeRoleAccess”这个授权,给到RAM用户的权限,其实就是允许该RAM用户扮演主账号下的角色。所以,通过文章一开始提到的解决办法,可以解决对应的报错问题。

然而,这里又引发出了一个新问题,假设主账号下有A角色和B角色,其中A角色的权限范围大于B角色(例如A角色具备OSS的完全控制权限,B角色只有OSS的只读权限)。而用户只想授权某个RAM用户扮演B角色,不想过度授权其可以扮演A角色。这个时候,如果赋予RAM用户“AliyunSTSAssumeRoleAccess”可能就无法达到目的。

可以从RAM用户或者RAM角色两个维度来设定细化的策略。

  • RAM用户的角度:比如通过自定义策略,使得该RAM用户只可以扮演指定的RAM角色,而不再使用文章开始的办法,简单的赋予该RAM用户“AliyunSTSAssumeRoleAccess”这样的通用权限。自定义策略示例如下所示:
    {

    "Statement": [
        {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Resource": "acs:ram:*:$accountId:role/$roleName"
        }
    ],
    "Version": "1"

    }

  • RAM角色授权的角度:比如A角色创建时,指定该角色的可信实体为该主账号下的某个或某些特定RAM用户。策略示例如下:
    {

    "Statement": [
        {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
                "RAM": [
                   "acs:ram::123456789012****:user/ramuser1"
                ]
            }
        }
    ],
    "Version": "1"

    }。

基于自定义策略,限制RAM用户具体可以扮演的RAM角色,可以更细粒度的控制RAM用户的权限范围,将权限限制到最小可用程度,是更推荐的一种安全做法。

最后总结一下:本文针对移动APP开发客户在使用OSS过程中遇到的一个常见的权限错误问题,进行了分析说明,并在说明过程中引用了阿里云官方文档里RAM的部分解释。实际上,阿里云RAM功能非常的丰富,搭配云存储等阿里云产品可以有很多种不同的用法,有兴趣的同学可以好好研究一下。

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
1月前
|
存储 人工智能 缓存
AI助理直击要害,从繁复中提炼精华——使用CDN加速访问OSS存储的图片
本案例介绍如何利用AI助理快速实现OSS存储的图片接入CDN,以加速图片访问。通过AI助理提炼关键操作步骤,避免在复杂文档中寻找解决方案。主要步骤包括开通CDN、添加加速域名、配置CNAME等。实测显示,接入CDN后图片加载时间显著缩短,验证了加速效果。此方法大幅提高了操作效率,降低了学习成本。
5442 16
|
1月前
|
存储 网络安全 对象存储
缺乏中间证书导致通过HTTPS协议访问OSS异常
【10月更文挑战第4天】缺乏中间证书导致通过HTTPS协议访问OSS异常
88 4
|
4月前
|
分布式计算 DataWorks 数据处理
MaxCompute操作报错合集之UDF访问OSS,配置白名单后出现报错,是什么原因
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
4月前
|
域名解析 Serverless API
函数计算产品使用问题之如何配置自定义域名访问OSS中的内容
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5月前
|
分布式计算 DataWorks MaxCompute
MaxCompute操作报错合集之在Spark访问OSS时出现证书错误的问题,该如何解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
5月前
|
存储 运维 Serverless
Serverless 应用引擎产品使用合集之如何访问相同地域的OSS
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
5月前
|
机器学习/深度学习 人工智能 分布式计算
人工智能平台PAI操作报错合集之在ODPS的xxx_dev项目空间调用easyrec训练,需要访问yyy项目空间的OSS,出现报错,是什么导致的
阿里云人工智能平台PAI (Platform for Artificial Intelligence) 是阿里云推出的一套全面、易用的机器学习和深度学习平台,旨在帮助企业、开发者和数据科学家快速构建、训练、部署和管理人工智能模型。在使用阿里云人工智能平台PAI进行操作时,可能会遇到各种类型的错误。以下列举了一些常见的报错情况及其可能的原因和解决方法。
|
API 对象存储 数据安全/隐私保护
|
4月前
|
机器学习/深度学习 人工智能 专有云
人工智能平台PAI使用问题之怎么将DLC的数据写入到另一个阿里云主账号的OSS中
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
21天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。

相关产品

  • 对象存储
  • 下一篇
    无影云桌面