OSS可以通過阿里雲STS服務,臨時進行授權訪問。使用STS時請按以下步驟進行:
- 在官網控制台建立子帳號,參考OSS STS。
- 在官網控制台建立STS角色並賦予子帳號扮演角色的許可權,參考OSS STS。
- 使用子帳號的AccessKeyId/AccessKeySecret向STS申請臨時token。
- 使用臨時token中的認證資訊建立OSS的Client。
- 使用OSS的Client訪問OSS服務。
在使用STS訪問OSS時,需要設定stsToken
參數,如下面的例子所示:
let OSS = require('ali-oss');
let STS = OSS.STS;
let sts = new STS({
accessKeyId: '<子帳號的AccessKeyId>',
accessKeySecret: '<子帳號的AccessKeySecret>'
});
async function assumeRole () {
try {
let token = yield sts.assumeRole(
'<role-arn>', '<policy>', '<expiration>', '<session-name>');
let client = new OSS({
region: '<region>',
accessKeyId: token.credentials.AccessKeyId,
accessKeySecret: token.credentials.AccessKeySecret,
stsToken: token.credentials.SecurityToken,
bucket: '<bucket-name>'
});
} catch (e) {
console.log(e);
}
}
assumeRole();
在向STS申請臨時token時,還可以指定自訂的STS Policy。這樣申請的臨時權限是所扮演角色的許可權與Policy指定的許可權的交集。下面的例子將通過指定STS Policy申請對my-bucket
的只讀許可權,並指定臨時token的過期時間為15分鐘:
let OSS = require('ali-oss');
let STS = OSS.STS;
let sts = new STS({
accessKeyId: '<子帳號的AccessKeyId>',
accessKeySecret: '<子帳號的AccessKeySecret>'
});
let policy = {
"Statement": [
{
"Action": [
"oss:Get*"
],
"Effect": "Allow",
"Resource": ["acs:oss:*:*:my-bucket/*"]
}
],
"Version": "1"
};
async function assumeRole () {
try {
let token = await sts.assumeRole(
'<role-arn>', policy, 15 * 60, '<session-name>');
let client = new OSS({
region: '<region>',
accessKeyId: token.credentials.AccessKeyId,
accessKeySecret: token.credentials.AccessKeySecret,
stsToken: token.credentials.SecurityToken,
bucket: '<bucket-name>'
});
} catch (e) {
console.log(e);
}
}
assumeRole();