步骤1:创建RAM用户
- 登录RAM控制台。
- 在左侧导航栏选择身份管理 > 用户。
- 单击“创建用户”。
- 输入登录名称和显示名称。
- 在访问方式区域选择“OpenAPI调用访问”,然后单击“确定”。
- 完成安全验证。
- 复制访问密钥(AccessKey ID 和 AccessKey Secret)。
步骤2:为RAM用户授予请求AssumeRole的权限
- 在RAM用户右侧单击“添加权限”。
- 在添加权限页面选择系统策略“AliyunSTSAssumeRoleAccess”。
- 单击“确定”。
步骤3:创建用于获取临时访问凭证的角色
根据具体业务需求创建角色并配置角色信任策略。
步骤4:为角色授予上传和下载文件的权限
配置角色策略,授予角色OSS访问权限。
步骤5:生成临时访问凭证
通过RAM用户调用AssumeRole接口获取临时访问凭证。
步骤6:使用临时访问凭证上传和下载文件
使用获取的临时访问凭证进行OSS操作,如上传和下载文件。
使用签名URL进行临时授权
注意事项
- 生成签名URL过程中,SDK利用本地存储的密钥信息,根据特定算法计算出签名,并将其附加到URL上,以确保URL的有效性和安全性。
- 生成签名URL时不需要授予调用者特定权限,但需要确保调用生成签名URL接口的身份主体被授予对应的权限。
- 通过签名URL上传文件时,需要授予
oss:PutObject
权限;下载或预览文件时,需要授予oss:GetObject
权限。 - 签名URL中的特殊符号
+
可能需要替换为%2B
。
生成签名URL并上传文件
const OSS = require("ali-oss"); const { default: axios } = require("axios"); const fs = require("fs"); const client = new OSS({ region: 'yourregion', accessKeyId: process.env.OSS_ACCESS_KEY_ID, accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET, bucket: 'examplebucket', }); // 生成文件的签名URL const url = client.signatureUrl("examplefile.txt", { method: "PUT", "Content-Type": "application/x-www-form-urlencoded", }); // 读取本地文件 const file = fs.readFileSync("D:\\localpath\\examplefile.txt"); // 使用签名URL上传文件 axios({ url, method: "PUT", data: file, }) .then((r) => console.log(r)) .catch((e) => console.log(e));
生成签名URL并下载文件
const OSS = require("ali-oss"); const { default: axios } = require("axios"); const fs = require("fs"); const client = new OSS({ region: 'yourRegion', accessKeyId: process.env.OSS_ACCESS_KEY_ID, accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET, bucket: 'examplebucket' }); // 生成文件的签名URL const url = client.signatureUrl("examplefile.txt"); // 本地文件路径 const file = "D:\\localpath\\examplefile.txt"; // 通过签名URL下载文件 axios({ url, method: "GET", }) .then((r) => { fs.writeFile(file, r.data, (err) => { if (err) { console.log(err); } }); }) .catch((e) => console.log(e));
常见问题
生成签名URL时仅支持使用PUT和GET方法。如果需要通过POST方法进行上传,请参考PostObject自行构造POST请求。