全部產品
Search
文件中心

Object Storage Service:存取控制與日誌

更新時間:Mar 28, 2026

向量Bucket提供存取控制和日誌管理功能,確保資料安全性、合規性和可觀測性。

存取控制

向量Bucket支援Bucket PolicyRAM Policy

  • Bucket Policy:基於資源的授權策略,可以將其附加到Bucket上,用於授權其他阿里雲賬戶、子賬戶或匿名使用者存取指定的向量資源。

  • RAM Policy:基於身份的授權策略,可以將其附加到RAM使用者、使用者組或角色上,定義其能夠訪問哪些向量Bucket資源。

支援的Action列表

API

Action

介面描述

PutVectorBucket

oss:PutVectorBucket

建立向量Bucket。

GetVectorBucket

oss:GetVectorBucket

擷取向量Bucket的詳細資料。

ListVectorBuckets

oss:ListVectorBuckets

列舉要求者擁有的所有向量Bucket。

DeleteVectorBucket

oss:DeleteVectorBucket

刪除向量Bucket。

PutBucketLogging

oss:PutBucketLogging

開啟向量Bucket日誌轉存功能。

oss:PutObject

開啟源向量Bucket日誌轉存功能時,設定源向量Bucket日誌寫入另一個目標Bucket。

GetBucketLogging

oss:GetBucketLogging

查看向量Bucket日誌轉存配置。

DeleteBucketLogging

oss:DeleteBucketLogging

關閉向量Bucket日誌轉存功能。

PutBucketPolicy

oss:PutBucketPolicy

設定指定向量Bucket的授權策略。

GetBucketPolicy

oss:GetBucketPolicy

擷取指定向量Bucket的授權策略。

DeleteBucketPolicy

oss:DeleteBucketPolicy

刪除指定向量Bucket的授權策略。

PutVectorIndex

oss:PutVectorIndex

建立向量索引。

GetVectorIndex

oss:GetVectorIndex

擷取向量索引的詳細資料。

ListVectorIndexes

oss:ListVectorIndexes

列舉向量Bucket中的所有向量索引。

DeleteVectorIndex

oss:DeleteVectorIndex

刪除向量索引。

PutVectors

oss:PutVectors

寫入向量資料。

GetVectors

oss:GetVectors

擷取指定的向量資料。

ListVectors

oss:ListVectors

列舉向量索引中的所有向量資料。

QueryVectors

oss:QueryVectors

進行向量相似性檢索。

DeleteVectors

oss:DeleteVectors

刪除向量索引中的指定向量資料。

資源描述格式

資源層級

格式

樣本

所有向量資源

acs:ossvector:*:*:*

acs:ossvector:*:*:*/*

acs:ossvector:*:*:*

acs:ossvector:*:*:*/*

向量 Bucket

acs:ossvector:{region}:{account_id}:{bucket_name}

acs:ossvector:*:*:my-vector-bucket

向量索引

acs:ossvector:{region}:{account_id}:{bucket_name}/{index_name}

acs:ossvector:*:*:my-vector-bucket/my-index

Bucket Policy

通過 Bucket Policy 授權子賬戶和其他帳號訪問指定的 OSS 資源。

控制台

  1. 向量Bucket頁面,單擊目標Bucket,在左側導覽列選擇許可權控制 > Bucket授權策略

  2. 單擊按文法策略添加,在策略編輯器中輸入策略內容。例如,授予UID為114232345180****的使用者對my-vector-bucket下的my-index索引讀寫向量資料的許可權:

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "oss:PutVectors",
            "oss:GetVectors"
          ],
          "Principal": [
             "1142323451******"
          ],   
          "Resource": [
            "acs:ossvector:*:*:my-vector-bucket/my-index"
          ]
        }
      ]
    }
  3. 單擊確定完成建立。

ossutil

以下樣本展示了如何為向量儲存空間設定授權策略,允許指定使用者進行向量相關操作。使用JSON設定檔,vector-policy.json內容如下:

{
   "Version":"1",
   "Statement":[
       {
         "Action":[
           "oss:PutVectors",
           "oss:GetVectors"
        ],
        "Effect":"Deny",
        "Principal":["1234567890"],
        "Resource":["acs:ossvector:cn-hangzhou:1234567890:*/*"]
       }
    ]
}
ossutil vectors-api put-bucket-policy --bucket vector-example --body file://vector-policy.json

使用JSON配置參數設定向量Bucket策略:

ossutil vectors-api put-bucket-policy --bucket vector-example --body "{\"Version\":\"1\",\"Statement\":[{\"Action\":[\"oss:PutVectors\",\"oss:GetVectors\",\"oss:QueryVectors\"],\"Effect\":\"Allow\",\"Principal\":[\"1234567890\"],\"Resource\":[\"acs:ossvector:cn-hangzhou:1234567890:bucket/vector-example/*\"]}]}"

SDK

Python

import argparse
import alibabacloud_oss_v2 as oss
import alibabacloud_oss_v2.vectors as oss_vectors

parser = argparse.ArgumentParser(description="vector put bucket policy sample")
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
parser.add_argument('--account_id', help='The account id.', required=True)

def main():
    args = parser.parse_args()

    # Loading credentials values from the environment variables
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Using the SDK's default configuration
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region
    cfg.account_id = args.account_id
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    vector_client = oss_vectors.Client(cfg)


    policy_content = '''
        {
           "Version":"1",
           "Statement":[
               {
                 "Action":[
                   "oss:PutVectors",
                   "oss:GetVectors"
                ],
                "Effect":"Deny",
                "Principal":["1234567890"],
                "Resource":["acs:ossvector:cn-hangzhou:1234567890:*/*"]
               }
            ]
         }
    '''

    result = vector_client.put_bucket_policy(oss_vectors.models.PutBucketPolicyRequest(
        bucket=args.bucket,
        body=policy_content
    ))

    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
    )

if __name__ == "__main__":
    main()

Go

package main

import (
	"context"
	"flag"
	"log"
	"strings"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/vectors"
)

var (
	region     string
	bucketName string
	accountId  string
)

func init() {
	flag.StringVar(&region, "region", "", "The region in which the vector bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the vector bucket.")
	flag.StringVar(&accountId, "account-id", "", "The id of vector account.")
}

func main() {
	flag.Parse()
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	if len(accountId) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, accounId required")
	}

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region).WithAccountId(accountId)

	client := vectors.NewVectorsClient(cfg)

	request := &vectors.PutBucketPolicyRequest{
		Bucket: oss.Ptr(bucketName),
		Body: strings.NewReader(`{
			   "Version":"1",
			   "Statement":[
			   {
				 "Action":[
				   "oss:PutVectors",
				   "oss:GetVectors"
				],
				"Effect":"Deny",
				"Principal":["1234567890"],
				"Resource":["acs:ossvector:cn-hangzhou:1234567890:*/*"]
			   }
			  ]
			 }`),
	}
	result, err := client.PutBucketPolicy(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to put vector bucket policy %v", err)
	}

	log.Printf("put vector bucket policy result:%#v\n", result)
}

API

調用PutBucketPolicy介面為向量Bucket設定授權策略。

RAM Policy

支援RAM策略,可以通過RAM控制台為RAM使用者或角色配置向量Bucket相關的許可權,RAM策略支援到索引(Index)層級的資源粒度。

情境 1:授予 RAM 使用者對指定向量索引的完全許可權

{                                                                           
   "Version": "1",                                                             
   "Statement": [                                                              
     {                                                                         
       "Effect": "Allow",                                                      
       "Action": "*",                                                      
       "Resource": [                                                           
         "acs:ossvector:*:*:my-vector-bucket/my-index"                         
       ]                                                                       
     }                                                                         
   ]                                                                           
 } 

情境 2:授予 RAM 使用者對某個向量 Bucket 的完全控制許可權

  {                                                                             
    "Version": "1",                                                             
    "Statement": [                                                              
      {                                                                         
        "Effect": "Allow",                                                      
        "Action": "*",                                                      
        "Resource": [                                                           
          "acs:ossvector:*:*:my-vector-bucket",                                 
          "acs:ossvector:*:*:my-vector-bucket/*"                                
        ]                                                                       
      }                                                                         
    ]                                                                           
  } 

日誌管理

支援訪問日誌功能,可將訪問記錄轉存到指定的OSS儲存桶中,用於安全審計、效能分析和故障排查。

控制台

  1. 向量Bucket頁面,單擊目標Bucket,在左側導覽列選擇 日誌管理 > 日誌轉存

  2. 開啟 日誌轉存 開關,並配置以下參數:

    • 目標儲存位置:選擇用於存放記錄檔的Bucket(必須與向量Bucket在同一地區)。

    • 日誌首碼:設定記錄檔的目錄和首碼,如 MyLog-

    • 授權角色:使用預設的Log Service角色AliyunOSSLoggingDefaultRole或選擇一個自訂角色。

ossutil

以下樣本展示了如何為名為examplebucket的儲存空間開啟日誌轉存功能,記錄檔首碼為MyLog-,儲存訪問日誌的Bucket為examplebucket

  • 使用JSON設定檔,bucket-logging-status.json內容如下:

    {
      "BucketLoggingStatus": {
        "LoggingEnabled": {
          "TargetBucket": "examplebucket",
          "TargetPrefix": "MyLog-",
          "LoggingRole": "AliyunOSSLoggingDefaultRole"
        }
      }
    }

    命令樣本如下:

    ossutil vectors-api put-bucket-logging --bucket examplebucket --bucket-logging-status file://bucket-logging-status.json
  • 使用JSON配置參數,命令樣本如下:

    ossutil vectors-api put-bucket-logging --bucket examplebucket --bucket-logging-status "{\"BucketLoggingStatus\":{\"LoggingEnabled\":{\"TargetBucket\":\"examplebucket\",\"TargetPrefix\":\"MyLog-\",\"LoggingRole\":\"AliyunOSSLoggingDefaultRole\"}}}"

SDK

Python

import argparse
import alibabacloud_oss_v2 as oss
import alibabacloud_oss_v2.vectors as oss_vectors

parser = argparse.ArgumentParser(description="vector put bucket logging sample")
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
parser.add_argument('--account_id', help='The account id.', required=True)
parser.add_argument('--target_bucket', help='The name of the target bucket.', required=True)

def main():
    args = parser.parse_args()

    # Loading credentials values from the environment variables
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Using the SDK's default configuration
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region
    cfg.account_id = args.account_id
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    vector_client = oss_vectors.Client(cfg)

    result = vector_client.put_bucket_logging(oss_vectors.models.PutBucketLoggingRequest(
        bucket=args.bucket,
        bucket_logging_status=oss_vectors.models.BucketLoggingStatus(
            logging_enabled=oss_vectors.models.LoggingEnabled(
                target_bucket=args.target_bucket,
                target_prefix='log-prefix',
                logging_role='AliyunOSSLoggingDefaultRole'
            )
        )
    ))

    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
    )

if __name__ == "__main__":
    main()

Go

package main

import (
	"context"
	"flag"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/vectors"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string
	bucketName string
	accountId  string
)

func init() {
	flag.StringVar(&region, "region", "", "The region in which the vector bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the vector bucket.")
	flag.StringVar(&accountId, "account-id", "", "The id of vector account.")
}

func main() {
	flag.Parse()
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	if len(accountId) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, accounId required")
	}

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region).WithAccountId(accountId)

	client := vectors.NewVectorsClient(cfg)

	request := &vectors.PutBucketLoggingRequest{
		Bucket: oss.Ptr(bucketName),
		BucketLoggingStatus: &vectors.BucketLoggingStatus{
			&vectors.LoggingEnabled{
				TargetBucket: oss.Ptr("TargetBucket"),
				TargetPrefix: oss.Ptr("TargetPrefix"),
				LoggingRole:  oss.Ptr("AliyunOSSLoggingDefaultRole"),
			},
		},
	}
	result, err := client.PutBucketLogging(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to put vector bucket logging %v", err)
	}

	log.Printf("put vector bucket logging result:%#v\n", result)
}

API

調用PutBucketLogging介面為向量Bucket開啟日誌轉存功能。

記錄檔命名規則

轉存後的記錄檔命名規則如下:

<TargetPrefix><SourceBucket>YYYY-mm-DD-HH-MM-SS-UniqueString

欄位

說明

TargetPrefix

記錄檔的檔案名稱首碼。

SourceBucket

產生訪問日誌的源Bucket名稱。

YYYY-mm-DD-HH-MM-SS

日誌的時間分區。從左至右分別表示:年、月、日、小時、分鐘和秒。當前轉存的日誌是以小時粒度存放,例如:HH 為 01 時,代表為 01 點 00 分 00 秒 - 01 點 59 分 59 秒之間的日誌資訊,同時 MM、SS 均會推送 00。

UniqueString

系統產生的字串,是記錄檔的唯一標識。

日誌的格式和樣本

  • 日誌格式

    OSS的訪問日誌包含要求者和被訪問資源的相關資訊,格式如下:

    RemoteIP Reserved Reserved Time "RequestURL" HTTPStatus SentBytes RequestTime "Referer" "UserAgent" "HostName" "RequestID" "LoggingFlag" "RequesterAliyunID" "Operation" "BucketName" "ObjectName" ObjectSize ServerCostTime "ErrorCode" RequestLength "UserID" DeltaDataSize "SyncRequest" "StorageClass" "TargetStorageClass" "TransmissionAccelerationAccessPoint" "AccessKeyID" "BucketARN"

    欄位

    樣本值

    說明

    RemoteIP

    192.168.0.1

    要求者的IP地址。

    Reserved

    -

    保留欄位,固定值為-

    Reserved

    -

    保留欄位,固定值為-

    Time

    03/Jan/2021:14:59:49 +0800

    OSS收到請求的時間。

    RequestURL

    GET /example.jpg HTTP/1.0

    包含query string的請求URL。

    OSS會忽略以x-開頭的query string參數,但這個參數會被記錄在訪問日誌中。所以您可以使用x-開頭query string參數標記一個請求,然後使用這個標記快速尋找該請求對應的日誌。

    HTTPStatus

    200

    OSS返回的HTTP狀態代碼。

    SentBytes

    999131

    請求產生的下行流量。單位:Byte。

    RequestTime

    127

    完成本次請求耗費的時間。單位:ms。

    Referer

    http://www.aliyun.com/product/oss

    請求的HTTP Referer。

    UserAgent

    curl/7.15.5

    HTTP的User-Agent頭。

    HostName

    examplebucket.oss-cn-hangzhou.aliyuncs.com

    請求訪問的目標網域名稱。

    RequestID

    5FF16B65F05BC932307A3C3C

    請求的Request ID。

    LoggingFlag

    true

    是否已開啟日誌轉存。取值如下:

    • true表示已開啟日誌轉存。

    • false表示未開啟日誌轉存。

    RequesterAliyunID

    16571836914537****

    要求者的使用者ID。取值-表示匿名訪問。

    Operation

    GetObject

    請求類型。

    BucketName

    examplebucket

    請求的目標Bucket名稱。

    ObjectName

    example.jpg

    請求的目標Object名稱。

    ObjectSize

    999131

    目標Object大小。單位:Byte。

    ServerCostTime

    88

    OSS處理本次請求所花的時間。單位:毫秒。

    ErrorCode

    -

    OSS返回的錯誤碼。取值-表示未返回錯誤碼。

    RequestLength

    302

    請求的長度。單位:Byte。

    UserID

    16571836914537****

    Bucket擁有者ID。

    DeltaDataSize

    -

    Object大小的變化量。取值-表示此次請求不涉及Object的寫入操作。

    SyncRequest

    -

    請求類型。取值如下:

    • -:一般請求。

    • cdn:CDN回源請求。

    • lifecycle:通過生命週期規則轉儲或者刪除資料的請求。

    StorageClass

    Standard

    目標Object的儲存類型。取值如下:

    • Standard:標準儲存。

    • IA:低頻訪問儲存。

    • Archive:Archive Storage。

    • Cold Archive:冷Archive Storage。

    • DeepCold Archive:深度冷Archive Storage。

    • -:未擷取到Object儲存類型。

    TargetStorageClass

    -

    是否通過生命週期規則或CopyObject轉換了Object的儲存類型。取值如下:

    • Standard:轉換為標準儲存。

    • IA:轉換為低頻訪問儲存。

    • Archive:轉換為Archive Storage。

    • Cold Archive:轉換為冷Archive Storage。

    • DeepCold Archive:轉換為深度冷Archive Storage。

    • -:不涉及Object儲存類型轉換操作。

    TransmissionAccelerationAccessPoint

    -

    通過傳輸加速網域名稱訪問目標Bucket時使用的傳輸加速存取點。例如要求者通過華東1(杭州)的存取點訪問目標Bucket時,值為cn-hangzhou

    取值-表示未使用傳輸加速網域名稱或傳輸加速存取點與目標Bucket所在地區相同。

    AccessKeyID

    LTAI****************

    要求者的AccessKey ID。

    • 通過控制台的方式發起請求時,日誌欄位中會顯示為以TMP開頭的臨時AccessKey ID。

    • 通過工具、SDK以長期密鑰的方式發起請求時,日誌欄位中顯示為常見的AccessKey ID,樣本值為LTAI****************

    • 通過STS臨時訪問憑證發起請求時,顯示為以STS開頭的臨時AccessKey ID。

    說明

    AccessKey ID欄位顯示為-,表示匿名請求。

    BucketArn

    acs:oss***************

    Bucket的全域唯一資源描述符。

  • 日誌樣本

    192.168.0.1 - - [03/Jan/2021:14:59:49 +0800] "GET /example.jpg HTTP/1.0" 200 999131 127 "http://www.aliyun.com/product/oss" "curl/7.15.5" "examplebucket.oss-cn-hangzhou.aliyuncs.com" "5FF16B65F05BC932307A3C3C" "true" "16571836914537****" "GetObject" "examplebucket" "example.jpg" 999131 88 "-" 302 "16571836914537****" - "cdn" "standard" "-" "-" "LTAI****************" "acs:oss***************"

    記錄檔轉存到OSS指定Bucket後,您可以通過Log Service對記錄檔進行分析。對記錄檔進行分析前,您需要通過資料匯入方式將OSS記錄檔匯入到Log Service。有關資料匯入的具體操作,請參見匯入OSS資料。有關Log Service分析功能的更多資訊,請參見查詢與分析概述