使用RAM用戶訪問密鑰發(fā)起請求
本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業(yè)務造成影響,請務必仔細閱讀。
您可以為RAM用戶授予特定的權(quán)限,通過RAM用戶訪問密鑰長期訪問您的OSS資源。相較于阿里云賬號訪問密鑰,使用RAM用戶訪問密鑰訪問OSS資源更加安全。
步驟一:創(chuàng)建RAM用戶
使用阿里云賬號登錄RAM控制臺。
在左側(cè)導航欄,選擇 。
在用戶頁面,單擊創(chuàng)建用戶。
在創(chuàng)建用戶頁面的用戶賬號信息區(qū)域,設置用戶基本信息。
登錄名稱:可包含英文字母、數(shù)字、半角句號(.)、短劃線(-)和下劃線(_),最多64個字符。
顯示名稱:最多包含128個字符。
可選:標簽:您可以單擊,然后輸入標簽鍵和標簽值。為RAM用戶綁定標簽,便于后續(xù)基于標簽的用戶管理。
說明單擊添加用戶,可以批量創(chuàng)建多個RAM用戶。
在訪問方式區(qū)域,選擇OpenAPI調(diào)用訪問,然后單擊確定。
單擊復制,保存訪問密鑰(AccessKey ID 和 AccessKey Secret)。
步驟二:為RAM用戶授予上傳文件的權(quán)限
創(chuàng)建上傳文件的自定義權(quán)限策略。
在左側(cè)導航欄,選擇
。單擊創(chuàng)建權(quán)限策略。
在創(chuàng)建權(quán)限策略頁面,單擊腳本編輯,然后在策略文檔輸入框中賦予角色向目標存儲空間examplebucket下的目錄exampledir上傳文件的權(quán)限。具體配置示例如下。
警告以下示例僅供參考。您需要根據(jù)實際需求配置更細粒度的授權(quán)策略,防止出現(xiàn)權(quán)限過大的風險。關于更細粒度的授權(quán)策略配置詳情,請參見通過RAM或STS服務向其他用戶授權(quán)。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:PutObject", "Resource": "acs:oss:*:*:examplebucket/exampledir/*" } ] }
策略配置完成后,單擊繼續(xù)編輯基本信息。
在基本信息區(qū)域,填寫策略名稱為RamTestPolicy,然后單擊確定。
為RAM用戶授予自定義權(quán)限策略。
在左側(cè)導航欄,選擇
。在用戶頁面,找到目標RAM用戶。
單擊RAM用戶右側(cè)的添加權(quán)限。
在添加權(quán)限頁面下的自定義策略頁簽,選擇已創(chuàng)建的自定義權(quán)限策略RamTestPolicy。
單擊確定。
步驟三:使用RAM用戶訪問密鑰上傳文件至OSS
將本地D:\\localpath
路徑下的exampletest.txt文件上傳至存儲空間examplebucket下的exampledir目錄的Java示例代碼如下:
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
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填寫B(tài)ucket所在地域?qū)腅ndpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = "yourEndpoint";
// 強烈建議不要把訪問憑證保存到工程代碼里,否則可能導致訪問憑證泄露,威脅您賬號下所有資源的安全。本代碼示例以從環(huán)境變量中獲取訪問憑證為例。運行本代碼示例之前,請先配置環(huán)境變量。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 創(chuàng)建OSSClient實例。
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
// 創(chuàng)建PutObjectRequest對象。
// 依次填寫B(tài)ucket名稱(例如examplebucket)、Object完整路徑(例如exampledir/exampleobject.txt)和本地文件的完整路徑。Object完整路徑中不能包含Bucket名稱。
// 如果未指定本地路徑,則默認從示例程序所屬項目對應本地路徑中上傳文件。
PutObjectRequest putObjectRequest = new PutObjectRequest("examplebucket", "exampledir/exampleobject.txt", new File("D:\\localpath\\examplefile.txt"));
// 如果需要上傳時設置存儲類型和訪問權(quán)限,請參考以下示例代碼。
// 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();
}
}
更多語言的SDK示例請參見:
Object上傳成功后,關于如何獲取訪問URL的具體操作,請參見獲取單個或多個文件的URL。