Erişim noktaları, paketler için bağımsız giriş noktaları sağlar. Her uygulama veya ekip için ayrı bir erişim noktası oluşturun ve ardından izinleri tek bir paket ilkesindeki karmaşık kurallardan kaçınarak bireysel olarak yönetmek için erişim noktası ilkelerini kullanın.
Nasıl çalışır
Bir erişim noktası, bir paket için proxy katmanı görevi görür. Bir tane oluşturduğunuzda, OSS isteklerdeki paket adının yerini alan benzersiz bir erişim noktası takma adı oluşturur. Her erişim noktasının kendi erişim noktası ilkesi (izin verilen eylemleri, kaynakları ve kimlikleri tanımlar) ve ağ kaynağı (internet veya belirtilen bir VPC) bulunur; bu da yalıtılmış, senaryoya dayalı erişim sağlar.
Bir kullanıcı bir erişim noktası üzerinden istekte bulunduğunda, sistem RAM ilkesi, paket ilkesi ve erişim noktası ilkesini birlikte değerlendirir. Bir istek yalnızca birleşik RAM/paket ilkeleri ve erişim noktası ilkesi Allow (İzin Ver) olarak değerlendirildiğinde başarılı olur. İzin değerlendirme mantığı.
Varsayılan olarak, bir erişim noktasının paket erişimi yoktur. Erişim noktasına pakete açıkça erişim izni vermek için paket ilkesinde oss:DataAccessPointArn, oss:DataAccessPointAccount veya oss:AccessPointNetworkOrigin koşul anahtarlarını kullanarak izin delegasyonu yapılandırın.
Hızlı başlangıç
Bir erişim noktası oluşturun, paket ilkesinde izinleri delege edin ve ardından kaynaklara erişim noktası takma adı üzerinden erişin.
Adım 1: Bir erişim noktası oluşturun
Bir erişim noktası oluşturun ve kimlerin, hangi koşullar altında, hangi OSS kaynaklarında ne tür eylemler gerçekleştirebileceğini tanımlamak için erişim noktası ilkesini yapılandırın.
Erişim Noktası Listesi sayfasına gidin ve Create Access Point öğesini tıklayın.
-
Bir Access Point Name girin, ilişkili paketi ve Network Origin seçeneğini belirleyin ve ardından İleri'yi tıklayın.
NotNetwork Origin seçeneğini VPC olarak ayarlarsanız, bir VPC ID girmeniz gerekir. VPC Kimliğini VPC Konsolu üzerinden edinebilirsiniz.
Belirtilen VPC'nin bölgesi, OSS ağ geçidi uç noktalarını destekleyen bölgelerden biri olmalıdır. Bölgeler eşleşmezse, kimlik doğrulama istekleri belirtilen VPC ile doğru şekilde ilişkilendirilemez ve bu durum kimlik doğrulama hatalarına neden olur.
-
Block Public Access seçeneğini kapatın ve bir erişim noktası ilkesi yapılandırın.
GUI
Parametre
Açıklama
Applied To
Erişimin Whole Bucket mi yoksa Specific Resources mı için yetkilendirileceğini seçin.
Resource Paths
-
Applied To seçeneğini Whole Bucket olarak ayarlarsanız, Resource Paths
accesspoint/{Erişim Noktası Adı}/*olarak ayarlanır. -
Applied To seçeneğini Specific Resources olarak ayarlarsanız, yetkilendirmek istediğiniz dizini veya tekil nesneyi girin. Birden fazla giriş ekleyebilirsiniz.
Authorized User
Hak sahibini belirtin.
-
RAM user: Mevcut Alibaba Cloud hesabına ait bir RAM kullanıcısı seçin.
Oturum açmış hesabın bir Alibaba Cloud hesabı veya paket yönetimi izinlerine ve
ListUsersiznine sahip bir RAM kullanıcısı olması gerekir. Aksi takdirde RAM kullanıcıları listelenemez. -
Other Account: Başka bir hesabın veya RAM kullanıcısının UID'sini ya da ARN'i
arn:stsile başlayan bir rol üstlenmiş kullanıcıyı girin; örneğinarn:sts::1798**:assumed-role/rol-adı/oturum-adı. Her satıra bir giriş gelecek şekilde birden fazla kullanıcıya izin verebilirsiniz.
Authorized Operation
-
Simple Settings: Yaygın yetkilendirilen işlem kombinasyonlarından birini seçin. Seçenekler arasında Read-Only (excluding ListObject), Read-Only (including ListObject), Read/Write, Full Access ve Deny Access bulunur.
-
Advanced Settings: Effect (Allow veya Reject) ve Action değerlerini özelleştirin.
Sözdizimi
Düzenleyiciye JSON biçiminde yetkilendirme ilkesini girin.
Örnek ilke:
20816353761158****kullanıcısına okuma/yazma izinleri verin .{ "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": [ "*" ] } } }] }Bir ilke belgesi Version (Sürüm) ve Statement (İfade) içerir.
Version: İlke sürümü. Bu değer sabit olarak
1şeklindedir ve değiştirilemez.-
Statement: Bir ilke kuralı. Her ifade Effect, Action, Principal, Resource ve Condition öğelerini içerir.
İlke öğesi
Açıklama
Effect
İlkenin etkisi. Geçerli değerlerAllowveDenydeğerleridir.
Action
Kaynak üzerinde gerçekleştirilecek işlem. Yıldız işareti (*) joker karakteri desteklenir.
Principal
İlkenin uygulandığı kullanıcı, hesap veya rol.
Resource
İlkenin uygulandığı kaynaklar.
Conditionİlkenin geçerli olduğu koşullar.
Birden fazla koşul belirtilirse, mantıksal VE ile değerlendirilirler; ilkenin geçerli olması için tüm koşulların karşılanması gerekir.
Tüm ilke öğeleri Yetkilendirme Söz Dizimi ve Öğeleri bölümünde tanımlanmıştır.
-
Submit öğesini tıklayın ve erişim noktasının oluşturulmasını bekleyin.
Adım 2: İzinleri delege edin
Bir erişim noktası oluşturduktan sonra, ona paket erişimi sağlamak için paket ilkesinde izin delegasyonu yapılandırın. Üç delegasyon türü mevcuttur:
oss:DataAccessPointArn: Belirli bir erişim noktası için erişim izinlerini delege eder.oss:DataAccessPointAccount: Mevcut Alibaba Cloud hesabı altındaki tüm erişim noktaları için erişim izinlerini delege eder.oss:AccessPointNetworkOrigin: Belirli bir ağ kaynağına sahip tüm erişim noktaları için erişim izinlerini delege eder.
Belirli erişim noktası
Paket Listesi sayfasına gidin ve hedef paketin adını tıklayın.
Sol gezinme bölmesinde yolunu izleyin ve ardından Add Rule by Syntax sekmesini tıklayın.
-
Edit öğesini tıklayın ve düzenleyiciye JSON biçiminde yetkilendirme ilkesini girin.
NotUID, paket adı, bölge kimliği ve erişim noktası adını gerçek değerlerinizle değiştirin. Paket ilkesinde zaten ifadeler varsa, bu kuralı
Statementdizisine ekleyin.{ "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}" ] } } }] } Paket ilkesini uygulamak için Save öğesini tıklayın.
Tüm erişim noktaları
Paket Listesi sayfasına gidin ve hedef paketin adını tıklayın.
Sol gezinme bölmesinde yolunu izleyin ve ardından Add Rule by Syntax sekmesini tıklayın.
-
Edit öğesini tıklayın ve düzenleyiciye JSON biçiminde yetkilendirme ilkesini girin.
NotUID ve paket adını gerçek değerlerinizle değiştirin. Paket ilkesinde zaten ifadeler varsa, bu kuralı
Statementdizisine ekleyin.{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": [ "oss:*" ], "Principal": [ "*" ], "Resource": [ "acs:oss:*:179882766168****:example-bucket", "acs:oss:*:179882766168****:example-bucket/*" ], "Condition": { "StringEquals": { "oss:DataAccessPointAccount": [ "179882766168****" ] } } }] } Paket ilkesini uygulamak için Save öğesini tıklayın.
Ağ kaynağına göre
Paket Listesi sayfasına gidin ve hedef paketin adını tıklayın.
Sol gezinme bölmesinde yolunu izleyin ve ardından Add Rule by Syntax sekmesini tıklayın.
-
Edit öğesini tıklayın ve düzenleyiciye JSON biçiminde yetkilendirme ilkesini girin.
NotUID ve paket adını gerçek değerlerinizle değiştirin. Paket ilkesinde zaten ifadeler varsa, bu kuralı
Statementdizisine ekleyin.oss:AccessPointNetworkOrigindeğeriinternetolarak ayarlandığında, izinler ağ kaynağı internet olan tüm erişim noktalarına delege edilir. Bu yapılandırma hem internetten hem de VPC'lerden erişime izin verir. Erişimi yalnızca VPC'lerle sınırlamak için değerivpcolarak değiştirin.
{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": [ "oss:*" ], "Principal": [ "*" ], "Resource": [ "acs:oss:*:179882766168****:example-bucket", "acs:oss:*:179882766168****:example-bucket/*" ], "Condition": { "StringEquals": { "oss:AccessPointNetworkOrigin": [ "internet" ] } } }] } Paket ilkesini uygulamak için Save öğesini tıklayın.
"Paket ilkesi genel erişim anlamları içeriyor" gibi bir hata alırsanız, izinleri delege etmeden önce paket için Block Public Access seçeneğini kapatın.
Adım 3: Kaynaklara erişin
Yetkilendirilmiş kimlikler (RAM kullanıcıları gibi) OSS kaynaklarına erişmek için erişim noktası takma adını kullanır.
SDK
Yalnızca Java ve Python SDK'ları erişim noktası takma adlarını destekler.
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 example: Download an object to a local file by using an access point.
*/
public class DownloadObjectWithAccessPoint {
public static void main(String[] args) {
// Create an OSS client.
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();
// Download the object to a local file by using an access point alias.
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("Download complete: " + key + " -> " + file.getPath());
// Close the client.
try {
client.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""OSS Python SDK V2 example: Download an object to a local file by using an access point."""
import alibabacloud_oss_v2 as oss
def main() -> None:
"""Main function"""
# Create an OSS client.
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)
# Download the object to a local file by using an access point alias.
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"Download complete: {key} -> {file_path}")
if __name__ == "__main__":
main()
ossutil
ossutil komutlarında paket adı olarak erişim noktası takma adını kullanın.
ossutil cp oss://example-ap-b156d01070a10322664d6704cd1d47****-ossalias/example.jpg /tmp
REST API
Host başlığında erişim noktası takma adını kullanın:
GET /ObjectName HTTP/1.1
Host: example-ap-b156d01070a10322664d6704cd1d47****-ossalias.oss-{region-id}.aliyuncs.com
Date: GMT Date
Authorization: SignatureValue
Erişim noktanızın bağlantı ve izin yapılandırmasını hızlıca doğrulamak için curl kullanabilirsiniz:
curl -v \
-H "Date: <GMT time>" \
-H "Authorization: OSS <AccessKeyId>:<Signature>" \
"https://<access-point-alias>.oss-<region-id>.oss-accesspoint.aliyuncs.com/<ObjectName>" \
-o <local-file-path>
Örnek senaryo
Bu örnekte, büyük veri analitiği senaryosunda birden çok departman için güvenli ve yalıtılmış erişim sağlamak amacıyla erişim noktaları kullanılmaktadır.
Senaryo
Bir şirket (Alibaba Cloud hesap UID'si: 137918634953****) merkezi olarak toplanan verileri examplebucket adlı bir pakette saklar. On farklı iş departmanının bu pakete aşağıdaki gereksinimlerle erişmesi gerekmektedir:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Çözüm tasarımı
Farklı erişim senaryoları için üç erişim noktası tasarlayın; izin kontrolü ve ağ kısıtlamaları için erişim noktası ilkelerini kullanın.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Erişim noktası ilkesi
ap-01: Yalnızca okuma erişimi
{
"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: Okuma/yazma erişimi
{
"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: VPC okuma/yazma erişimi
{
"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/*"
]
}
}
}]
}
Paket ilkesi delegasyonu
Bu senaryoda, aynı hesap altındaki tüm erişim noktaları için birleşik delegasyon amacıyla oss:DataAccessPointAccount kullanılır. Daha ayrıntılı kontrol için her erişim noktası bazında delegasyon yapmak üzere oss:DataAccessPointArn kullanın.
Birleşik delegasyon
{
"Version": "1",
"Statement": [{
"Effect": "Allow",
"Action": [
"oss:*"
],
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:137918634953****:examplebucket",
"acs:oss:*:137918634953****:examplebucket/*"
],
"Condition": {
"StringEquals": {
"oss:DataAccessPointAccount": [
"137918634953****"
]
}
}
}]
}
Bireysel delegasyon
{
"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"
]
}
}
}]
}
İzin değerlendirme mantığı
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Allow: İstek bir Allow ifadesiyle eşleşir ve hiçbir Deny ifadesiyle eşleşmez.
Açık red: İstek bir Deny ifadesiyle eşleşir. Deny, Allow'a göre önceliklidir.
Zımni red: İstek ne bir Allow ne de bir Deny ifadesiyle eşleşir. Varsayılan olarak, bir RAM kimliğinin izni yoktur. Açıkça izin verilmeyen herhangi bir eylem zımni olarak reddedilir.
Kotalar ve sınırlamalar
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SSS
Erişim noktası ilkesi IP izin listelerini destekliyor mu?
Evet. IP tabanlı erişim kontrolü için erişim noktası ilkenize bir acs:SourceIp koşulu ekleyin. Örnek:
{
"Version": "1",
"Statement": [{
"Effect": "Allow",
"Action": ["oss:GetObject"],
"Principal": ["*"],
"Resource": ["acs:oss:{region-id}:179882766168****:accesspoint/{ap-name}/object/*"],
"Condition": {
"IpAddress": {
"acs:SourceIp": ["192.168.1.0/24", "203.0.113.5"]
}
}
}]
}
Bu ilke, yalnızca belirtilen IP'lerden veya CIDR aralıklarından gelen isteklerin erişim noktası üzerinden kaynaklara erişmesine izin verir. Örnekte tek bir IP'yi belirtmek için önerilen yöntem olan (maske olmadan çıplak IP) "203.0.113.5" kullanılmıştır. Tek bir IP için CIDR gösterimini (örneğin /32) tercih ederseniz uygun koşul operatörünü seçin:
|
|
|
|
|
|
|
|
|
|
|
|
IpAddress CIDR aralıklarını değerlendirirken sınır IP'lerini (ağ ve yayın adresleri) hariç tutar. /32 maskesiyle IP'nin kendisi sınır adresidir ve hariç tutulur, bu da ilkenin etkili olmamasına neden olur. Bunun yerine IpAddressIncludeBorder kullanın:
"Condition": {
"IpAddressIncludeBorder": {
"acs:SourceIp": ["203.0.113.5/32"]
}
}
Oluşturma için gerekli izinler
Aşağıdaki izinler gereklidir: oss:CreateAccessPoint, oss:GetAccessPoint, oss:DeleteAccessPoint, oss:ListAccessPoints, oss:PutAccessPointPolicy, oss:GetAccessPointPolicy, oss:DeleteAccessPointPolicy, oss:PutBucketPolicy, oss:GetBucketPolicy ve oss:DeleteBucketPolicy.