子账户及STS临时账户调用OSS的常见问题及排查-阿里云开发者社区

开发者社区> 何昔> 正文

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

简介: 账户分为主账户、子账户及STS临时账户,其中主账户有OSS的全部权限,子账户及STS临时账户可以进行细粒度的权限划分控制,授权OSS的部分权限;本文将介绍STS及子账户调用过程中的常见问题及排查;
+关注继续查看

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

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

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

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 权限
4

为角色授权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.com</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.com</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扮演临时用户。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【OSS 排查方案-7】ossimport 大数据量迁移方案总结
背景: 面临客户不断的将友商的存储数量迁移到阿里云上。ossimport 工具越来越多的暴露在用户端,但是合理的利用 ossimport 工具以及良好的迁移架构数据能否帮助用户高效的快速迁移。但是如果对 ossimport 不熟知,而且迁移架构没有经过测试,反而会降低我们的迁移效率,影响客户的全面战略上云计划安排。
13333 0
OSS异常流量排查及防护
OSS适用于存储各类型的静态资源,较多的用户将静态资源存储在OSS上。当OSS产生大流量的异常流量要如何进行定位分析,OSS恶意访问可能是恶意referer盗链使用或者恶意IP恶意请求访问OSS资源导致的,本文对上述内容进行了介绍;
5448 0
ubuntu 无法使用 SSH root 账户远程访问
SSH服务器,可以通过SSH协议来访问远程服务器,代替telnet和ftp。但是ubuntu默认是不启用root用户也不允许root远程登录的,这应该是出于安全考虑。 解决方案一: 使用其它用户登录 解决方案
862 0
MySQL|主从延迟问题排查(一)
大查询长时间执行无法释放DML读锁,后续同步主库的DDL操作获取DML写锁资源被阻塞等待,导致后续同步主库的操作堆积,主从延迟增长严重。从同步延迟的监控来看,延迟从17:11开始,17:51:59进行kill大查询操作,直到17:53建议业务方将大查询kill掉后才结束。
1559 0
Data Lake Analytics助力加和科技广告智能业务 - 性能提升4倍+,临时业务需求承接率提升200%+
阿里云Data Lake Analytics助力加和科技广告智能业务 - 性能提升4倍+,临时业务需求承接率提升200%+
2227 0
成本下降60%!DLA发布优化,大幅降低OSS调用成本
很多用户使用DLA对存储在OSS上的数据的进行分析。并且,由于OSS极低的存储成本,也有很多用户也会选择通过SLS日志投递、DLA一键建仓等功能把其他数据源的数据转储到OSS进行分析。然而,由于OSS按照调用次数收费,在分析OSS数据时,因OSS接口调用而产生的成本往往会成为成本中较为显著的一个部分。
1019 0
大量使用临时表带来的问题,替代方案,以及如何擦屁股
以前有使用Greenplum的朋友遇到元表膨胀的问题,总结了原因写了一篇文章如下。建议先阅读这篇文档,再阅读本文,里面有些原理我在本文就不讲了。http://blog.163.com/digoal@126/blog/static/1638770402014616113353555 近日,又有使用P
5678 0
+关注
何昔
对OSS、CDN、MTS音视频等有一定认知
15
文章
0
问答
来源圈子
更多
作为全球云计算的领先者,阿里云为全球230万企业提供着云计算服务,服务范围覆盖200多个国家和地区。我们致力于为企业、政府等组织机构提供安全可靠的云计算服务,给用户带来极速愉悦的服务体验。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载