ベクターバケットは、データセキュリティ、コンプライアンス、および可観測性を確保するためのアクセス制御およびログ管理機能を提供します。
アクセス制御
ベクターバケットでは、バケットポリシーおよびRAM ポリシーをサポートしています。
バケットポリシー:他の Alibaba Cloud アカウント、RAM ユーザー、または匿名ユーザーが指定されたベクターリソースにアクセスできるよう、バケットにアタッチされるリソースベースの権限付与ポリシーです。
RAM ポリシー:RAM ユーザー、ユーザーグループ、またはロールにアタッチされる ID ベースの権限付与ポリシーで、対象のベクターバケットリソースへのアクセス許可範囲を定義します。
サポートされる操作
API | 操作 | 説明 |
oss:PutVectorBucket | ベクターバケットを作成します。 | |
oss:GetVectorBucket | ベクターバケットの詳細情報を取得します。 | |
oss:ListVectorBuckets | リクエスト元が所有するすべてのベクターバケットを一覧表示します。 | |
oss:DeleteVectorBucket | ベクターバケットを削除します。 | |
oss:PutBucketLogging | ベクターバケットのログ記録を有効化します。 | |
oss:PutObject | ログ記録を有効化した場合、ソースベクターバケットからターゲットバケットへログを書き込むために必要です。 | |
oss:GetBucketLogging | ベクターバケットのログ記録構成を取得します。 | |
oss:DeleteBucketLogging | ベクターバケットのログ記録を無効化します。 | |
oss:PutBucketPolicy | 指定されたベクターバケットに対する権限付与ポリシーを設定します。 | |
oss:GetBucketPolicy | 指定されたベクターバケットの権限付与ポリシーを取得します。 | |
oss:DeleteBucketPolicy | 指定されたベクターバケットの権限付与ポリシーを削除します。 | |
oss:PutVectorIndex | ベクトルインデックスを作成します。 | |
oss:GetVectorIndex | ベクトルインデックスの詳細情報を取得します。 | |
oss:ListVectorIndexes | ベクターバケット内のすべてのベクトルインデックスを一覧表示します。 | |
oss:DeleteVectorIndex | ベクトルインデックスを削除します。 | |
oss:PutVectors | ベクトルデータを書き込みます。 | |
oss:GetVectors | 指定されたベクトルデータを取得します。 | |
oss:ListVectors | ベクトルインデックス内のすべてのベクトルデータを一覧表示します。 | |
oss:QueryVectors | ベクトル類似検索を実行します。 | |
oss:DeleteVectors | ベクトルインデックスから指定されたベクトルデータを削除します。 |
リソース形式
リソースレベル | フォーマット | 例 |
すべてのベクターリソース |
|
|
ベクターバケット |
|
|
ベクトルインデックス |
|
|
バケットポリシー
バケットポリシーを使用して、RAM ユーザーおよび他のアカウントが指定されたベクターリソースにアクセスできるように権限を付与します。
コンソール
ベクターバケットページで、対象のバケットをクリックします。左側のナビゲーションウィンドウから、アクセスの制御 > バケット権限付与ポリシー を選択します。
構文によるポリシーの追加 をクリックし、ポリシー編集画面でポリシーを入力します。たとえば、UID が `11********80****` のユーザーに、`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" ] } ] }OK をクリックします。
ossutil
以下の例では、`vector-policy.json` という名前の 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 構成パラメーターを使用してベクターバケットのバケットポリシーを設定できます:
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(®ion, "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 the 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, accountId 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 API を呼び出して、ベクターバケットのバケットポリシーを設定します。
RAM ポリシー
RAM コンソール (RAM コンソール) を使用して、RAM ユーザーまたはロールに対してベクターバケットの権限を RAM ポリシーで設定できます。これらのポリシーは、インデックスレベルでのリソース粒度をサポートします。
シナリオ 1:特定のベクトルインデックスに対する RAM ユーザーの完全な権限を付与する
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": [
"acs:ossvector:*:*:my-vector-bucket/my-index"
]
}
]
} シナリオ 2:ベクターバケットに対する RAM ユーザーの完全制御を付与する
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": [
"acs:ossvector:*:*:my-vector-bucket",
"acs:ossvector:*:*:my-vector-bucket/*"
]
}
]
} ログ管理
アクセスログを有効化すると、アクセス記録が指定された OSS バケットに保存されます。これらのログは、セキュリティ監査、パフォーマンス分析、トラブルシューティングに活用できます。
コンソール
ベクターバケットページで、対象のバケットをクリックします。左側のナビゲーションウィンドウから、ログ管理 > ログ記録 を選択します。
ログ記録 スイッチをオンにして、以下のパラメーターを設定します:
送信先ストレージ場所:ログファイルを保存するバケットを選択します。このバケットは、ベクターバケットと同じリージョンにある必要があります。
ログプレフィックス:ログファイルのディレクトリおよびプレフィックスを設定します(例:
MyLog-)。権限付与ロール:デフォルトのログ記録ロール
AliyunOSSLoggingDefaultRoleを使用するか、カスタムロールを選択します。
ossutil
以下の例では、examplebucket という名前のバケットに対してロギングを有効にする方法を示します。ログファイルのプレフィックスは MyLog- で、アクセスログは 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="Sample for enabling log storage for a vector bucket")
parser.add_argument('--region', help='The region where the bucket is located.', required=True)
parser.add_argument('--bucket', help='The bucket name.', required=True)
parser.add_argument('--endpoint', help='The endpoint to access OSS.')
parser.add_argument('--account_id', help='The account ID.', required=True)
parser.add_argument('--target_bucket', help='The destination bucket for storing logs.', 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(®ion, "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 the 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, accountId 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 API を呼び出して、ベクターバケットのログ記録を有効化します。
ログファイルの命名規則
保存されるログファイルの命名規則は以下のとおりです:
<TargetPrefix><SourceBucket>YYYY-mm-DD-HH-MM-SS-UniqueString
|
フィールド |
説明 |
|
TargetPrefix |
ログファイル名のプレフィックスです。 |
|
SourceBucket |
アクセスログを生成するソースバケットの名前です。 |
|
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
クエリ文字列を含むリクエスト URL です。
OSS は、
x-で始まるクエリ文字列パラメーターを無視しますが、これらのパラメーターはアクセスログに記録されます。x-で始まるクエリ文字列パラメーターを使用してリクエストにマーキングし、そのマーキングを使って対応するログをすばやく検索できます。HTTPStatus
200
OSS が返す HTTP ステータスコードです。
SentBytes
999131
リクエストによって発生したダウンストリームトラフィック(バイト単位)です。
RequestTime
127
リクエスト完了までに要した時間(ミリ秒単位)です。
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
リクエスト ID です。
LoggingFlag
true
ログ記録が有効かどうかを示します。有効な値は以下のとおりです:
-
true:有効。
-
false:無効。
RequesterAliyunID
16571836914537****
リクエスターのユーザー ID です。- の場合は、匿名アクセスを意味します。
Operation
GetObject
リクエストの種類です。
BucketName
examplebucket
宛先バケットの名前です。
ObjectName
example.jpg
宛先オブジェクトの名前です。
ObjectSize
999131
宛先オブジェクトのサイズ(バイト単位)です。
ServerCostTime
88
OSS がリクエストを処理するのに要した時間(ミリ秒単位)です。
ErrorCode
-
OSS が返すエラーコードです。- の場合は、エラーコードが返されなかったことを意味します。
RequestLength
302
リクエストの長さ(バイト単位)です。
UserID
16571836914537****
バケット所有者の ID です。
DeltaDataSize
-
オブジェクトサイズの変化量です。- の場合は、リクエストがオブジェクト書き込み操作を伴わないことを意味します。
SyncRequest
-
リクエストの種類です。有効な値は以下のとおりです:
-
-:一般リクエスト。
-
cdn:CDN オリジンリクエスト。
-
lifecycle:ライフサイクルルールを通じて行われるデータダンプまたは削除リクエスト。
StorageClass
Standard
宛先オブジェクトのストレージクラスです。有効な値は以下のとおりです:
-
Standard:標準。
-
IA:低頻度アクセス。
-
Archive:アーカイブストレージ。
-
コールドアーカイブ: コールドアーカイブ。
-
DeepCold Archive:ディープコールドアーカイブストレージ。
-
-:オブジェクトのストレージクラスが取得できませんでした。
TargetStorageClass
-
ライフサイクルルールまたは CopyObject 操作によってオブジェクトのストレージクラスが変更されたかどうかを示します。有効な値は以下のとおりです:
-
Standard:ストレージクラスが「標準」に変更されました。
-
IA:ストレージクラスが「低頻度アクセス」に変更されました。
-
Archive:ストレージクラスが「アーカイブストレージ」に変更されました。
-
Cold Archive:ストレージクラスが「コールドアーカイブストレージ」に変更されました。
-
DeepCold Archive:ストレージクラスが「ディープコールドアーカイブストレージ」に変更されました。
-
-:ストレージクラス変換操作は関係ありません。
TransmissionAccelerationAccessPoint
-
転送アクセラレーションドメイン名を介して宛先バケットにアクセスする際に使用されるアクセラレーションエンドポイントです。たとえば、リクエスターが中国(杭州)のエンドポイントを介して宛先バケットにアクセスする場合、値は cn-hangzhou になります。
- の場合は、転送アクセラレーションドメイン名が使用されていないか、アクセラレーションエンドポイントが宛先バケットと同じリージョンであることを意味します。
AccessKeyID
LTAI****************
リクエスターの AccessKey ID です。
-
リクエストがコンソールから開始された場合、ログフィールドには TMP で始まる一時的な AccessKey ID が表示されます。
-
リクエストが長期キーを使用するツールまたは SDK から開始された場合、ログフィールドには一般的な AccessKey ID が表示されます(例:
LTAI****************)。 -
リクエストがセキュリティトークンサービス(STS)からの一時的アクセス認証情報を使用して開始された場合、STS で始まる一時的な AccessKey ID が表示されます。
説明匿名リクエストの場合、AccessKey ID フィールドには - が表示されます。
BucketArn
acs:oss***************
バケットのグローバルに一意なリソース記述子です。
-
-
ログの例
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 バケットに保存された後は、Simple Log Service を使用して分析できます。分析を実行する前に、ログファイルを Simple Log Service にインポートする必要があります。データのインポート方法については、「OSS データのインポート」をご参照ください。Simple Log Service の分析機能について詳しくは、「クエリおよび分析の概要」をご参照ください。