OSS之访问控制

1. OSS之AccessKey

OSS提供了对象存储服务,在访问OSS资源时,根据访问者的信息可分为匿名访问和带签名访问。 在OSS中签名涉及的AccessKey主要有三种:

  • 阿里云账号AccessKey:云账号AccessKey对拥有的资源有完全的权限,每个阿里云账号能够同时拥有不超过5个active或者inactive的AK对(AccessKeyId和AccessKeySecret);
  • RAM子账号AccessKey:RAM (Resource Access Management) 是阿里云提供的资源访问控制服务;RAM账号AK指的是通过RAM被授权的AK,这组AK只能按照RAM定义的规则去访问Bucket里的资源;通过RAM,您可以集中管理您的用户(比如员工、系统或应用程序),以及控制用户可以访问您名下哪些资源的权限;
  • STS账号AccessKey:STS(Security Token Service)是阿里云提供的临时访问凭证服务,STS账号AK指的是通过STS颁发的AK;

相应有三种验签方式:AK验证/RAM验证/STS验证;

2. OSS之权限控制

OSS提供了多种形式的权限控制:Bucket级别权限/Object级别权限/账号级别权限(RAM)/临时账号权限(STS),具体如下:

  • Bucket级别权限:三种访问权限:public-read-write/public-read/private
    这里写图片描述

  • Object级别权限:四种访问权限:private/public-read/public-read-write/default,具体如下:
    这里写图片描述

  • 账号级别权限(RAM):阿里云账号通过RAM创建自己AccessKey的子用户时,可通过Policy的配置方式指定授权内容,Policy具体见下节;

  • 临时账号权限(STS):通过阿里云STS (Security Token Service) 服务为阿里云账号(或RAM用户)提供的短期访问权限,通过STS生成的凭证包括安全令牌(SecurityToken)、临时访问密钥(AccessKeyId, AccessKeySecret),可通过Policy的配置方式指定授权内容,Policy具体见下节;

3. OSS之Policy

{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "oss:GetBucketAcl",
                "oss:ListObjects"
            ],
            "Resource": [
                "acs:oss:*:1775305056529849:mybucket"
            ],
            "Effect": "Allow",
            "Condition": {
                "StringEquals": {
                    "acs:UserAgent": "java-sdk",
                    "oss:Prefix": "foo"
                },
                "IpAddress": {
                    "acs:SourceIp": "192.168.0.1"
                }
            }
        },
        {
            "Action": [
                "oss:PutObject",
                "oss:GetObject",
                "oss:DeleteObject"
            ],
            "Resource": [
                "acs:oss:*:1775305056529849:mybucket/file*"
            ],
            "Effect": "Allow",
            "Condition": {
                "IpAddress": {
                    "acs:SourceIp": "192.168.0.1"
                }
            }
        }
    ]
}

这是一个授权的Policy,用户用这样的一个Policy通过RAM或STS服务向其他用户授权。Policy当中有一个Statement(一条Policy当中可以有多条Statement)。Statement里面规定了相应的Action、Resource、Effect和Condition。

这条Policy把用户自己名下的mybucket和mybucket/file*这些资源授权给相应的用户,并且支持GetBucketAcl、GetBucket、PutObject、GetObject和DeleteObject这几种操作。Condition中的条件表示UserAgent为“java-sdk”,源ip为“192.168.0.1”的时候鉴权才能通过,被授权的用户才能访问相关的资源。Prefix这个Condtion是在GetBucket(ListObjects)的时候起作用的,关于这个字段的解释详见OSS的API文档。

具体项含义请转官网:访问控制

4. OSS之访问实例

  • 使用AppServer来做数据中转和数据隔离:
    这里写图片描述
    如上图所示,只有AppServer能访问云服务,ClientApp的每次读写数据都需要通过AppServer,AppServer来保证不同用户数据的隔离访问,对于该种使用方式,使用阿里云账号或者RAM账号提供的密钥来进行签名验证访问;避免出现安全问题,通常不使用阿里云账号;

  • 使用STS让用户直接访问OSS:
    这里写图片描述

    1. App用户登录。App用户和云账号无关,它是App的终端用户,AppServer支持App用户登录。对于每个有效的App用户来说,需要AppServer能定义出每个App用户的最小访问权限;
    2. AppServer请求STS服务获取一个安全令牌(SecurityToken)。在调用STS之前,AppServer需要确定App用户的最小访问权限(用Policy语法描述)以及授权的过期时间。然后通过扮演角色(AssumeRole)来获取一个代表角色身份的安全令牌,角色管理与使用相关内容请参考RAM用户指南中的角色管理;
    3. STS返回给AppServer一个有效的访问凭证,包括一个安全令牌;(SecurityToken)、临时访问密钥(AccessKeyId, AccessKeySecret)以及过期时间;
    4. AppServer将访问凭证返回给ClientApp。ClientApp可以缓存这个凭证。当凭证失效时,ClientApp需要向AppServer申请新的有效访问凭证。比如,访问凭证有效期为1小时,那么ClientApp可以每30分钟向AppServer请求更新访问凭证;
    5. ClientApp使用本地缓存的访问凭证去请求Aliyun Service API。云服务会感知STS访问凭证,并会依赖STS服务来验证访问凭证,正确响应用户请求;

5. 参考

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值