存取點(Access Point)為儲存空間(Bucket)提供獨立的訪問入口。當一個Bucket需要被多個應用或團隊以不同許可權訪問時,可為每個訪問方建立獨立的存取點,通過存取點策略(AP Policy)分別管理各自的許可權,避免在單一Bucket Policy中維護複雜的許可權規則。
工作原理
存取點是Bucket的訪問代理層。建立存取點後,OSS會產生一個唯一的存取點別名,使用者使用該別名替代Bucket名稱發起請求。每個存取點可配置獨立的AP Policy(定義可執行檔操作、可訪問的資源和允許的身份)和網路來源(互連網或僅限指定VPC),實現基於業務情境的隔離訪問。
使用者通過存取點訪問時,系統會綜合評估RAM Policy、Bucket Policy和AP Policy三層策略,只有當RAM Policy與Bucket Policy的組合判定結果為Allow,且AP Policy也為Allow時,請求才會被允許。權限原則的詳細判定邏輯請參見許可權判定邏輯。
存取點預設無法訪問Bucket資源,需要先在Bucket Policy中配置許可權委派(通過oss:DataAccessPointArn、oss:DataAccessPointAccount或oss:AccessPointNetworkOrigin條件鍵),明確授權特定存取點訪問該Bucket。
快速使用
接下來將通過建立存取點、配置許可權委派和使用存取點訪問三個步驟,指導快速上手使用存取點功能。
步驟一:建立存取點
建立存取點並配置存取點策略,定義“哪些身份”、“在什麼條件下”,可以通過存取點“對哪些OSS資源”、“執行何種操作”。
前往存取點列表,單擊建立存取點。
輸入存取點名稱,選擇關聯的Bucket和網路來源,單擊下一步。
說明網路來源選擇VPC時,需要輸入VPC ID,可前往VPC控制台擷取。
輸入的VPC地區必須與OSS支援的網關終端節點地區保持一致,地區不匹配將導致鑒權請求無法正確關聯到指定VPC,從而引發鑒權失敗。
關閉阻止公用訪問選項,並配置存取點策略。
按圖形策略添加
配置項
說明
授權資源
選擇授權對象是整個Bucket還是指定資源。
資源路徑
授權資源選擇整個Bucket時,資源路徑為
accesspoint/{存取點名稱}/*。授權資源選擇指定資源時,填寫待授權資源的目錄或單個Object,支援添加多條記錄。
授權用戶
指定被授權對象。
子帳號:選擇當前阿里雲帳號下的RAM使用者。
當前登入帳號必須是阿里雲主帳號或擁有此Bucket系統管理權限及RAM控制台
ListUsers許可權的RAM使用者,否則無法查看當前帳號的RAM使用者列表。其他帳號:填寫其他待授權帳號、子帳號的UID或以
arn:sts開頭的臨時授權使用者(如arn:sts::1798************:assumed-role/role-name/session-name)。支援授權給多個使用者,一行填寫一個。
授權操作
簡單設定:選擇常見的授權操作組合,可選設定項包括唯讀(不包含ListObject操作)、唯讀(包含ListObject操作)、讀/寫、完全控制、拒絕訪問。
進階設定:自訂授權效力(允許或拒絕)和授權操作。
按文法策略添加
在編輯框內輸入JSON格式的授權策略。
樣本授權策略:授予使用者
20816353761158****讀/寫入權限。{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": [ "oss:GetObject", "oss:PutObject", "oss:GetObjectAcl", "oss:PutObjectAcl", "oss:ListObjects", "oss:AbortMultipartUpload", "oss:ListParts", "oss:RestoreObject", "oss:ListObjectVersions", "oss:GetObjectVersion", "oss:GetObjectVersionAcl", "oss:RestoreObjectVersion" ], "Principal": [ "20816353761158****" ], "Resource": [ "acs:oss:{region-id}:179882766168****:accesspoint/{ap-name}/object/*" ] }, { "Effect": "Allow", "Action": [ "oss:ListObjects", "oss:GetObject" ], "Principal": [ "20816353761158****" ], "Resource": [ "acs:oss:{region-id}:179882766168****:accesspoint/{ap-name}" ], "Condition": { "StringLike": { "oss:Prefix": [ "*" ] } } }] }完整的授權策略包含Version(版本號碼)和Statement(授權語句)。
Version:權限原則版本,固定為
1,不允許修改。Statement:策略語句的主體,包含一條或多條具體的授權/拒絕規則。每條授權語句包含Effect(授權效力)、Action(授權操作)、Principal(授權主體)、Resource(授權資源)和Condition(授權條件)。
策略元素
說明
Effect
策略的效力,可選值為
Allow(允許)或Deny(拒絕)。Action
對資源執行的具體操作,支援使用萬用字元
*。Principal
策略作用的主體(使用者、帳號、角色等)。
Resource
策略作用的資源範圍。
Condition
策略生效的條件。
當配置多個條件時,所有條件必須同時滿足(AND關係),策略才會生效。
完整的授權元素列表請參見授權文法與元素。
單擊提交,等待存取點建立完成。
步驟二:存取點許可權委派
建立存取點後,還需要通過Bucket Policy設定存取點許可權委派,即定義哪些存取點能夠訪問Bucket。存取點許可權委派提供三種類型:
oss:DataAccessPointArn:指定存取點的存取權限委派。oss:DataAccessPointAccount:當前主帳號下所有存取點的存取權限委派。oss:AccessPointNetworkOrigin:指定網路來源的所有存取點存取權限委派。
指定存取點許可權委派
前往Bucket列表,單擊目標Bucket。
在左側功能表列單擊,選擇按文法策略添加。
單擊編輯,在編輯框內輸入JSON格式的授權策略。
說明配置時請替換樣本內的UID、Bucket名稱、地區ID和存取點名稱。如果原來的Bucket Policy不為空白,請在原有的Bucket Policy中追加
Statement元素。{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": [ "oss:*" ], "Principal": [ "*" ], "Resource": [ "acs:oss:*:179882766168****:example-bucket", "acs:oss:*:179882766168****:example-bucket/*" ], "Condition": { "StringEquals": { "oss:DataAccessPointArn": [ "acs:oss:oss-{region-id}:179882766168****:accesspoint/{ap-name}" ] } } }] }單擊儲存,完成Bucket Policy配置。
所有存取點許可權委派
前往Bucket列表,單擊目標Bucket。
在左側功能表列單擊,選擇按文法策略添加。
單擊編輯,在編輯框內輸入JSON格式的授權策略。
說明配置時請替換樣本內的UID和Bucket名稱。如果原有的Bucket Policy不為空白,請在原有的Bucket Policy中追加
Statement元素。{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": [ "oss:*" ], "Principal": [ "*" ], "Resource": [ "acs:oss:*:179882766168****:example-bucket", "acs:oss:*:179882766168****:example-bucket/*" ], "Condition": { "StringEquals": { "oss:DataAccessPointAccount": [ "179882766168****" ] } } }] }單擊儲存,完成Bucket Policy配置。
指定網路來源許可權委派
前往Bucket列表,單擊目標Bucket。
在左側功能表列單擊,選擇按文法策略添加。
單擊編輯,在編輯框內輸入JSON格式的授權策略。
說明配置時需替換樣本中的UID和Bucket名稱。若原有Bucket Policy已包含內容,需在現有策略的
Statement數組中追加新元素。當
oss:AccessPointNetworkOrigin設定為internet時,委派所有網路來源為互連網的存取點,此配置同時允許外網和VPC訪問。如需限制僅允許VPC訪問,需將該值修改為vpc。
{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": [ "oss:*" ], "Principal": [ "*" ], "Resource": [ "acs:oss:*:179882766168****:example-bucket", "acs:oss:*:179882766168****:example-bucket/*" ], "Condition": { "StringEquals": { "oss:AccessPointNetworkOrigin": [ "internet" ] } } }] }單擊儲存,完成Bucket Policy配置。
如果提示“Bucket Policy 中包含公用訪問語義”,請先關閉Bucket的阻止公用訪問選項,再進行存取點許可權委派。
步驟三:使用存取點訪問
建立存取點後,OSS會自動產生存取點別名。使用被授權的身份(如RAM使用者)通過該別名即可訪問對應的OSS資源。
SDK
目前僅Java SDK和Python SDK支援通過存取點別名訪問OSS資源。
import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.StaticCredentialsProvider;
import com.aliyun.sdk.service.oss2.models.GetObjectRequest;
import java.io.File;
/**
* OSS Java SDK V2 樣本:使用存取點下載對象到本地檔案
*/
public class DownloadObjectWithAccessPoint {
public static void main(String[] args) {
// 建立OSS用戶端
String accessKeyId = System.getenv("OSS_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("OSS_ACCESS_KEY_SECRET");
CredentialsProvider provider = new StaticCredentialsProvider(accessKeyId, accessKeySecret);
OSSClient client = OSSClient.newBuilder()
.credentialsProvider(provider)
.region("<region-id>")
.build();
// 使用存取點別名下載對象到本地檔案
String bucket = "example-ap-b156d01070a10322664d6704cd1d47****-ossalias";
String key = "example.jpg";
File file = new File("example.jpg");
client.getObjectToFile(GetObjectRequest.newBuilder()
.bucket(bucket)
.key(key)
.build(), file);
System.out.println("檔案下載完成: " + key + " -> " + file.getPath());
// 關閉用戶端
try {
client.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""OSS Python SDK V2 樣本:使用存取點下載對象到本地檔案"""
import alibabacloud_oss_v2 as oss
def main() -> None:
"""主函數"""
# 建立OSS用戶端
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
config = oss.config.load_default()
config.credentials_provider = credentials_provider
config.region = "<region-id>"
config.endpoint = "oss-<region-id>.aliyuncs.com"
client = oss.Client(config)
# 使用存取點別名下載對象到本地檔案
bucket = "example-ap-b156d01070a10322664d6704cd1d47****-ossalias"
key = "example.jpg"
file_path = "example.jpg"
request = oss.GetObjectRequest(bucket, key)
client.get_object_to_file(request, file_path)
print(f"檔案下載完成: {key} -> {file_path}")
if __name__ == "__main__":
main()
ossutil
使用ossutil訪問OSS資源時,將存取點別名作為Bucket名稱。
ossutil cp oss://example-ap-b156d01070a10322664d6704cd1d47****-ossalias/example.jpg /tmpREST API
使用REST API訪問OSS資源時,需要在Host中使用存取點別名。樣本如下:
GET /ObjectName HTTP/1.1
Host: example-ap-b156d01070a10322664d6704cd1d47****-ossalias.oss-{region-id}.aliyuncs.com
Date: GMT Date
Authorization: SignatureValue情境樣本
以下樣本展示了如何為巨量資料分析情境設計存取點方案,通過細粒度許可權控制實現多部門安全隔離訪問。
情境描述
某公司(阿里雲帳號UID為137918634953****)將統一採集的資料存放在儲存空間examplebucket中,該Bucket需要被10個不同業務部門訪問,具體需求如下:
部門 | 存取範圍 | 許可權要求 | 網路來源 |
部門1~3 |
| 唯讀 | 互連網 |
部門4 | 整個Bucket | 讀寫 | 互連網 |
部門5~10 |
| 讀寫 | 僅VPC |
方案設計
基於業務隔離和安全邊界需求,設計3個存取點分別對應不同的訪問情境,通過存取點策略實現精確的許可權控制和網路訪問限制。
存取點 | 名稱 | 網路來源 | 授權使用者 | 授權資源 | 許可權 |
存取點1 |
| 互連網 | 部門1~3的RAM使用者(UID: |
| 唯讀 |
存取點2 |
| 互連網 | 部門4的RAM使用者(UID: |
| 讀寫 |
存取點3 |
| VPC | 部門5~10的RAM使用者(UID: |
| 讀寫 |
AP Policy配置
ap-01(部門1~3隻讀訪問)
{
"Version": "1",
"Statement": [{
"Effect": "Allow",
"Action": [
"oss:GetObject",
"oss:GetObjectAcl",
"oss:ListObjects",
"oss:RestoreObject",
"oss:ListObjectVersions",
"oss:GetObjectVersion",
"oss:GetObjectVersionAcl",
"oss:RestoreObjectVersion"
],
"Principal": [
"26571698800555****"
],
"Resource": [
"acs:oss:{region-id}:137918634953****:accesspoint/ap-01/object/dir1/*"
]
},{
"Effect": "Allow",
"Action": [
"oss:ListObjects",
"oss:GetObject"
],
"Principal": [
"26571698800555****"
],
"Resource": [
"acs:oss:{region-id}:137918634953****:accesspoint/ap-01"
],
"Condition": {
"StringLike": {
"oss:Prefix": [
"dir1/*"
]
}
}
}]
}ap-02(部門4讀寫整個Bucket)
{
"Version": "1",
"Statement": [{
"Effect": "Allow",
"Action": [
"oss:GetObject",
"oss:PutObject",
"oss:GetObjectAcl",
"oss:PutObjectAcl",
"oss:ListObjects",
"oss:AbortMultipartUpload",
"oss:ListParts",
"oss:RestoreObject",
"oss:ListObjectVersions",
"oss:GetObjectVersion",
"oss:GetObjectVersionAcl",
"oss:RestoreObjectVersion"
],
"Principal": [
"25770968794578****"
],
"Resource": [
"acs:oss:{region-id}:137918634953****:accesspoint/ap-02/object/*"
]
},{
"Effect": "Allow",
"Action": [
"oss:ListObjects",
"oss:GetObject"
],
"Principal": [
"25770968794578****"
],
"Resource": [
"acs:oss:{region-id}:137918634953****:accesspoint/ap-02"
],
"Condition": {
"StringLike": {
"oss:Prefix": [
"*"
]
}
}
}]
}ap-03(部門5~10通過VPC讀寫)
{
"Version": "1",
"Statement": [{
"Effect": "Allow",
"Action": [
"oss:GetObject",
"oss:PutObject",
"oss:GetObjectAcl",
"oss:PutObjectAcl",
"oss:ListObjects",
"oss:AbortMultipartUpload",
"oss:ListParts",
"oss:RestoreObject",
"oss:ListObjectVersions",
"oss:GetObjectVersion",
"oss:GetObjectVersionAcl",
"oss:RestoreObjectVersion"
],
"Principal": [
"26806658794579****"
],
"Resource": [
"acs:oss:{region-id}:137918634953****:accesspoint/ap-03/object/dir2/*"
]
},{
"Effect": "Allow",
"Action": [
"oss:ListObjects",
"oss:GetObject"
],
"Principal": [
"26806658794579****"
],
"Resource": [
"acs:oss:{region-id}:137918634953****:accesspoint/ap-03"
],
"Condition": {
"StringLike": {
"oss:Prefix": [
"dir2/*"
]
}
}
}]
}Bucket Policy許可權委派
由於該情境涉及同一帳號下的多個存取點,建議使用oss:DataAccessPointAccount進行統一委派,簡化Bucket Policy配置。如需更精細的控制,也可使用oss:DataAccessPointArn為每個存取點單獨委派。
統一委派
{
"Version": "1",
"Statement": [{
"Effect": "Allow",
"Action": [
"oss:*"
],
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:137918634953****:examplebucket",
"acs:oss:*:137918634953****:examplebucket/*"
],
"Condition": {
"StringEquals": {
"oss:DataAccessPointAccount": [
"137918634953****"
]
}
}
}]
}單獨委派
{
"Version": "1",
"Statement": [{
"Effect": "Allow",
"Action": [
"oss:*"
],
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:137918634953****:examplebucket",
"acs:oss:*:137918634953****:examplebucket/*"
],
"Condition": {
"StringEquals": {
"oss:DataAccessPointArn": [
"acs:oss:oss-{region-id}:137918634953****:accesspoint/ap-01",
"acs:oss:oss-{region-id}:137918634953****:accesspoint/ap-02",
"acs:oss:oss-{region-id}:137918634953****:accesspoint/ap-03"
]
}
}
}]
}許可權判定邏輯
RAM Policy和Bucket Policy的合并結果 | AP Policy結果 | 最終結果 |
Allow | Allow | Allow |
Allow | Deny | Deny |
Allow | Ignore | Ignore |
Deny | Allow | Deny |
Deny | Deny | Deny |
Deny | Ignore | Deny |
Ignore | Allow | Ignore |
Ignore | Deny | Deny |
Ignore | Ignore | Ignore |
Allow(允許):訪問請求命中了權限原則中的Allow語句,且沒有命中Deny語句。
Deny(顯式拒絕):訪問請求命中了權限原則中的Deny語句。即使同時命中了Allow語句,遵循Deny優先原則,判定結果仍為顯式拒絕。
Ignore(隱式拒絕):訪問請求既沒有命中Allow語句,也沒有命中Deny語句。RAM身份預設沒有執行任何操作的許可權,未被顯式允許的操作都會被隱式拒絕。
配額與限制
限制項 | 說明 |
建立方式 | 支援通過OSS控制台、API和ossutil建立存取點,不支援通過SDK建立存取點。 |
數量 |
|
修改規則 | 存取點建立後,僅支援修改存取點策略,不支援修改存取點基礎資訊(如存取點名稱、存取點別名等)。 |
訪問方式 | 不支援匿名訪問。 |
常見問題
存取點的使用權限設定是否支援IP白名單?
支援。可按文法策略添加存取點策略,添加"IpAddress": {"acs:SourceIp": ["xxx"]}條件限制。
通過RAM使用者建立存取點時需具備哪些許可權?
需要具備以下許可權:oss:CreateAccessPoint、oss:GetAccessPoint、oss:DeleteAccessPoint、oss:ListAccessPoints、oss:PutAccessPointPolicy、oss:GetAccessPointPolicy、oss:DeleteAccessPointPolicy、oss:PutBucketPolicy、oss:GetBucketPolicy、oss:DeleteBucketPolicy。