Todos os produtos
Search
Central de documentação

Object Storage Service:Gerencie a ACL de um objeto (Go SDK V2)

Última atualização: Jul 03, 2026

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ão oss: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(&region, "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.