-
Notifications
You must be signed in to change notification settings - Fork 42
/
Copy pathsetupRAM.js
175 lines (158 loc) · 4.68 KB
/
setupRAM.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
var async = require('async');
var ALY = require('aliyun-sdk');
var ram = new ALY.RAM({
accessKeyId: '在阿里云申请的 AccessKey',
secretAccessKey: '在阿里云申请的 AccessKeySecret',
endpoint: 'https://ram.aliyuncs.com',
apiVersion: '2015-05-01'
}
);
// 必需要准备账号 ID, 可以在 https://account.console.aliyun.com/#/secure 找到
var accountId = '账号 ID';
// 创建的用户的名称, 可以自己设置
var userName = 'user-oss-js-upload';
// 创建的角色的名称, 可以自己设置
var roleName = 'role-oss-js-upload';
setup();
//clear();
// 清除已经设置的 RAM 用户和角色
// 注意, 清除后就不能使用该用户和角色调用 assumeRole 方法, 生产环境慎用!
function clear() {
async.waterfall([
function (callback) {
console.log('正在 detachPolicyFromRole');
ram.detachPolicyFromRole({
PolicyType: 'System',
PolicyName: 'AliyunOSSFullAccess',
RoleName: roleName
}, function (err, res) {
if (err) {
console.error('失败', '原因:', err);
}
callback(null, res);
});
},
function (data, callback) {
console.log('正在 deleteRole');
ram.deleteRole({
RoleName: roleName
}, function (err, res) {
if (err) {
console.error('失败', '原因:', err);
}
callback(null, res);
});
},
function (data, callback) {
console.log('正在 detachPolicyFromUser');
ram.detachPolicyFromUser({
PolicyType: 'System',
PolicyName: 'AliyunSTSAssumeRoleAccess',
UserName: userName
}, function (err, res) {
if (err) {
console.error('失败', '原因:', err);
}
callback(null, res);
});
},
function (data, callback) {
console.log('正在 deleteUser');
ram.deleteUser({
UserName: userName
}, function (err, res) {
if (err) {
console.error('失败', '原因:', err);
}
callback(null, res);
});
}
], function (err, res) {
console.log('执行完毕');
});
}
// 创建用户和角色
function setup() {
async.waterfall([
function (callback) {
var data = {};
console.log('正在 createUser');
ram.createUser({
UserName: userName
}, function (err, res) {
if (err) {
console.error('失败', '原因:', err);
return callback(true);
}
callback(null, data);
});
},
function (data, callback) {
console.log('正在 attachPolicyToUser');
ram.attachPolicyToUser({
PolicyType: 'System',
PolicyName: 'AliyunSTSAssumeRoleAccess',
UserName: userName
}, function (err, res) {
if (err) {
console.error('失败', '原因:', err);
return callback(true);
}
callback(null, data);
});
},
function (data, callback) {
console.log('正在 createAccessKey');
ram.createAccessKey({
UserName: userName
}, function (err, res) {
if (err) {
console.error('失败', '原因:', err);
return callback(true);
}
data.accessKeyId = res.AccessKey.AccessKeyId;
data.accessKeySecret = res.AccessKey.AccessKeySecret;
callback(null, data);
});
},
function (data, callback) {
console.log('正在 createRole');
ram.createRole({
RoleName: roleName,
AssumeRolePolicyDocument: '{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"RAM":["acs:ram::' + accountId +':root"]}}],"Version":"1"}'
}, function (err, res) {
if (err) {
console.error('失败', '原因:', err);
return callback(true);
}
data.roleArn = res.Role.Arn;
callback(null, data);
});
},
function (data, callback) {
console.log('正在 attachPolicyToRole');
ram.attachPolicyToRole({
PolicyType: 'System',
PolicyName: 'AliyunOSSFullAccess',
RoleName: roleName
}, function (err, res) {
if (err) {
console.error('失败', '原因:', err);
return callback(true);
}
callback(null, data);
});
}
], function (err, data) {
if (err) {
console.log('RAM 设置失败');
console.log('请根据错误提示进行修改');
console.log('修改后使用 clear() 方法清除已经设置的用户和角色');
console.log('然后调用 setup() 重新设置 RAM');
return;
}
console.log('RAM 设置成功');
console.log('请记录下面打印的数据, 在后续调用 assumeRole 的时候会用到');
console.log(data);
});
}