00003 - Aliyun - RAM & STS

Title: Aliyun - RAM & STS
Date: 2020-04-01 00:00
Category: Article
Tags: aliyun, java, RAM, STS
Slug: 00003
Authors: Chris
Summary: 使用阿里云的OSS的时候,在APP端需要使用STS的结构,这里记录一下。

RAM 创建用户

  1. 登录https://ram.console.aliyun.com/
  2. 用户管理 功能中,新建一个 duchaoqun 用户,记录 AccessKeyIDAccessKeySecret
  3. 点击用户进入 用户授权策略 添加一个权限 AliyunSTSAssumeRoleAccess
  4. 角色管理 里面,再创建一个 duchaoqun 的角色,记录 Arn 字符串,最后给这个角色授权 AliyunOSSFullAccess

App-Token-Server

说明:在 app-token-server 上配置用户和角色的信息,然后APP再发起请求的时候,返回临时的权限。

{
  "AccessKeyID": "",
  "AccessKeySecret": "",
  "RoleArn": "acs:ram::",
  "TokenExpireTime": "3600",
  "PolicyFile": "policy/bucket_write_policy.txt"
}
  • AccessKeyID:填写用户的AccessKeyID。
  • AccessKeySecret:填写用户的AccessKeySecret。
  • RoleArn:填写角色的RoleArn。
  • TokenExpireTime:指Android/iOS应用取到这个Token的失效时间,注意,最少是900s,默认值可以不修改。
  • PolicyFile:填写的是该Token所要拥有的权限列表的文件,默认值可以不修改。

三种最常用token权限文件,放于policy目录下面。分别是:

  • all_policy.txt:指定了该token拥有对该账号下创建Bucket、删除Bucket、上传文件、下载文件、删除文件的权限 。
  • bucket_read_policy.txt:指定了该token拥有该账号下对指定Bucket的读权限。
  • bucket_read_write_policy.txt:指定了该token拥有该账号下对指定Bucket的读写权限。
  • 如果您想要指定这个Token只能对指定的bucket有读写权限, 请把(bucket_read_policy.txt、 bucket_read_write_policy.txt)这些文件里面$BUCKET_NAME直接替换成指定的bucket名字。

在我们指定的服务器上启动服务:java -jar oss-token-server.jar [port]

返回的数据内容:

{
  "status":"200",
  "AccessKeyId":"",
  "AccessKeySecret":"",
  "Expiration":"2020-04-01T03:42:11Z"
}

Server 相应问题

  1. ErrorCode: NoPermission ErrorMessage: Roles may not be assumed by root accounts.
    使用主用户的密钥调用AssumeRole,请使用子用户的密钥。
  2. ErrorCode: MissingSecurityToken ErrorMessage: SecurityToken is mandatory for this action.
    使用临时用户的密钥调用AssumeRole,请使用子用户的密钥。
  3. Error code: InvalidAccessKeyId.NotFound Error message: Specified access key is not found.
    AccessKeyId无效,请检查是否写错,特别是前后不能后空格。
  4. Error code: InvalidAccessKeyId.Inactive Error message: Specified access key is disabled.
    使用的子用户的密钥,已经被禁止,请启用密钥或更换密钥。 密钥是否被禁止,请控制台的“访问控制->用户管理->管理->用户详情->用户AccessKey”确认,并开启。
  5. ErrorCode: InvalidParameter.PolicyGrammar ErrorMessage: The parameter Policy has not passed grammar check.
    角色扮演时指定的授权策略无效。AssumeRole时可以指定授权(Policy),也可以不指定。如果指定授权策略,则临时用户的权限是指定的授权策略和角色权限的交集;如果不指定授权策略,临时用户的权限是角色的权限。报该错误时,请检查指定的授权策略Policy。不推荐临时用户扮演角色时指定授权策略。如果的确需要使用授权策略,强烈建使用 RAM Policy Editor 生成授权策略。
  6. ErrorCode: InvalidParameter.RoleSessionName ErrorMessage: The parameter RoleSessionName is wrongly formed.
    角色扮演时指定RoleSessionName无效。此参数用来区分不同的Token,以标明谁在使用此Token,便于审计; 格式:^[a-zA-Z0-9.@-_]+$,2-32个字符,了解更多请参看 扮演角色操作接口。如命名a,1,abc*abc,忍者神龟等都是非法的
  7. ErrorCode: InvalidParameter.DurationSeconds Error message: The Min/Max value of DurationSeconds is 15min/1hr.
    角色扮演时指定的过期时间无效,即AssumeRoleRequest.setDurationSeconds参数无效。角色扮演时可以指定过期时间,单位为秒,有效时间是900 ~ 3600,如assumeRoleRequest.setDurationSeconds(60L * 20); 20分钟内有效。
  8. ErrorCode: 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扮演临时用户。

参考文档

https://help.aliyun.com/document_detail/100624.html?spm=a2c4g.11186623.2.10.7fc6418bKdfMR6#concept-xzh-nzk-2gb
https://help.aliyun.com/document_detail/32093.html?spm=a2c4g.11186623.6.1181.16d52d71KXDHZE
https://www.lastupdate.net/4681.html

About

  • 企鹅号码:848408012
  • 企鹅群号:465073050
  • 私人邮箱:[email protected]
  • 备注说明:欢迎联系交流,共同学习进步,转载请注明出处,谢谢。

猜你喜欢

转载自www.cnblogs.com/duchaoqun/p/12611408.html
sts
RAM