阿里云
1024开发者盛宴之Java专家问答专场
发表主题 回复主题
  • 14843阅读
  • 18回复

[产品讨论]阿里云RAM产品实在是太烂,根本就不知道该如何用

级别: 小白
发帖
11
云币
14
写了那么多,看了好多天,实在看不懂到底在讲些什么,根本就没讲到重点,demo代码也写得太烂: q%3<Juq~$  
&K%aw  
5fjd{Y[k  
关于RAM的STS,代码不断变化,版本号同样是2015-04-01的调用代码,结果aliyun-java-sdk-sts-2.1.0和aliyun-java-sdk-sts-2.1.6的代码根本就没有任何联系,下载下来的PDF说明也是一样。 z5cYyx r>  
t=wXTK5"  
6 DF  
以下是aliyun_java_sdk_sts_20150825的demo代码,一点说明都没有,这就是demo?使劲地去翻看你们的文档,一直就找不到roleSessionName到底是什么鬼,可能实在是在下太过蠢笨了吧,这么高深的代码一点都看不懂。另外,一篇求助文章,发表了好几天了,结果回复一直为0(除了我己)!收费倒是收的很勤,看来大概是店大要欺客了吧~ mO rWJ~=  
mX# "+X|  
import com.aliyuncs.DefaultAcsClient; t1]6(@mj5  
import com.aliyuncs.exceptions.ClientException; 7ET jn)%bs  
import com.aliyuncs.http.MethodType; F3E[wdT  
import com.aliyuncs.http.ProtocolType; m)>&ZIXa  
import com.aliyuncs.profile.DefaultProfile; _2Py\+$  
import com.aliyuncs.profile.IClientProfile;  !rL<5L  
import com.aliyuncs.sts.model.v20150401.AssumeRoleRequest; iw]k5<qKj  
import com.aliyuncs.sts.model.v20150401.AssumeRoleResponse; }6m?d!m  
-AD2I {C  
F4I6P  
public class StsServiceSample { =]>%t]  
  public static final String REGION_CN_HANGZHOU = "cn-hangzhou"; loOOmHhJ&  
  public static final String STS_API_VERSION = "2015-04-01"; laREjN/\`  
  public static final String STS_VERSION = "1"; Pe^ !$  
4jwu'7 Q  
P~7.sM  
  static AssumeRoleResponse assumeRole(String accessKeyId, String accessKeySecret, yyl#{Nl@t  
                                       String roleArn, String roleSessionName, String policy, ProtocolType protocolType) throws ClientException { a+z2Zd!u\x  
    try { {[OwMk  
      IClientProfile profile = DefaultProfile.getProfile(REGION_CN_HANGZHOU, accessKeyId, accessKeySecret); f05d ;  
      DefaultAcsClient client = new DefaultAcsClient(profile); !c(QSf502  
e- 6w8*!i  
7Ua7A  
      final AssumeRoleRequest request = new AssumeRoleRequest(); )C]x?R([m  
      request.setVersion(STS_API_VERSION); H#(<-)j0_  
      request.setMethod(MethodType.POST); 2W$lQ;iO  
      request.setProtocol(protocolType); 2<W&\D o@  
R,0Oq5  
KFhG(   
      request.setRoleArn(roleArn); V'wi^gq  
      request.setRoleSessionName(roleSessionName); 9C}qVoNu  
      request.setPolicy(policy); v<h;Di@  
;bjnL>eW  
Ol+Kp!ocY  
      final AssumeRoleResponse response = client.getAcsResponse(request); ;iX<`re~  
(F5ttQPh  
zJl_ t0  
      return response; %J P!{mqj  
    } catch (ClientException e) { @EZ>f5IO+  
      throw e; zG% |0  
    } :t$A8+A+0  
  } WmVVR>0V|  
  public static void main(String[] args) { 3 N%{B  
    String accessKeyId = "o************F"; U":"geU  
    String accessKeySecret = "y*******************U"; 8&(-8  
    String roleArn = "acs:ram::145883****900618:role/ossadminrole"; O% $O(l  
    String roleSessionName = "alice"; Jt=>-Spj  
    String policy = "{\n" + 19I:%$U3  
            "    \"Version\": \"1\", \n" + i^g~~h F  
            "    \"Statement\": [\n" + UKs$W`  
            "        {\n" + [thboP.?  
            "            \"Action\": [\n" + [m#NfA:h,  
            "                \"oss:GetBucket\", \n" + Z3;=w%W  
            "                \"oss:GetObject\" \n" + " i`8l.Lc  
            "            ], \n" + rO^xz7K^  
            "            \"Resource\": [\n" + {nRUH*(d9  
            "                \"acs:oss:*:177530****529849:mybucket\", \n" + *zQOJsg"e  
            "                \"acs:oss:*:177530****529849:mybucket/*\" \n" + <Cq"| A  
            "            ], \n" + 0xP:9rm  
            "            \"Effect\": \"Allow\"\n" + pGkef0p@  
            "        }\n" + a<p %hY3  
            "    ]\n" + yQ-hnlzn~  
            "}"; (j N]OE^  
    ProtocolType protocolType = ProtocolType.HTTPS; 7^wE$7hS  
2oB?Dn  
1v]t!}W:6  
    try { uBRw>"c_*8  
      final AssumeRoleResponse response = assumeRole(accessKeyId, accessKeySecret, U.Hdbmix  
              roleArn, roleSessionName, policy, protocolType); .0 X$rX=  
`.8-cz  
b%<jUY  
      System.out.println("Expiration: " + response.getCredentials().getExpiration()); FV8\ +ep  
      System.out.println("Access Key Id: " + response.getCredentials().getAccessKeyId()); nKu(XgFv  
      System.out.println("Access Key Secret: " + response.getCredentials().getAccessKeySecret()); G5u meqYC  
      System.out.println("Security Token: " + response.getCredentials().getSecurityToken()); D pNX66O  
    } catch (ClientException e) { E{oB2;P  
      System.out.println("Failed to get a federation token."); o16~l]Z|f  
      System.out.println("Error code: " + e.getErrCode()); %*p^$5L<  
      System.out.println("Error message: " + e.getErrMsg()); jrcc  
    } @Yarz1  
ZIy(<0  
3Tw%W0q  
  } 'A1E^rl]=  
} Gl"wEL*  
Ej5^Y ?-6  
级别: 小白
发帖
11
云币
14
只看该作者 沙发  发表于: 2015-08-27
Re阿里云RAM产品实在是太烂,根本就不知道该如何用
之所以会关注RAM这个产品,是因为公司这边需要使用OSS,而我作为一个悲观主义,我非常反对app client直接上传文件到OSS,因为这样的架构会导致阿里云密钥的泄露从而导致一系列和阿里云产品相关的安全问题,这是不容出现的。但坚持者认为如果通过app server上传的话,对系统性能影响太大。 P 4H*jy@?  
后来查了半天的资料,发现OSS提供了STS的解决方案,即app client可以通过app server到STS上注册一个有一定时间限制的临时用户进行文件上传,这在一定程度上可以解决安全问题,又能将上传压力从app server转移到oss上,从目前来看你是一个相对完美的解决方案。 hsz$S:am  
于是,我就开始在阿里云上找相关的文档和示例,结果找了半天,点开所有的和STS相关的链接全部为404。然后又找到了RAM,似乎发现了一些曙光,于是就有这个帖子的出现。 k|fh\F+$  
> `0| X  
另外,再吐槽下阿里云的技术客服,我跟他咨询了相关的问题,结果他就给我回了个看起来似乎写得很完整的RAM文档(然并卵),可是我很想对他说,亲,你给我的这个地址,我早就找到了,只是因为实在看不懂,才打电话咨询~
级别: 新人
发帖
2
云币
2
只看该作者 板凳  发表于: 2015-08-28
Re阿里云RAM产品实在是太烂,根本就不知道该如何用
ram关于Role(角色)的使用有手册: 7(KVA1P66  
“docs.aliyun.com/#/pub/ram/ram-user-guide/role&user-role” )rv<"  
I`EgR?5 `  
`<d{(9:+  
sts代码中使用的接口可以参考API手册: pJ]i)$M  
“docs.aliyun.com/#/pub/ram/sts-api-reference/actions&assume_role” 1fb!sbGD.k  
FcZ)_m6m  
X.!|#FWb+  
我们产品原型的代码都用上了,希望能帮上你的忙。。 )F4P-u  
XRR`GBI  
8p~G)J3U  
另外, 阿云的产品手册变化快, 我么每次都是看网页, pdf 过期太快了。 qW:\6aEG  
FBJ Lkg0  
级别: 小白
发帖
11
云币
14
只看该作者 地板  发表于: 2015-08-28
回2楼助云科技的帖子
另外,能否提供RAM使用的Java签名算法,我发现我用Java代码生成的签名数据和你们的不一致,如果没有相关代码,就会一直卡在这块,没法往下开发。
级别: 小白
发帖
11
云币
14
只看该作者 4楼 发表于: 2015-08-28
Re阿里云RAM产品实在是太烂,根本就不知道该如何用
而且,你不觉得文档的描述也太过简单了么?我们客户不是你们的开发人员,没有上下文是没办法理解文档的意思的。比方说:docs.aliyun.com/#/pub/ram/sts-api-reference/actions&assume_role 这页里面的RoleSessionName这个参数的说明,指定临时身份的会话名称,我就想问,这个参数到底是什么作用,是客户端自己生成的还是在RAM上定义好的,为什么是必填,这些都不说清楚,怎么用?
级别: 小白
发帖
11
云币
14
只看该作者 5楼 发表于: 2015-08-28
Re阿里云RAM产品实在是太烂,根本就不知道该如何用
我只能说这些文档给我的感觉是:开发基本靠猜~
级别: 新人
发帖
2
云币
3
只看该作者 6楼 发表于: 2015-09-05
Re阿里云RAM产品实在是太烂,根本就不知道该如何用
同意, 开发基本靠猜! 各个链接, 解释混乱!
级别: 禁止发言
发帖
0
云币
-2
只看该作者 7楼 发表于: 2015-09-06
用户被禁言,该主题自动屏蔽!
级别: 小白
发帖
17
云币
14
只看该作者 8楼 发表于: 2015-09-17
Re阿里云RAM产品实在是太烂,根本就不知道该如何用
我也是没怎么搞懂,看了两天没搞出来,希望能有个详尽的文档!楼主StsServiceSample例子目前有没有跑通?还有一点我弄不明白的是,既然在 RAM 控制台可以指定用户或角色的授权,为什么这个例子里还要写 policy 这个属性? ! S$oaCxM  
---------------------------------------------------------------------------- P"[l86:  
我的问题解决了,使用 STS 的 sdk 需要对对应RAM用户加AliyunSTSAssumeRoleAccess策略。貌似没什么地方提过,要靠自己观察...
[ 此帖被jason.sun在2015-09-17 15:35重新编辑 ]
发帖
105
云币
263
只看该作者 9楼 发表于: 2015-09-19
推荐看看关于STS使用场景的技术文章:STS使用场景(1) —— 授权您的客户端直接访问云存储 <t|9`l_XW  
http://bbs.aliyun.com/read/258090.html Iy 8E$B;  
文章面向小白用户,教你一步一步如何使用STS 0 Vgn N  
+cOI`4`$  
[ 此帖被pittman在2015-09-19 16:59重新编辑 ]
级别: 新人
发帖
7
云币
10
只看该作者 10楼 发表于: 2015-11-10
Re阿里云RAM产品实在是太烂,根本就不知道该如何用
我也来了   我真的是靠猜  每个数据都不知道怎么填写  文档描述不全面  
本帖最近评分记录: 1 条评分 云币 +1
wzs2012 云币 +1 - 03-14
级别: 新人
发帖
6
云币
7
只看该作者 11楼 发表于: 2015-11-17
回 楼主扛着单车的帖子
这个产品确实专业性太强,一般用户再最开始难易上手,需要先了解一些信息安全的相关背景。 Y }d>%i+  
bu5)~|?{t  
我以前刚好看过一本书《Federated Identity Primer》, 这本书中阐述了“联邦用户”的概念以及最佳实践,各位如果有兴趣可以私信我,我把这本书分享给大家。 6FFv+{ 2^@  
X0=- {<W  
首先我们要区分开“可信设备”和“不可信设备”,秘钥坚决不能放在不可信设备上。用户的手机,用户的浏览器都是不可信设备,因为黑客或者用户自己可以很容易的把秘钥偷走。但是当我们希望不可信设备要访问云资源的时候,就需要给不可信设备授权,将不可信设备的权限关在笼子里,以此避免秘钥泄漏后带来的风险。 2`eu3vA  
!_#js  
这个时候可以通过有效期很短的Token来解决这个问题。 dju{&wo~4  
假如我们有两个用户,分别是张三, 李四,当张三需要访问oss时,我们可以这样签发token: 5X-{|r3q  
<7Lz<{jaJ  
aliyuncli sts AssumeRole --RoleArn acs:ram::1440818810960859:role/ossrole  --RoleSessionName ZhangSan --DurationSeconds 900 --Policy '{"Version":"1","Statement":[{"Effect":"Allow","Action":"oss:GetObject","Resource":"acs:oss:*:*:mybucket/userdata/zhangsan/*"}]}' R:<AR.)K  
NFPkK?+  
角色本身以一类权限的集合,假设我们这里的这个角色拥有mybucket/userdata/下的所有权限,注意这个Policy参数,这个参数限定了当前的Token都有那些权限。  \hc9Rk  
emO!6]0gJ  
这时,我们可以取得一个临时AccessKey 和临时Token,把这个信息告诉张三,就算张三泄密,受到影响的也只是张三本人,因为这个token中限定了他只能访问自己的数据目录。这时我们就看到SessionName是做什么的了。为每个用户使用单独的SessionName,以此可以区别出当前使用Token的人是谁。估计阿里云应该以后会有审计产品,到时我们就可以看到这些不同的用户都干了什么。 3=I Q  
*~X\c Z  
KJSy7F  
为什么需要使用子用户来调用AssumeRole接口呢? k/Q]K e  
在一般的架构设计中,登录服务器和资源服务器是分开的,当张三登录时,去STS获取Token返回给张三,而登录服务器不需要访问其他的OSS资源,所以我们需要创建一个子用户为登录服务器使用,给这个子用户限定只能使用sts:AssumeRole接口就好。接着为这个子用户创建一个AccessKey,把这个AccessKey配置到我们的登录服务器,让登录服务器专门负责Token的申请。就算有一天我们的登录服务器被黑客攻破了,黑客拿到这个子用户的AccessKey也没什么卵用,因为我们遵循了最小权限的原则,黑客不知道RoleArn什么都干不了。 更进一步,我们可以让限定这个子用户使用sts:AssumeRole时从固定的IP段发请求,那么黑客就成废柴了,因为这个AccessKey只有在你的服务器上才能正常工作。 % m$Mn x  
^jA^~h3(W  
[%q":Ig  
我是AWS的资深用户,对AWS的安全体系有一些了解,相比阿里云,这些安全体系和AWS差不多,所以我理解起来不是那么费劲 }]@ "t)"  
uBJF}"4ej  
D=]P9XDvb.  
7.-|3Wcg  
[ 此帖被今天联不爽在2015-11-17 22:04重新编辑 ]
级别: 新人
发帖
6
云币
7
只看该作者 12楼 发表于: 2015-11-17
回 8楼jason.sun的帖子
子用户在被创建后没有任何的权限,他的权限都是他爹赋予的,所谓爹赋ren quan。。。。
级别: 程序猿
发帖
302
云币
359
只看该作者 13楼 发表于: 2015-11-17
回 12楼(今天联不爽) 的帖子
  
级别: 新人
发帖
1
云币
1
只看该作者 14楼 发表于: 2016-01-27
Re阿里云RAM产品实在是太烂,根本就不知道该如何用
研究了两天,不得不去看java的sdk源码研究……文档简陋到家了,version感觉是个废值,policy本来可以封装的,不给封装,给的过期时间一点都不人性化,为了保证sts与ram的独立性,导致在业务间的授权很麻烦,做法太粗糙,还有就是看源码里居然还有用subString这种方法去处理字符串?好吧……我不去在意这些细节……
发表主题 回复主题
« 返回列表
«12»
共2页
上一主题下一主题

限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
验证问题: 88 + 9 = ?
上一个 下一个