本文共 5086 字,大约阅读时间需要 16 分钟。
给予 AWS 上的 Code space (代码与软件管理平台)系统数据和备份数据一并被攻击者删除。
1、用户自己登陆
2、用户授权自己的 ram 子账号登陆。
3、用户授权别人加的 ram 账号登陆
1、比如阿里云提供的工具,类似 oss 的 brower
2、客户的应用程序代码(app、服务端程序)通过 sts 或者 云账号的 ak/sk
3、ecs 的 meta 网关信息也可以操作
ABAC模型:AttributeBasedAccessControl . 这种是我们常用的自定义 policy 需要自己写控制语句
ABACvsACL: 就是我们常用系统策略,权限粒度小,都是一个管理权限或者只读、只写的权限。
{"Version":"1","Statement":[ {"Effect":"Allow", "Action":"ecs:StopInstance", "Resource":"acs:ecs:cn-hangzhou:*:*", "Condition":{"StringEquals":{ "ecs:tag/env":"production"}, "Bool":{"acs:MFAPresent":"true" },"IpAddress":{ "acs:SourceIp":"42.120.88.0/24"} }} ]}
以上策略意思是 针对 42.120.88.0,允许操作 production 组内的 ecs 实例进行停止操作。
为了方便我们给他分开三块看,这样会比较清晰。
第一块:固定的外层语法不变,即使有多条策略也是在者一个 statement 内部,用 "," 分开。
{ "Sersion":"1""Statement":[ "这里是第二块" ]}
第二块:我们简称三板斧,因为内容是固定的,只不过变化 value 而已。
1、三板斧就是 effect ,action,resource ,这三个是一组,包含在一个 {} 内,第二条语句要用 "," 隔开写在第二个 {} 内
2、effect :只有 Allow 和 Deny
3、action :可以写多条时要用 [] 包括,比如 ["acs:ecs:cn-hangzhou:1982222:instance/i-zxxxxesd" , "acs:oss:cn-beijing:1299:bucket/prefix/objet"]
4、action :填写的是你要限制对应的产品的 API 名称,写多个时要用 [] 包括主,比如 [ “ecs:CreateInstance”,"ecs:StopInstance"]
5、product:填写产品名称 slb、ecs 、oss、vpc 等。
6、regionID:cn-shanghai、cn-hangzhou 等
7、uid:云账号 uid
{ "Sersion":"1" "Statement":[ { "Effect":"Allow / deny", "Resource":"acs:product:regionid:uid:*", "Action:":"apiname" }, { "设置并行的第二条语句" } ]}
下面我实际操作如果新建 ram 子账号、授权策略
当前端上的 APP 不可能直接使用客户的 ak sk ,风险性极高,一但恶意攻击者那到你 APP 数据包,揭秘出源码中的 ak sk ,您的云产品将暴露,任何人都可以操作您子账号下所有授权的产品,即使删除 ak sk 也可能导致服务端的其他业务出现链接异常,由此 sts 应运而生。
由于 sts 也要新建 ram 子账号存在与 part3 重复的地方,所以建立 ram 子账号的位置我就不演示了。
public class StsServiceSample { public static void main(String[] args) { String endpoint = "sts.aliyuncs.com"; String accessKeyId = ""; String accessKeySecret = " "; String roleArn = " "; String roleSessionName = "session-name"; String policy = "{\n" + " \"Version\": \"1\", \n" + " \"Statement\": [\n" + " {\n" + " \"Action\": [\n" + " \"oss:*\"\n" + " ], \n" + " \"Resource\": [\n" + " \"acs:oss:*:*:*\" \n" + " ], \n" + " \"Effect\": \"Allow\"\n" + " }\n" + " ]\n" + "}"; try { // 添加endpoint(直接使用STS endpoint,前两个参数留空,无需添加region ID) DefaultProfile.addEndpoint("", "", "Sts", endpoint); // 构造default profile(参数留空,无需添加region ID) IClientProfile profile = DefaultProfile.getProfile("", accessKeyId, accessKeySecret); // 用profile构造client DefaultAcsClient client = new DefaultAcsClient(profile); final AssumeRoleRequest request = new AssumeRoleRequest(); request.setMethod(MethodType.POST); request.setRoleArn(roleArn); request.setRoleSessionName(roleSessionName); request.setPolicy(policy); // Optional final AssumeRoleResponse response = client.getAcsResponse(request); System.out.println("Expiration: " + response.getCredentials().getExpiration()); System.out.println("Access Key Id: " + response.getCredentials().getAccessKeyId()); System.out.println("Access Key Secret: " + response.getCredentials().getAccessKeySecret()); System.out.println("Security Token: " + response.getCredentials().getSecurityToken()); System.out.println("RequestId: " + response.getRequestId()); } catch (ClientException e) { System.out.println("Failed:"); System.out.println("Error code: " + e.getErrCode()); System.out.println("Error message: " + e.getErrMsg()); System.out.println("RequestId: " + e.getRequestId()); } }}
转载地址:http://irmjl.baihongyu.com/