Définissez et récupérez les listes de contrôle d'accès (ACL) des buckets pour gérer les autorisations de lecture et d'écriture sur les objets qu'ils contiennent.
Notes
Cette rubrique utilise le point de terminaison public de la région Chine (Hangzhou). Si vous souhaitez accéder à OSS depuis d'autres services Alibaba Cloud situés dans la même région, utilisez un point de terminaison interne. Pour plus d'informations sur les régions et les points de terminaison OSS, consultez la page Régions et points de terminaison.
Les exemples présentés ici montrent comment créer une instance OssClient à l'aide d'un point de terminaison OSS. Pour d'autres configurations, telles que l'utilisation d'un domaine personnalisé ou l'authentification via des identifiants du Security Token Service (STS), reportez-vous à la section Créer une instance OssClient.
Pour définir l'ACL d'un bucket, vous devez disposer de l'autorisation
oss:PutBucketAcl. Pour récupérer l'ACL d'un bucket, vous devez disposer de l'autorisationoss:GetBucketAcl. Pour en savoir plus, consultez la rubrique Accorder une politique personnalisée.
Définir l'ACL d'un bucket
OSS prend en charge les ACL de bucket suivantes.
|
ACL |
Description |
Méthode |
|
Privé |
Seul le propriétaire du bucket peut lire et écrire des objets dans ce dernier. Les autres utilisateurs ne peuvent pas y accéder. |
CannedAccessControlList::Private |
|
Lecture publique |
Seul le propriétaire du bucket peut y écrire des objets. Les autres utilisateurs, y compris les utilisateurs anonymes, peuvent uniquement les lire. Avertissement
Le fait de définir l'ACL d'un bucket sur « lecture publique » permet à toute personne disposant d'une connexion Internet de lire les objets qui y sont stockés. Cela peut entraîner une exposition involontaire des données et des frais imprévus. Faites preuve de prudence. |
CannedAccessControlList::PublicRead |
|
Lecture/écriture publiques |
Tous les utilisateurs, y compris les utilisateurs anonymes, peuvent lire et écrire des objets dans le bucket. Avertissement
Le fait de définir l'ACL d'un bucket sur « lecture/écriture publiques » permet à toute personne disposant d'une connexion Internet de lire et d'écrire des objets qui y sont stockés. Cette configuration présente un risque de sécurité important, pouvant entraîner une exposition des données, des frais imprévus et le téléversement de contenu malveillant ou illégal dans votre bucket. Il est fortement déconseillé d'utiliser cette ACL, sauf si cela est absolument nécessaire. |
CannedAccessControlList::PublicReadWrite |
L'exemple de code suivant définit l'ACL d'un bucket :
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Initialize information about the account that is used to access OSS. */
/* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. */
std::string Region = "yourRegion";
/* Specify the name of the bucket. Example: examplebucket. */
std::string BucketName = "examplebucket";
/* Initialize the SDK. This must be called before using the SDK. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* Set the ACL of the bucket to private. */
SetBucketAclRequest request(BucketName, CannedAccessControlList::Private);
auto outcome = client.SetBucketAcl(request);
if (outcome.isSuccess()) {
std::cout << " setBucketAcl successfully " << std::endl;
}
else {
/* Handle the error. */
std::cout << "SetBucketAcl fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* Shut down the SDK to release resources. */
ShutdownSdk();
return 0;
}
Récupérer l'ACL d'un bucket
Le code suivant permet de récupérer l'ACL du bucket :
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Initialize information about the account that is used to access OSS. */
/* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. */
std::string Region = "yourRegion";
/* Specify the name of the bucket. Example: examplebucket. */
std::string BucketName = "examplebucket";
/* Initialize the SDK. This must be called before using the SDK. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* Get the ACL of the bucket. */
GetBucketAclRequest request(BucketName);
auto outcome = client.GetBucketAcl(request);
if (outcome.isSuccess()) {
std::cout << "getBucketAcl success, acl: " << outcome.result().Acl() << std::endl;
}
else {
/* Handle the error. */
std::cout << "getBucketAcl fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* Shut down the SDK to release resources. */
ShutdownSdk();
return 0;
}
Références
Pour consulter l'exemple de code complet relatif à la gestion des ACL de bucket, rendez-vous sur GitHub.
Pour plus d'informations sur l'opération API permettant de définir l'ACL d'un bucket, consultez la page PutBucketAcl.
Pour plus d'informations sur l'opération API permettant de récupérer l'ACL d'un bucket, consultez la page GetBucketAcl.