临时授权访问

最近更新时间:2019-01-14 10:10:55

无论是主账号还是IAM子用户都是可以长期正常使用的,如果对应的AKSK发生泄露之后如果无法及时解除权限的话会很危险。

考虑到如下的案例:

客户开发的App会分发给终端用户,终端用户的数据需要直接上传到KS3,如果将主账号或者IAM子用户的AKSK嵌入到App都是非常危险的行为,那如何才能安全的授权给众多的App用户上传数据呢,以及如何保证多个用户之间存储的隔离。

类似这种需要临时访问的场景可以使用角色的临时身份来完成:在当前的主账号下创建一个角色,指定角色授信的主账户,并且给角色通过用户策略(user poicy)授权。然后在授信主账号下创建一个子用户,并授权给子用户角色(让这个子用户扮演这个角色),子用户就可以通过STS服务获取临时AKSK,去访问KS3了。 原理图如下:

7.png

具体的步骤如下:

创建角色

1,在控制台上操作请点击进入【身份与管理】->【角色管理】,进入角色管理界面。

2,点击“新建角色”按钮,选择授信云账号,可以选择当前的账号,也可以选择其它云账号。我们创建一个名为“app_role”的角色,并选择当前的账号为授信账号。

8.png

创建完毕后,进入角色页面,记录下角色app_role的KRN

12.png

3,创建完角色之后,角色是没有任何权限的,因此需要新建一个自定义的授权策略。授权策略如下:

{
    "Version": "2015-11-01",
    "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "ks3:PutObject",
            "ks3:GetObject",
            "ks3:ListBucket"
         ],
        "Resource":[
            "krn:ksc:ks3:::app_bucket",
            "krn:ksc:ks3:::app_bucket/*"
         ]
     }
   ]
}

如图所示: 9.png

这里表示的就是对app_bucket拥有写入文件、列出空间下文件、下载文件的权限。策略的名字定为app_policy。

4,建立完成之后即可在角色管理里面给app_role添加上app_policy的自定义策略。

10.png

子用户扮演角色

主账户是不能扮演角色的,需要受信主账户通过用户权限(user policy)把扮演角色的权限授权给IAM子用户。

1,我们进入【策略管理】页面,新建一个自定义的授权策略,选择“按策略生成器创建”:

11.png

2,服务选择“STS(临时身份验证)”,操作选择“AssumeRole”,点击“生成”,点击“确认”,进入编辑页面。

13.png

3,在编辑页面中的Resource填入app_role的KRN。

{
    "Version": "2015-11-01",
    "Statement": [
    {
    "Sid": "Stmt15253327178180",
    "Effect": "Allow",
    "Action": ["sts:AssumeRole"],
    "Resource": ["krn:ksc:iam::Account_ID:role/app_role"]
    }
    ]
}

策略名称记录为“assume_policy”。

4,进入【用户管理】页面,创建一个IAM子用户“app_user”,勾选“为该用户生成AccessK ey” 15.png

5,完成之后即可在用户管理里面给app_user添加上assume_policy的自定义策略。

16.png

使用STS授权访问

1,使用app_user的AKSK 去调用STS服务获取临时权限。详见文档获取角色的临时身份

http://sts.cn-beijing-6.api.ksyun.com/?Action=AssumeRole
&Version=2015-11-01
&RoleSessionName=Bob
&RoleKrn=krn:ksc:iam::Account_ID:role/app_role
&AUTHPARAMS

返回的内容如下:

<AssumeRoleResponse>
  <AssumeRoleResult>
      <Credentials>
        <SecretAccessKey>wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY</SecretAccessKey>
        <Expiration>2018-05-15T23:28:33.359Z</Expiration>
        <AccessKeyId>AKIAIOSFODNN7EXAMPLE</AccessKeyId>
      </Credentials>
      <AssumedRoleUser>
         <Krn>krn:ksc:iam::Account_ID:role/app_role</Krn>
         <AssumedRoleId>ARO123EXAMPLE123:Bob</AssumedRoleId>
      </AssumedRoleUser>
   </AssumeRoleResult>
   <ResponseMetadata>
     <RequestId>c6104cbe-af31-11e0-8154-cbc7ccf896c7</RequestId>
   </ResponseMetadata>
</AssumeRoleResponse>

2,从返回的XML结果中找到临时权限:AccessKeyId和SecretAccessKey,然后通过KS3 APIKS3 SDK去访问相应的资源。

金山云,开启您的云计算之旅

注册有礼