Use o Go SDK V2 para definir e consultar a lista de controle de acesso (ACL) de um objeto.
Observações de uso
O código de exemplo deste tópico usa a região China (Hangzhou) (
cn-hangzhou) e o endpoint público. Para acessar o OSS a partir de outros produtos da Alibaba Cloud na mesma região, use um endpoint interno. Para obter mais informações sobre os mapeamentos entre regiões e endpoints, consulte Regiões e endpoints do OSS.O código de exemplo lê as credenciais de acesso das variáveis de ambiente. Para saber como configurar essas credenciais, consulte Configurar credenciais de acesso.
Para definir as permissões de acesso de um objeto, você precisa da permissão
oss:PutObjectAcl. Para consultar as permissões, é necessária a permissãooss:GetObjectAcl. Para obter mais informações, consulte Conceder uma política personalizada a um usuário RAM.
Tipos de ACLs
A tabela a seguir descreve os quatro tipos de ACL para objetos.
|
Permissão de acesso |
Descrição |
Valor da permissão de acesso |
|
Herdar do bucket |
O objeto herda as permissões de acesso do bucket. |
oss.ObjectACLDefault |
|
Privado |
Somente o proprietário do objeto e usuários autorizados têm permissões de leitura e escrita no objeto. Outros usuários não podem acessar o objeto. |
oss.ObjectACLPrivate |
|
Leitura pública |
O proprietário do objeto e usuários autorizados têm permissões de leitura e escrita no objeto. Outros usuários têm apenas permissão de leitura. Tenha cautela ao conceder essa permissão. |
ObjectACLPublicRead |
|
Leitura e escrita públicas |
Todos os usuários têm permissões de leitura e escrita no objeto. Tenha cautela ao conceder essa permissão. |
oss.ObjectACLPublicReadWrite |
A ACL de um objeto tem precedência sobre a ACL do bucket. Por exemplo, se a ACL do bucket for privada, mas a do objeto for de leitura e escrita públicas, todos os usuários terão permissões de leitura e escrita no objeto. Se nenhuma ACL for definida para o objeto, ele herdará a ACL do bucket.
Código de exemplo
O código a seguir mostra como definir e consultar a ACL de um objeto.
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// Define global variables.
var (
region string // The region where the bucket is located.
bucketName string // The name of the bucket.
objectName string // The name of the object.
)
// The init function is used to initialize command-line parameters.
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
flag.StringVar(&objectName, "object", "", "The name of the object.")
}
func main() {
// Parse command-line parameters.
flag.Parse()
// Check whether the region is empty.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// Check whether the bucket name is empty.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// Check whether the object name is empty.
if len(objectName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, object name required")
}
// Load the default configurations and set the credential provider and region.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// Create an OSS client.
client := oss.NewClient(cfg)
// Create a request to set the ACL of the object.
putRequest := &oss.PutObjectAclRequest{
Bucket: oss.Ptr(bucketName), // The name of the bucket.
Key: oss.Ptr(objectName), // The name of the object.
Acl: oss.ObjectACLPrivate, // Set the ACL of the object to private.
}
// Execute the operation to set the ACL of the object.
putResult, err := client.PutObjectAcl(context.TODO(), putRequest)
if err != nil {
log.Fatalf("failed to put object acl %v", err)
}
// Print the result of setting the object ACL.
log.Printf("put object acl result:%#v\n", putResult)
// Create a request to obtain the ACL (access control list) of the object.
getRequest := &oss.GetObjectAclRequest{
Bucket: oss.Ptr(bucketName), // The name of the bucket.
Key: oss.Ptr(objectName), // The name of the object.
}
// Execute the operation to obtain the ACL of the object.
getResult, err := client.GetObjectAcl(context.TODO(), getRequest)
if err != nil {
log.Fatalf("failed to get object acl %v", err)
}
// Print the result of obtaining the object ACL.
log.Printf("get object acl result:%#v\n", getResult)
}
Referências
Para obter o código de exemplo completo usado para definir a ACL de um objeto, consulte o exemplo no GitHub.
Para obter mais informações sobre a operação de API usada para definir a ACL de um objeto, consulte PutObjectAcl.
Para obter o código de exemplo completo usado para consultar a ACL de um objeto, consulte o exemplo no GitHub.
Para obter mais informações sobre a operação de API usada para consultar a ACL de um objeto, consulte GetObjectAcl.