子账户及STS临时账户调用OSS的常见问题及排查

编程入门 行业动态 更新时间:2024-10-26 06:30:00

子<a href=https://www.elefans.com/category/jswz/34/1769251.html style=账户及STS临时账户调用OSS的常见问题及排查"/>

子账户及STS临时账户调用OSS的常见问题及排查

STS临时账户调用常见的错误码及原因参考:STS常见问题及排查

1)子账户要如何授权只读bucket的权限

为此子用户附加系统授权策略”AliyunOSSReadOnlyAccess”,该权限拥有全部bucket的只读权限;

2)子账户只读单个bucket的policy如何编写

如果您需要授权一个子用户(例如,代表您的某个应用程序)通过 OSS SDK 或 OSS CMD 列出并读取一个 Bucket 中的资源,那么您需要创建一条自定义授权策略来完成。

  假设您的 Bucket 名称为 “myphotos”,那么创建的授权策略样例如下:

{"Version": "1","Statement": [{"Effect": "Allow","Action": "oss:ListObjects","Resource": "acs:oss:*:*:myphotos"},{"Effect": "Allow","Action": "oss:Get*","Resource": ["acs:oss:*:*:myphotos","acs:oss:*:*:myphotos/*"]}]
}

  如果您希望被授权的子用户能够通过 OSS 控制台/客户端进行操作,那么授权策略中还需要添加 GetBucketAcl 以及 GetObjectAcl 权限(控制台为了操作体验的优化需要额外调用 OSS 的部分 API)。目前控制台的policy定义只能实现能看到所有的bucket但是只对授权的bucket有权限,允许子用户通过 OSS 控制台操作的授权策略样例如下:

{"Version": "1","Statement": [{"Effect": "Allow","Action": "oss:ListBuckets","Resource": "acs:oss:*:*:*"},{"Effect": "Allow","Action": ["oss:ListObjects","oss:GetBucketAcl"],"Resource": "acs:oss:*:*:myphotos"},{"Effect": "Allow","Action": ["oss:Get*"],"Resource": ["acs:oss:*:*:myphotos","acs:oss:*:*:myphotos/*"]}]
}

3)子账户拥有单个bucket的全部权限,policy如何编写

如果您需要授权一个子用户(例如,代表您的某个应用程序)通过 OSS SDK 或 OSS CMD 管理Bucket 中的资源,那么您需要创建一条自定义授权策略来完成。

{"Version": "1","Statement": [{"Effect": "Allow","Action": "oss:*","Resource": ["acs:oss:*:*:myphotos","acs:oss:*:*:myphotos/*"]}]
}

如果您希望被授权的子用户能够通过 OSS 控制台/客户端进行操作,那么得为policy授权listbucket权限;策略如下

{"Version": "1",
"Statement": [{"Effect": "Allow","Action": "oss:ListBuckets","Resource": "acs:oss:*:*:*"},{"Effect": "Allow","Action": "oss:*","Resource": ["acs:oss:*:*:myphotos","acs:oss:*:*:myphotos/*"]}]
}

4)子账户拥有单个bucket下某个目录的权限,策略如何编写

如果是sdk /API 调用,那么授权如下:

{"Version": "1","Statement": [{"Effect": "Allow","Action": ["oss:*"],"Resource": ["acs:oss:*:*:gsdata-img1/gsdata/*"]},{"Effect": "Allow","Action": ["oss:ListObjects"],"Resource": ["acs:oss:*:*:gsdata-img1"],"Condition": {"StringLike": {"oss:Prefix": ["gsdata/*"]}}}]
}

如果想实现控制台/客户端工具调用,只能看到bucket某个目录下的资源,并且只有对应目录的权限,其他目录没权限,也不能看到其他目录,目前实现不了,只能实现能看到其父目录下的所有资源及目录,但其他没权限的目录不能进入,资源也不能获取,策略如下:

{"Version": "1","Statement": [{"Effect": "Allow","Action": ["oss:ListBuckets","oss:GetBucketAcl"],"Resource": ["acs:oss:*:*:*"]},{"Effect": "Allow","Action": ["oss:*"],"Resource": ["acs:oss:*:*:gsdata-img1/gsdata/*"]},{"Effect": "Allow","Action": ["oss:ListObjects"],"Resource": ["acs:oss:*:*:gsdata-img1"],"Condition": {"StringLike": {"oss:Delimiter": "/","oss:Prefix": ["",“gsdata/*”]}}},{"Effect": "Allow","Action": ["oss:ListObjects"],"Resource": ["acs:oss:*:*:gsdata-img1"],"Condition": {"StringLike": {"oss:Prefix": ["gsdata/*"]}}}]
}

5)子账户及STS账户的业务场景是什么

看1.子账户及STS临时账户的业务场景 的介绍

6)STS临时账户生成后,如何调用操作OSS的资源

通过SDK传入STS临时账户的ak,sk,token 来进行初始化client,进行相关接口的调用
JAVA sdk 初始化:授权访问
PYTHON SDK初始化:授权访问
Android SDK初始化:初始化
IOS SDK初始化:初始化
.NET SDK初始化:授权访问
PHP SDK初始化:授权访问
JS WEB SDK初始化:使用STS
C SDK初始化:授权访问

7)STS请求获取报错NoPermission

I) 就报错而言是没权限
II)为子账户授权AliyunSTSAssumeRoleAccess 权限

为角色授权oss的全部权限,再生成临时账户看看是否正常
III)还是异常,工单反馈下子账户的accesskeyid 及对应的报错信息,密码不用反馈

8)STS调用OSS报错InvalidAccessKeyId

STS调用报错如下:

<Error>
<Code>InvalidAccessKeyId</Code>                                                                    <Message>The OSS Access Key Id you provided does not exist in our records.</Message>                                                                   <RequestId>5A2F6CE3295E55B2D7360E0F</RequestId>                                                                   <HostId>*******.oss-cn-beijing.aliyuncs</HostId>                                                                     <OSSAccessKeyId>STS.lTAI53kJu28QUJJt</OSSAccessKeyId>
</Error>

I ) 排查初始化client是否有传入STS的accesskey ID 密码及token,参考《6)STS临时账户生成后,如何调用操作OSS的资源》进行初始化client
II ) 排查STS临时账户是否过期,STS临时账户存在过期时间,最长3600秒过期,尝试重新生成STS临时账户进行操作object看看是否正常

9)STS临时账户调用报错AccessDenied

报错信息如下:

<Error>                                                                    <Code>AccessDenied</Code>                                                                   <Message>You have no right to access this object because of bucket acl.</Message>                                                                  <RequestId>5A2F894D99C1BD4157DB52E1</RequestId>                                                                  <HostId>record-image-server.oss-cn-beijing.aliyuncs</HostId>
</Error>

I) 该报错为临时账户没有对应操作的权限
II) 排查创建STS临时账户的子账户是否有授权AliyunSTSAssumeRoleAccess 权限或者扮演对应角色的权限,为子账户授权AliyunSTSAssumeRoleAccess 权限测试
III) 排查创建STS临时账户的角色,是否有授权对应bucket对应接口的权限,为角色授权AliyunOSSFullAccess权限测试
IV 排查创建STS临时账户时传入的policy是否有对应bucket对应接口的权限,设置policy为OSSFULL权限看看是否正常;

{"Statement": [{"Action": "oss:*","Effect": "Allow","Resource": "*"}],"Version": "1"
}

10)STS临时账户调用OSS报错Access denied by authorizer's policy

I):AssumeRole的子用户没有权限,请给子用户授予AliyunSTSAssumeRoleAccess系统授权策略。请在 访问控制 > 用户管理 > 授权 > 可选授权策略名称 中给子用户授权 AliyunSTSAssumeRoleAccess。
II):申请角色扮演的子用户的云账号ID与角色的“受信云账号ID”不符,请角色创建者确认并修改。子用户的云账号ID,即创建子用户的主用户的ID;角色的云账号ID,即创建角色的主用户的云账号ID。请在如下位置确认修改: 访问控制 > 角色管理 > 管理 > 角色详细 > 编辑基本信息 中确认修改。
III):角色的类型错误,如果角色的类型分为“用户角色”和“服务角色”,服务角色不能使用AssumeRole扮演临时用户。

更多推荐

子账户及STS临时账户调用OSS的常见问题及排查

本文发布于:2024-02-27 02:02:49,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1704789.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:账户   常见问题   STS   OSS

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!