您可以为RAM用户授予特定的权限,通过RAM用户访问密钥长期访问您的OSS资源。相较于阿里云账号访问密钥,使用RAM用户访问密钥访问OSS资源更加安全。

步骤一:创建RAM用户

  1. 使用阿里云账号登录RAM控制台
  2. 在左侧导航栏,选择身份管理 > 用户
  3. 用户页面,单击创建用户
  4. 创建用户页面的用户账号信息区域,输入登录名称显示名称
    说明 单击添加用户,可一次性创建多个RAM用户。
  5. 访问方式区域,选择OpenAPI调用访问,然后单击确定
  6. 单击复制,保存访问密钥(AccessKey ID 和 AccessKey Secret)。

步骤二:为RAM用户授予上传文件的权限

  1. 创建上传文件的自定义权限策略。
    1. 在左侧导航栏,选择权限管理 > 权限策略
    2. 单击创建权限策略
    3. 创建权限策略页面,单击脚本编辑,然后在策略文档输入框中赋予角色向目标存储空间examplebucket下的目录exampledir上传文件的权限。具体配置示例如下。
      警告 以下示例仅供参考。您需要根据实际需求配置更细粒度的授权策略,防止出现权限过大的风险。关于更细粒度的授权策略配置详情,请参见通过RAM或STS服务向其他用户授权
      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "oss:PutObject",
            "Resource": "acs:oss:*:*:examplebucket/exampledir/*"
          }
        ]
      }
    4. 策略配置完成后,单击下一步
    5. 基本信息区域,填写策略名称RamTestPolicy,然后单击确定
  2. 为RAM用户授予自定义权限策略。
    1. 在左侧导航栏,选择身份管理 > 用户
    2. 用户页面,找到目标RAM用户。
    3. 单击RAM用户右侧的添加权限
    4. 添加权限页面下的自定义策略页签,选择已创建的自定义权限策略RamTestPolicy
    5. 单击确定

步骤三:使用RAM用户访问密钥上传文件至OSS

将本地D:\\localpath路径下的exampletest.txt文件上传至存储空间examplebucket下的exampledir目录的Java示例代码如下:

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectRequest;

import java.io.File;


public class RAMAccessKeySample {
    public static void main(String[] args) {
        // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
        String endpoint = "yourEndpoint";

        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = "yourAccessKeyId";
        String accessKeySecret = "yourAccessKeySecret";

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 创建PutObjectRequest对象。
        // 依次填写Bucket名称(例如examplebucket)、Object完整路径(例如exampledir/exampleobject.txt)和本地文件的完整路径。Object完整路径中不能包含Bucket名称。
        // 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
        PutObjectRequest putObjectRequest = new PutObjectRequest("examplebucket", "exampledir/exampleobject.txt", new File("D:\\localpath\\examplefile.txt"));

        // 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。
        // ObjectMetadata metadata = new ObjectMetadata();
        // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
        // metadata.setObjectAcl(CannedAccessControlList.Private);
        // putObjectRequest.setMetadata(metadata);

        // 上传文件。
        ossClient.putObject(putObjectRequest);

        // 关闭OSSClient。
        ossClient.shutdown();
    }
}

Object上传成功后,关于如何获取访问URL的具体操作,请参见如何获取单个或多个文件的URL?