Use o OSS SDK for Go V1 para definir e consultar listas de controle de acesso (ACLs) de objetos no OSS.
Observações
Neste tópico, usamos 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.
Neste tópico, as credenciais de acesso são obtidas a partir de variáveis de ambiente. Para obter mais informações sobre como configurar credenciais de acesso, consulte Configure access credentials.
Este tópico demonstra como criar uma instância OSSClient com um endpoint do OSS. Para configurações alternativas, como usar um domínio personalizado ou autenticar-se com credenciais do Security Token Service (STS), consulte Configure a client (Go SDK V1).
Para configurar a ACL de um objeto, é necessária a permissão
oss:PutObjectAcl. Para consultar ACLs de objetos, é necessária a permissãooss:GetObjectAcl. Para obter mais informações, consulte Grant a custom policy.
Tipos de permissões de leitura e gravação
Os objetos aceitam os quatro tipos de ACL a seguir:
|
Permissão de acesso |
Descrição |
Valor da ACL |
|
Herdada do bucket |
O objeto herda a ACL do bucket. |
oss.ACLDefault |
|
Privada |
Somente o proprietário do objeto e usuários autorizados têm permissões de leitura e gravação no objeto. Outros usuários não podem acessar o objeto. |
oss.ACLPrivate |
|
Leitura pública |
O proprietário do objeto e usuários autorizados têm permissões de leitura e gravação no objeto. Outros usuários têm apenas permissões de leitura. Use esta permissã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 permissão com cautela. |
oss.PublicReadWrite |
As ACLs de objetos têm precedência sobre as ACLs de buckets. Por exemplo, se a ACL de um bucket estiver definida como privada e a ACL de um objeto como leitura e gravação públicas, todos os usuários terão permissões de leitura e gravação no objeto. Se nenhuma ACL estiver configurada para um objeto, ele herdará a ACL do bucket.
Código de exemplo
O código de exemplo a seguir 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 de exemplo completo, consulte Exemplo no GitHub.
Para obter mais informações sobre a operação de API para definir ACLs de objetos, consulte SetObjectACL.
Para obter mais informações sobre a operação de API para consultar ACLs de objetos, consulte GetObjectACL.