Este tópico descreve como gerenciar as permissões de acesso a objetos.
Observações
Este tópico utiliza o endpoint público da região China (Hangzhou). Para acessar o OSS a partir de outros serviços da Alibaba Cloud na mesma região, use um endpoint interno. Para obter mais informações sobre regiões e endpoints do OSS, consulte Regions and endpoints.
Este tópico demonstra a criação de uma instância OSSClient com um endpoint do OSS. Para configurações alternativas, como uso de domínio personalizado ou autenticação via Security Token Service (STS), consulte Crie uma instância OssClient.
Para configurar a ACL de um objeto, você deve ter a permissão
oss:PutObjectAcl. Para consultar ACLs de objetos, é necessária a permissãooss:GetObjectAcl. Para mais informações, consulte Conceda uma política personalizada.
Tipos de ACL
A tabela a seguir descreve as ACLs que você pode configurar para um objeto.
A ACL de um objeto tem precedência sobre a ACL do bucket onde ele está armazenado. Por exemplo, se a ACL de um objeto em um bucket privado estiver definida como public-read, todos os usuários, inclusive anônimos, poderão ler esse objeto.
Tipo de ACL | Descrição | Valor |
Herdada do bucket | A ACL do objeto corresponde à do bucket onde está armazenado. Esta é a ACL padrão para objetos. | CannedAccessControlList.Default |
Privada | Somente o proprietário do objeto pode ler e gravar no objeto. Outros usuários não podem acessá-lo. | CannedAccessControlList.Private |
Leitura pública | Apenas o proprietário pode gravar no objeto. Demais usuários, incluindo anônimos, têm somente permissão de leitura. Aviso Essa configuração pode resultar em acesso não autorizado e custos inesperados. Tenha cautela ao utilizar esta ACL. | CannedAccessControlList.PublicRead |
Leitura e gravação públicas | Todos os usuários, inclusive anônimos, podem ler e gravar no objeto. Aviso Esta ACL permite que qualquer pessoa acesse e grave dados no objeto pela internet, o que pode causar acesso não autorizado, custos imprevistos ou upload de conteúdo proibido. Não defina a ACL do objeto como leitura e gravação públicas, a menos que seja estritamente necessário. | CannedAccessControlList.PublicReadWrite |
Defina permissões de acesso a objetos
O código de exemplo a seguir mostra como configurar a ACL de um objeto:
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Initialize OSS account information. */
/* Set yourEndpoint to the Endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the Endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Set yourRegion to the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the Region to cn-hangzhou. */
std::string Region = "yourRegion";
/* Specify the bucket name. Example: examplebucket. */
std::string BucketName = "examplebucket";
/* Specify the full path of the object. The full path cannot include the bucket name. Example: exampledir/exampleobject.txt. */
std::string ObjectName = "exampledir/exampleobject.txt";
/* Initialize network resources. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* Set the object access permissions. */
SetObjectAclRequest request(BucketName, ObjectName);
request.setAcl(CannedAccessControlList::Private);
auto outcome = client.SetObjectAcl(request);
if (!outcome.isSuccess()) {
/* Handle exceptions. */
std::cout << "SetObjectAcl fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* Release network resources. */
ShutdownSdk();
return 0;
}
Obter permissões de acesso a objetos
O código de exemplo a seguir mostra como consultar a ACL de um objeto:
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Initialize OSS account information. */
/* Set yourEndpoint to the Endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the Endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Set yourRegion to the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the Region to cn-hangzhou. */
std::string Region = "yourRegion";
/* Specify the bucket name. Example: examplebucket. */
std::string BucketName = "examplebucket";
/* Specify the full path of the object. The full path cannot include the bucket name. Example: exampledir/exampleobject.txt. */
std::string ObjectName = "exampledir/exampleobject.txt";
/* Initialize network resources. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* Get the object access permissions. */
GetObjectAclRequest request(BucketName, ObjectName);
auto outcome = client.GetObjectAcl(request);
if (!outcome.isSuccess()) {
/* Handle exceptions. */
std::cout << "GetObjectAcl fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
else {
std::cout << " GetObjectAcl success, Acl:" << outcome.result().Acl() << std::endl;
}
/* Release network resources. */
ShutdownSdk();
return 0;
}
Referências
Para obter mais informações sobre a operação de API para definir permissões de acesso a objetos, consulte PutObjectACL.
Para obter mais informações sobre a operação de API para recuperar permissões de acesso a objetos, consulte GetObjectACL.