Les points d'accès offrent des points d'entrée indépendants pour les buckets. Créez un point d'accès distinct pour chaque application ou équipe, puis utilisez des politiques de point d'accès pour gérer les autorisations individuellement, évitant ainsi des règles complexes dans une seule politique de bucket.
Fonctionnement
Un point d'accès agit comme une couche proxy pour un bucket. Lorsque vous en créez un, OSS génère un alias de point d'accès unique qui remplace le nom du bucket dans les requêtes. Chaque point d'accès dispose de sa propre politique de point d'accès (définissant les actions, ressources et identités autorisées) et de son origine réseau (Internet ou un VPC spécifié) pour un accès isolé adapté à différents scénarios.
Lorsqu'un utilisateur effectue une requête via un point d'accès, le système évalue conjointement la politique RAM, la politique de bucket et la politique de point d'accès. Une requête aboutit uniquement si les politiques RAM/bucket combinées et la politique de point d'accès sont toutes deux évaluées à Allow. Consultez la logique d'évaluation des autorisations.
Par défaut, un point d'accès n'a aucun accès au bucket. Configurez la délégation d'autorisations dans la politique de bucket en utilisant les clés de condition oss:DataAccessPointArn, oss:DataAccessPointAccount ou oss:AccessPointNetworkOrigin pour accorder explicitement l'accès au bucket au point d'accès.
Démarrage rapide
Créez un point d'accès, déléguez les autorisations dans la politique de bucket, puis accédez aux ressources via l'alias du point d'accès.
Étape 1 : Créer un point d'accès
Créez un point d'accès et configurez sa politique pour définir qui peut effectuer quelles actions sur quelles ressources OSS et sous quelles conditions.
Accédez à la liste des points d'accès et cliquez sur Create Access Point.
-
Saisissez un Access Point Name, sélectionnez le bucket associé et l'Network Origin, puis cliquez sur Next.
RemarqueSi vous définissez l'Network Origin sur VPC, vous devez saisir un VPC ID. Vous pouvez obtenir l'ID VPC depuis la console VPC.
La région du VPC spécifié doit faire partie des régions prenant en charge les endpoints de passerelle OSS. Si les régions ne correspondent pas, les requêtes d'authentification ne peuvent pas être correctement associées au VPC spécifié, ce qui entraîne des échecs d'authentification.
-
Désactivez l'option Block Public Access et configurez une politique de point d'accès.
Interface graphique
Paramètre
Description
Applied To
Sélectionnez si vous souhaitez autoriser l'accès au Whole Bucket ou à des Specific Resources.
Resource Paths
-
Si vous définissez Applied To sur Whole Bucket, le champ Resource Paths est défini sur
accesspoint/{Access Point Name}/*. -
Si vous définissez Applied To sur Specific Resources, saisissez le répertoire ou l'objet individuel à autoriser. Vous pouvez ajouter plusieurs entrées.
Authorized User
Spécifiez le destinataire de l'autorisation.
-
RAM user : Sélectionnez un utilisateur RAM appartenant au compte Alibaba Cloud actuel.
Le compte connecté doit être un compte Alibaba Cloud ou un utilisateur RAM disposant des autorisations de gestion de bucket et de l'autorisation
ListUsers. Sinon, les utilisateurs RAM ne peuvent pas être listés. -
Other Account : Saisissez l'UID d'un autre compte ou utilisateur RAM, ou d'un utilisateur ayant assumé un rôle dont l'ARN commence par
arn:sts, par exemplearn:sts::1798**:assumed-role/role-name/session-name. Vous pouvez accorder des autorisations à plusieurs utilisateurs, avec une entrée par ligne.
Authorized Operation
-
Simple Settings : Sélectionnez une combinaison courante d'opérations autorisées. Les options incluent Read-Only (excluding ListObject), Read-Only (including ListObject), Read/Write, Full Access et Deny Access.
-
Advanced Settings : Personnalisez l'Effect (Allow ou Reject) et l'Action.
Syntaxe
Saisissez la politique d'autorisation au format JSON dans l'éditeur.
Exemple de politique : Accorder des autorisations de lecture/écriture à l'utilisateur
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": [ "*" ] } } }] }Un document de politique contient Version et Statement.
Version : La version de la politique. Cette valeur est fixée à
1et ne peut pas être modifiée.-
Statement : Une règle de politique. Chaque instruction contient Effect, Action, Principal, Resource et Condition.
Élément de politique
Description
Effect
L'effet de la politique. Les valeurs valides sont
AllowetDeny.Action
L'opération à effectuer sur la ressource. Le caractère générique astérisque (
*) est pris en charge.Principal
L'utilisateur, le compte ou le rôle auquel la politique s'applique.
Resource
Les ressources auxquelles la politique s'applique.
Condition
Les conditions dans lesquelles la politique prend effet.
Si plusieurs conditions sont spécifiées, elles sont évaluées à l'aide d'un ET logique ; toutes les conditions doivent être remplies pour que la politique prenne effet.
Tous les éléments de politique sont définis dans la syntaxe et les éléments d'autorisation.
-
Cliquez sur Submit et attendez la création du point d'accès.
Étape 2 : Déléguer les autorisations
Après avoir créé un point d'accès, configurez la délégation d'autorisations dans la politique de bucket pour lui accorder l'accès au bucket. Trois types de délégation sont disponibles :
oss:DataAccessPointArn: Délègue les autorisations d'accès pour un point d'accès spécifique.oss:DataAccessPointAccount: Délègue les autorisations d'accès pour tous les points d'accès sous le compte Alibaba Cloud actuel.oss:AccessPointNetworkOrigin: Délègue les autorisations d'accès pour tous les points d'accès ayant une origine réseau spécifique.
Point d'accès spécifique
Accédez à la liste des buckets et cliquez sur le nom du bucket cible.
Dans le volet de navigation de gauche, choisissez , puis cliquez sur l'onglet Add Rule by Syntax.
-
Cliquez sur Edit et saisissez la politique d'autorisation au format JSON dans l'éditeur.
RemarqueRemplacez l'UID, le nom du bucket, l'ID de région et le nom du point d'accès par vos valeurs réelles. Si la politique de bucket contient déjà des instructions, ajoutez cette règle au tableau
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}" ] } } }] } Cliquez sur Save pour appliquer la politique de bucket.
Tous les points d'accès
Accédez à la liste des buckets et cliquez sur le nom du bucket cible.
Dans le volet de navigation de gauche, choisissez , puis cliquez sur l'onglet Add Rule by Syntax.
-
Cliquez sur Edit et saisissez la politique d'autorisation au format JSON dans l'éditeur.
RemarqueRemplacez l'UID et le nom du bucket par vos valeurs réelles. Si la politique de bucket contient déjà des instructions, ajoutez cette règle au tableau
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****" ] } } }] } Cliquez sur Save pour appliquer la politique de bucket.
Par origine réseau
Accédez à la liste des buckets et cliquez sur le nom du bucket cible.
Dans le volet de navigation de gauche, choisissez , puis cliquez sur l'onglet Add Rule by Syntax.
-
Cliquez sur Edit et saisissez la politique d'autorisation au format JSON dans l'éditeur.
RemarqueRemplacez l'UID et le nom du bucket par vos valeurs réelles. Si la politique de bucket contient déjà des instructions, ajoutez cette règle au tableau
Statement.Lorsque
oss:AccessPointNetworkOriginest défini surinternet, les autorisations sont déléguées à tous les points d'accès dont l'origine réseau est Internet. Cette configuration permet l'accès depuis Internet et les VPC. Pour restreindre l'accès aux seuls VPC, modifiez la valeur envpc.
{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": [ "oss:*" ], "Principal": [ "*" ], "Resource": [ "acs:oss:*:179882766168****:example-bucket", "acs:oss:*:179882766168****:example-bucket/*" ], "Condition": { "StringEquals": { "oss:AccessPointNetworkOrigin": [ "internet" ] } } }] } Cliquez sur Save pour appliquer la politique de bucket.
Si vous recevez une erreur telle que « The bucket policy contains public access semantics », désactivez Block Public Access pour le bucket avant de déléguer les autorisations.
Étape 3 : Accéder aux ressources
Les identités autorisées (telles que les utilisateurs RAM) utilisent l'alias du point d'accès pour accéder aux ressources OSS.
SDK
Seuls les SDK Java et Python prennent en charge les alias de point d'accès.
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
Utilisez l'alias du point d'accès comme nom de bucket dans les commandes ossutil.
ossutil cp oss://example-ap-b156d01070a10322664d6704cd1d47****-ossalias/example.jpg /tmp
API REST
Utilisez l'alias du point d'accès dans l'en-tête Host :
GET /ObjectName HTTP/1.1
Host: example-ap-b156d01070a10322664d6704cd1d47****-ossalias.oss-{region-id}.aliyuncs.com
Date: GMT Date
Authorization: SignatureValue
Vous pouvez utiliser curl pour vérifier rapidement la connectivité et la configuration des autorisations de votre point d'accès :
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>
Exemple de scénario
Cet exemple utilise des points d'accès pour fournir un accès sécurisé et isolé à plusieurs départements dans un scénario d'analyse de big data.
Scénario
Une entreprise (UID de compte Alibaba Cloud : 137918634953****) stocke des données collectées de manière centralisée dans un bucket nommé examplebucket. Dix départements commerciaux différents doivent accéder à ce bucket avec les exigences suivantes :
|
Département |
Portée d'accès |
Autorisations |
Origine réseau |
|
Départements 1 à 3 |
Répertoire |
Lecture seule |
Internet |
|
Département 4 |
Bucket entier |
Lecture/Écriture |
Internet |
|
Départements 5 à 10 |
Répertoire |
Lecture/Écriture |
VPC uniquement |
Conception de la solution
Concevez trois points d'accès pour les différents scénarios d'accès, en utilisant des politiques de point d'accès pour le contrôle des autorisations et les restrictions réseau.
|
Point d'accès |
Paramètre |
Origine réseau |
Destinataire |
Ressource autorisée |
Autorisations |
|
Point d'accès 1 |
|
Internet |
Utilisateurs RAM pour les départements 1 à 3 (UID : |
|
Lecture seule |
|
Point d'accès 2 |
|
Internet |
Utilisateurs RAM pour le département 4 (UID : |
|
Lecture/Écriture |
|
Point d'accès 3 |
|
VPC |
Utilisateurs RAM pour les départements 5 à 10 (UID : |
|
Lecture/Écriture |
Politique de point d'accès
ap-01 : Accès en lecture seule
{
"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 : Accès en lecture/écriture
{
"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 : Accès en lecture/écriture via 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/*"
]
}
}
}]
}
Délégation de la politique de bucket
Ce scénario utilise oss:DataAccessPointAccount pour une délégation unifiée sur tous les points d'accès sous le même compte. Pour un contrôle plus granulaire, utilisez oss:DataAccessPointArn pour déléguer par point d'accès.
Délégation unifiée
{
"Version": "1",
"Statement": [{
"Effect": "Allow",
"Action": [
"oss:*"
],
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:137918634953****:examplebucket",
"acs:oss:*:137918634953****:examplebucket/*"
],
"Condition": {
"StringEquals": {
"oss:DataAccessPointAccount": [
"137918634953****"
]
}
}
}]
}
Délégation individuelle
{
"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"
]
}
}
}]
}
Logique d'évaluation des autorisations
|
Résultat des politiques RAM et de bucket |
Résultat de la politique de point d'accès |
Résultat final |
|
Allow |
Allow |
Allow |
|
Allow |
Deny |
Deny |
|
Allow |
Implicit Deny |
Implicit Deny |
|
Deny |
Allow |
Deny |
|
Deny |
Deny |
Deny |
|
Deny |
Implicit Deny |
Deny |
|
Implicit Deny |
Allow |
Implicit Deny |
|
Implicit Deny |
Deny |
Deny |
|
Implicit Deny |
Implicit Deny |
Implicit Deny |
Allow : La requête correspond à une instruction Allow et à aucune instruction Deny.
Refus explicite : La requête correspond à une instruction Deny. Deny est prioritaire sur Allow.
Refus implicite : La requête ne correspond ni à une instruction Allow ni à une instruction Deny. Par défaut, une identité RAM n'a aucune autorisation. Toute action non explicitement autorisée est implicitement refusée.
Quotas et limitations
|
Limitation |
Description |
|
Méthode de création |
Créez des points d'accès à l'aide de la console OSS, de l'API ou d'ossutil. Les SDK ne sont pas pris en charge pour la création. |
|
Nombre de points d'accès |
Maximum de 1 000 points d'accès par compte Alibaba Cloud. |
|
Règles de modification |
Après la création, seule la politique de point d'accès peut être modifiée. Le nom et l'alias sont immuables. |
|
Méthode d'accès |
L'accès anonyme n'est pas pris en charge. |
FAQ
La politique de point d'accès prend-elle en charge les listes d'autorisation IP ?
Oui. Ajoutez une condition acs:SourceIp à votre politique de point d'accès pour le contrôle d'accès basé sur l'IP. Exemple :
{
"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"]
}
}
}]
}
Cette politique autorise uniquement les requêtes provenant des adresses IP ou plages CIDR spécifiées à accéder aux ressources via le point d'accès. L'exemple utilise "203.0.113.5" (une adresse IP brute sans masque), ce qui est la méthode recommandée pour spécifier une seule adresse IP. Si vous préférez la notation CIDR (telle que /32 pour une seule adresse IP), choisissez l'opérateur de condition approprié :
|
Opérateur de condition |
Comportement |
Cas d'utilisation |
|
|
Exclut les adresses limites (adresses réseau et de diffusion) |
Adresses IP brutes ou plages /1~/31 |
|
|
Inclut les adresses limites |
Lors de l'utilisation de /32 pour une seule adresse IP |
IpAddress exclut les adresses limites (adresses réseau et de diffusion) lors de l'évaluation des plages CIDR. Avec un masque /32, l'adresse IP elle-même est l'adresse limite et est exclue, ce qui rend la politique inefficace. Utilisez plutôt IpAddressIncludeBorder :
"Condition": {
"IpAddressIncludeBorder": {
"acs:SourceIp": ["203.0.113.5/32"]
}
}
Autorisations requises pour la création
Les autorisations suivantes sont requises : oss:CreateAccessPoint, oss:GetAccessPoint, oss:DeleteAccessPoint, oss:ListAccessPoints, oss:PutAccessPointPolicy, oss:GetAccessPointPolicy, oss:DeleteAccessPointPolicy, oss:PutBucketPolicy, oss:GetBucketPolicy et oss:DeleteBucketPolicy.