Use o OSS SDK for Go V1 para definir e consultar listas de controle de acesso (ACLs) de objetos no OSS.
Observações
Este tópico usa 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 mais informações sobre regiões e endpoints do OSS, consulte Regiões e endpoints.
As credenciais de acesso neste exemplo vêm de variáveis de ambiente. Para saber como configurar credenciais de acesso, consulte Configurar credenciais de acesso.
Este exemplo demonstra a criação de uma instância OSSClient com um endpoint do OSS. Para outras configurações, como uso de domínio personalizado ou autenticação via Security Token Service (STS), consulte Configurar um cliente (Go SDK V1).
Para configurar a ACL de um objeto, você precisa da permissão
oss:PutObjectAcl. Para consultar a ACL, é necessária a permissãooss:GetObjectAcl. Para mais detalhes, consulte Conceder uma política personalizada.
Tipos de permissão de leitura e gravação
Os objetos aceitam os quatro tipos de ACL a seguir:
|
Permissão de acesso |
Descrição |
Valor da ACL |
|
Herdar do bucket |
O objeto herda a ACL do bucket. |
oss.ACLDefault |
|
Privado |
Somente o proprietário do objeto e usuários autorizados têm permissões de leitura e gravação. Outros usuários não podem acessar o objeto. |
oss.ACLPrivate |
|
Leitura pública |
O proprietário e usuários autorizados têm permissões de leitura e gravação. Outros usuários têm apenas permissão de leitura. Use esta opção com cautela. |
oss.ACLPublicRead |
|
Leitura e gravação públicas |
Todos os usuários têm permissões de leitura e gravação no objeto. Use esta opção com cautela. |
oss.PublicReadWrite |
A ACL do objeto tem precedência sobre a ACL do bucket. Por exemplo, se a ACL do bucket estiver definida como privada, mas a do objeto como leitura e gravação públicas, todos os usuários poderão ler e gravar nesse objeto. Se nenhuma ACL for configurada para o objeto, ele herdará a ACL do bucket.
Código de exemplo
O código abaixo mostra como definir e consultar ACLs de objetos:
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 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.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// Create an OSSClient instance.
// Set yourEndpoint to the Endpoint of the bucket. For example, for the China (Hangzhou) region, set the Endpoint to https://oss-cn-hangzhou.aliyuncs.com. For other regions, set the Endpoint as needed.
// Set yourRegion to the region where the bucket is located. For example, for the China (Hangzhou) region, set the value to cn-hangzhou. For other regions, set the value as needed.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// Set the signature version.
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// Set yourBucketName to the name of the bucket.
bucketName := "yourBucketName"
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket '%s': %v", bucketName, err)
}
// Set the ACL of the object.
// Set yourObjectName to the full path of the object. Do not include the bucket name.
objectName := "yourObjectName"
err = bucket.SetObjectACL(objectName, oss.ACLPublicReadWrite)
if err != nil {
log.Fatalf("Failed to set object ACL for '%s': %v", objectName, err)
}
// Get the ACL of the object.
aclRes, err := bucket.GetObjectACL(objectName)
if err != nil {
log.Fatalf("Failed to get object ACL for '%s': %v", objectName, err)
}
log.Printf("Object ACL for '%s': %s", objectName, aclRes.ACL)
}
Referências
Para obter o código completo, consulte o exemplo no GitHub.
Para mais informações sobre a operação de API que define ACLs de objetos, consulte SetObjectACL.
Para mais informações sobre a operação de API que consulta ACLs de objetos, consulte GetObjectACL.