赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 对象存储
  4. 开发参考
  5. SDK参考
  6. 使用SDK发起请求概述
  7. 使用RAM用户访问密钥访问OSS

使用RAM用户访问密钥访问OSS

  • 使用SDK发起请求概述
  • 发布于 2025-04-21
  • 0 次阅读
文档编辑
文档编辑

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

步骤一:创建RAM用户

  1. 使用阿里云账号(主账号)或RAM管理员登录RAM控制台。

  2. 在左侧导航栏,选择身份管理 > 用户。

  3. 在用户页面,单击创建用户。

    image

  4. 在创建用户页面的用户账号信息区域,设置用户基本信息。

    • 登录名称:可包含英文字母、数字、半角句号(.)、短划线(-)和下划线(_),最多64个字符。

    • 显示名称:最多包含128个字符或汉字。

    • 标签:单击edit,然后输入标签键和标签值。为RAM用户绑定标签,便于后续基于标签的用户管理。

    说明

    单击添加用户,可以批量创建多个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

以下Java示例代码用于将本地文件examplefile.txt上传到目标存储空间examplebucket中exampledir目录下的exampleobject.txt文件。

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.File;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "examplebucket";
        // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
        String objectName = "exampledir/exampleobject.txt";
        // 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。
        // 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
        String filePath= "D:\\localpath\\examplefile.txt";
        // 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
        String region = "cn-hangzhou";
        
        // 创建OSSClient实例。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(filePath));
            // 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。
            // ObjectMetadata metadata = new ObjectMetadata();
            // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
            // metadata.setObjectAcl(CannedAccessControlList.Private);
            // putObjectRequest.setMetadata(metadata);
            
            // 上传文件。
            PutObjectResult result = ossClient.putObject(putObjectRequest);           
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

更多语言的SDK示例请参见:

  • Java SDK

  • Python SDK V2

  • Go SDK V2

  • PHP SDK V2

  • Node.js SDK

  • Browser.js SDK

  • .NET SDK

  • Android SDK

  • iOS SDK

  • C++ SDK

  • C SDK

  • Ruby SDK

常见问题

如何查看RAM用户的AK?是否可以查看旧的AccessKey Secret?

  1. 如需查看RAM用户的AK,请直接参考文档查看RAM用户的AccessKey信息。

  2. RAM用户的AccessKey Secret仅在创建时显示,之后无法查看,若您已经遗忘了的话无法找回。您可以直接访问RAM控制台选择具体用户,并创建新的AccessKey进行轮换。详细请参见创建AccessKey。

使用RAM用户的AK进行上传文件时,报错AccessDenied如何排查?

上传文件时出现AccessDenied的问题,通常是因为使用了错误的AK信息或没有给RAM用户添加上传文件的权限,您可以按照以下步骤检查:

  1. 检查您使用的RAM用户的AK是否正确,请直接参考文档查看RAM用户的AccessKey信息。

  2. RAM用户的AccessKey Secret仅在创建时显示,之后无法查看,若您已经遗忘了的话无法找回。您可以直接访问RAM控制台选择具体用户,并创建新的AccessKey进行轮换。详细请参见创建AccessKey。

  3. 登录RAM控制台选择具体用户,给RAM用户添加上传文件到OSS的权限。

如果遇到报错问题该如何查询具体的错误类型?

关于错误类型的查询,OSS文档提供了EC错误码供您参阅,例如关于认证方面的常见报错问题,请参见02-AUTH。

报错NoSuchBucket如何处理?

出现该报错的原因是指定的Bucket不存在。请检查并配置正确的Bucket名称。

报错The bucket you are attempting to access must be addressed using the specified endpoint.如何处理?

出现该报错的原因是Endpoint参数填写错误。您需要根据Bucket所在Region填写对应的Endpoint。关于Region与Endpoint对应关系的说明,请参见OSS地域和访问域名。

相关文档

  • 文件上传到OSS后,您可以通过签名URL的方式将文件分享给第三方用户进行预览或者下载。具体操作,请参见使用预签名URL下载文件。

相关文章

使用RAM用户访问密钥访问OSS 2025-04-21 18:15

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

使用STS临时访问凭证访问OSS 2025-04-21 18:15

通过STS服务,您可以为用户生成临时访问凭证,使其在有效期内访问受策略限制的OSS资源。超过有效期后,凭证自动失效,无法继续访问OSS资源,确保了访问控制的灵活性和时效性。

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号