Une liste de contrôle d'accès (ACL) de bucket gère l'accès au niveau du bucket dans OSS en définissant le bucket comme public ou privé. Les objets téléchargés sans ACL spécifiée héritent de l'ACL du bucket.
Fonctionnement
Les ACL de bucket utilisent des valeurs prédéfinies pour contrôler l'accès au bucket.
|
Valeur |
Description |
|
private (par défaut) |
Privé. Seul le propriétaire du bucket ou les utilisateurs autorisés peuvent lire et écrire des objets dans le bucket. |
|
public-read |
Lecture publique. Seul le propriétaire du bucket ou les utilisateurs autorisés peuvent écrire des objets, mais tout le monde, y compris les utilisateurs anonymes, peut les lire. |
|
public-read-write |
Lecture/écriture publiques. Tout le monde, y compris les utilisateurs anonymes, peut lire et écrire des objets dans le bucket. |
public-read-write : permet à toute personne sur Internet de lire et d'écrire des objets dans le bucket. Il s'agit du paramètre ACL présentant le risque le plus élevé. Évitez de l'utiliser sauf si cela est spécifiquement requis.
public-read : permet à toute personne sur Internet de lire des objets dans le bucket, ce qui peut entraîner une exposition des données et des frais inattendus. Utilisez cette option avec prudence.
Définir une ACL de bucket
Lorsque vous créez un bucket, Block Public Access est activé par défaut et l'ACL est définie sur private. Pour utiliser public-read ou public-read-write, désactivez d'abord Block Public Access.
Console
Accédez à la liste Buckets et cliquez sur le bucket cible.
Dans le volet de navigation de gauche, choisissez Permission Control > ACL.
Cliquez sur Settings et modifiez l'ACL du bucket selon vos besoins.
Cliquez sur Save.
ossutil CLI
Exécutez la commande put-bucket-acl dans ossutil 2,0 pour définir l'ACL du bucket.
ossutil api put-bucket-acl --bucket example-bucket --acl private
SDK
Les exemples suivants montrent comment définir une ACL de bucket avec des SDK courants. D'autres exemples de SDK sont disponibles dans la référence SDK.
// This sample code shows how to set the access control list (ACL) for a bucket.
// Before you run the sample code, configure the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables.
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.*;
public class SetBucketAcl {
public static void main(String[] args) {
String bucketName = "example-bucket";
String accessKeyId = System.getenv("OSS_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("OSS_ACCESS_KEY_SECRET");
CredentialsProvider provider = new StaticCredentialsProvider(accessKeyId, accessKeySecret);
try (OSSClient client = OSSClient.newBuilder()
.credentialsProvider(provider)
.region("<region-id>")
.build()) {
// Set the bucket ACL to private.
// Valid values: "private", "public-read", and "public-read-write".
PutBucketAclRequest putRequest = PutBucketAclRequest.newBuilder()
.bucket(bucketName)
.acl("private")
.build();
PutBucketAclResult putResult = client.putBucketAcl(putRequest);
System.out.println("Bucket ACL set successfully. RequestId: " + putResult.requestId());
// Get the bucket ACL.
GetBucketAclRequest getRequest = GetBucketAclRequest.newBuilder()
.bucket(bucketName)
.build();
GetBucketAclResult getResult = client.getBucketAcl(getRequest);
System.out.println("Current bucket ACL: " + getResult.accessControlPolicy().accessControlList().grant());
} catch (Exception e) {
System.err.println("Operation failed: " + e.getMessage());
}
}
}
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# This sample code shows how to set the access control list (ACL) for a bucket.
# Before you run the sample code, configure the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables.
import alibabacloud_oss_v2 as oss
def main() -> None:
bucket_name = "example-bucket"
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
cfg.region = "<region-id>"
client = oss.Client(cfg)
# Set the bucket ACL to private.
# Valid values: "private", "public-read", and "public-read-write".
put_result = client.put_bucket_acl(oss.PutBucketAclRequest(
bucket=bucket_name,
acl="private"
))
print(f"Bucket ACL set successfully. RequestId: {put_result.request_id}")
# Get the bucket ACL.
get_result = client.get_bucket_acl(oss.GetBucketAclRequest(
bucket=bucket_name
))
print(f"Current bucket ACL: {get_result.acl}")
if __name__ == "__main__":
main()
// This sample code shows how to set the access control list (ACL) for a bucket.
// Before you run the sample code, configure the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables.
package main
import (
"context"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func main() {
bucketName := "example-bucket"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion("<region-id>")
client := oss.NewClient(cfg)
// Set the bucket ACL to private.
// Valid values: oss.BucketACLPrivate, oss.BucketACLPublicRead, and oss.BucketACLPublicReadWrite.
putResult, err := client.PutBucketAcl(context.TODO(), &oss.PutBucketAclRequest{
Bucket: oss.Ptr(bucketName),
Acl: oss.BucketACLPrivate,
})
if err != nil {
log.Fatalf("Failed to set bucket ACL: %v", err)
}
log.Printf("Bucket ACL set successfully. RequestId: %s", putResult.Headers.Get("X-Oss-Request-Id"))
// Get the bucket ACL.
getResult, err := client.GetBucketAcl(context.TODO(), &oss.GetBucketAclRequest{
Bucket: oss.Ptr(bucketName),
})
if err != nil {
log.Fatalf("Failed to get bucket ACL: %v", err)
}
log.Printf("Current bucket ACL: %s", *getResult.ACL)
}
<?php
// This sample code shows how to set the access control list (ACL) for a bucket.
// Before you run the sample code, configure the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables.
require_once __DIR__ . '/vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
$bucketName = 'example-bucket';
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion('<region-id>');
$client = new Oss\Client($cfg);
try {
// Set the bucket ACL to private.
// Valid values: BucketACLType::PRIVATE, BucketACLType::PUBLIC_READ, and BucketACLType::PUBLIC_READ_WRITE.
$putResult = $client->putBucketAcl(new Oss\Models\PutBucketAclRequest(
bucket: $bucketName,
acl: Oss\Models\BucketACLType::PRIVATE
));
printf("Bucket ACL set successfully. RequestId: %s\n", $putResult->requestId);
// Get the bucket ACL.
$getResult = $client->getBucketAcl(new Oss\Models\GetBucketAclRequest(
bucket: $bucketName
));
printf("Current bucket ACL: %s\n", $getResult->accessControlList->grant);
} catch (Exception $e) {
printf("Operation failed: %s\n", $e->getMessage());
}
// This sample code shows how to set the access control list (ACL) for a bucket.
// Before you run the sample code, configure the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables.
using OSS = AlibabaCloud.OSS.V2;
var bucketName = "example-bucket";
var region = "<region-id>";
var cfg = OSS.Configuration.LoadDefault();
cfg.CredentialsProvider = new OSS.Credentials.EnvironmentVariableCredentialsProvider();
cfg.Region = region;
using var client = new OSS.Client(cfg);
try
{
// Set the bucket ACL to private.
// Valid values: "private", "public-read", and "public-read-write".
var putResult = await client.PutBucketAclAsync(new OSS.Models.PutBucketAclRequest()
{
Bucket = bucketName,
Acl = "private"
});
Console.WriteLine($"Bucket ACL set successfully. RequestId: {putResult.RequestId}");
// Get the bucket ACL.
var getResult = await client.GetBucketAclAsync(new OSS.Models.GetBucketAclRequest()
{
Bucket = bucketName
});
Console.WriteLine($"Current bucket ACL: {getResult.AccessControlPolicy?.AccessControlList?.Grant}");
}
catch (Exception ex)
{
Console.WriteLine($"Operation failed: {ex.Message}");
}
// This sample code shows how to set the access control list (ACL) for a bucket.
// Before you run the sample code, configure the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables.
const OSS = require('ali-oss');
async function main() {
const bucketName = 'example-bucket';
const client = new OSS({
region: 'oss-<region-id>',
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
});
try {
// Set the bucket ACL to private.
// Valid values: 'private', 'public-read', and 'public-read-write'.
await client.putBucketACL(bucketName, 'private');
console.log('Bucket ACL set successfully.');
// Get the bucket ACL.
const result = await client.getBucketACL(bucketName);
console.log(`Current bucket ACL: ${result.acl}`);
} catch (err) {
console.error('Operation failed:', err.message);
}
}
main();
Suivre les modifications de l'ACL du bucket
Utilisez ActionTrail pour suivre les modifications de l'ACL du bucket, y compris l'auteur de chaque modification et la date correspondante. Cela permet d'enquêter sur les accès inhabituels, l'exposition des données, les alertes de sécurité ou les audits de routine.
Accédez à la console ActionTrail. Dans le volet de navigation de gauche, choisissez Event > Event Query.
Sélectionnez la région du bucket. Définissez Service Name sur
Object Storage Service (OSS)et Event Name surPutBucketAcl. ActionTrail interroge automatiquement les enregistrements correspondants.Désactivez l'option Summary List. Dans la colonne Actions d'un enregistrement de modification, cliquez sur View Details, puis cliquez sur Configure Timeline pour afficher les valeurs avant et après.
FAQ
Origine CDN : une ACL publique est-elle requise ?
Non. Avec une ACL privée, vous pouvez toujours configurer CDN pour accéder au bucket. Configurer l'accès à un bucket d'origine privé.
Documents connexes
Pour les intégrations personnalisées, appelez directement l'API REST PutBucketAcl. Cela nécessite un calcul manuel de la signature.
Pour accorder des autorisations granulaires à long terme, telles qu'un accès en lecture seule ou en écriture seule aux objets avec un préfixe spécifique, utilisez une politique de bucket ou une politique RAM.
Pour accorder des autorisations granulaires temporaires, telles que la liste des objets, utilisez les informations d'identification temporaires STS. Utiliser les informations d'identification d'accès temporaires fournies par STS pour accéder à OSS.