Acessar o OSS com o par de AccessKey de um usuário do RAM (Resource Access Management) é mais seguro do que usar as credenciais da conta raiz da Alibaba Cloud, pois permite conceder ao usuário apenas as permissões necessárias.
Pré-requisitos
Antes de começar, verifique se você tem:
Uma conta Alibaba Cloud com acesso de administrador ao RAM
Um bucket do OSS para upload de objetos
Etapa 1: Crie um usuário do RAM
Faça login no console do RAM com sua conta Alibaba Cloud ou como administrador do RAM.
No painel de navegação à esquerda, escolha Identities > Users.
Na página Users, clique em Create User.
-
Na seção User Account Information, configure os seguintes campos:
NotaPara criar vários usuários do RAM simultaneamente, clique em Add User.
Campo
Descrição
Logon Name
Até 64 caracteres. Pode conter letras, dígitos, pontos (.), hifens (-) e sublinhados (_).
Display Name
Até 128 caracteres.
Tag
Clique no ícone de edição e insira uma chave e um valor de tag. As tags ajudam a categorizar e gerenciar usuários do RAM.
Na seção Access Mode, selecione Using permanent AccessKey to access e clique em OK.
-
Clique em Copy para salvar o par de AccessKey.
ImportanteO segredo do AccessKey aparece apenas na criação do par e não pode ser recuperado posteriormente. Copie agora o ID e o segredo do AccessKey para um local seguro. Se perder o segredo, crie um novo par de AccessKey.
Etapa 2: Conceder permissão de upload de objetos ao usuário do RAM
Crie uma política personalizada
No painel de navegação à esquerda, escolha Permissions > Policies.
Na página Policies, clique em Create Policy.
-
Na página Create Policy, clique na aba JSON e insira o seguinte documento de política. Este exemplo concede a permissão
oss:PutObjectao diretórioexampledirno bucketexamplebucket.AvisoEste exemplo serve apenas como referência. Configure políticas do RAM granulares conforme suas necessidades reais para evitar concessão de permissões excessivas. Para mais detalhes, consulte Exemplo 9: Usar RAM ou STS para autorizar usuários a acessar recursos do OSS.
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:PutObject", "Resource": "acs:oss:*:*:examplebucket/exampledir/*" } ] } Clique em OK.
Defina o Policy Name como
RamTestPolicye clique em OK.
Anexar a política ao usuário do RAM
No painel de navegação à esquerda, escolha Identities > Users.
Na página Users, localize o usuário do RAM e clique em Add Permissions na coluna Actions.
No painel Grant Permission, clique na aba Custom Policy, selecione
RamTestPolicye clique em OK.
Etapa 3: Fazer upload de um objeto com o par de AccessKey do usuário do RAM
O exemplo abaixo faz o upload de um arquivo local (examplefile.txt) para exampledir/exampleobject.txt no bucket examplebucket, com o SDK para Java e Signature Version 4.
Defina variáveis de ambiente
Configure o par de AccessKey como variáveis de ambiente para que o SDK carregue as credenciais sem codificá-las diretamente no código.
Linux/macOS:
export OSS_ACCESS_KEY_ID=<your-accesskey-id>
export OSS_ACCESS_KEY_SECRET=<your-accesskey-secret>
Windows (Prompt de Comando):
setx OSS_ACCESS_KEY_ID "<your-accesskey-id>"
setx OSS_ACCESS_KEY_SECRET "<your-accesskey-secret>"
Substitua <your-accesskey-id> e <your-accesskey-secret> pelos valores copiados na Etapa 1.
Fazer upload de um objeto
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.File;
public class Demo {
public static void main(String[] args) throws Exception {
// Endpoint for the China (Hangzhou) region. Replace with your actual endpoint.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Load credentials from the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Bucket name.
String bucketName = "examplebucket";
// Full object path in the bucket. Do not include the bucket name.
String objectName = "exampledir/exampleobject.txt";
// Full path to the local file to upload.
String filePath = "D:\\localpath\\examplefile.txt";
// Region where the bucket is located.
String region = "cn-hangzhou";
// Create an OSSClient instance with Signature Version 4.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(filePath));
PutObjectResult result = ossClient.putObject(putObjectRequest);
} catch (OSSException oe) {
System.out.println("OSS rejected the request: " + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Client error (e.g., network issue): " + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
Para exemplos em outras linguagens, consulte:
Perguntas frequentes
Onde visualizo meu ID do AccessKey? É possível recuperar o segredo do AccessKey posteriormente?
Recebi um erro AccessDenied durante o upload. O que verificar?
Como identifico um tipo específico de erro?
Recebi um erro NoSuchBucket. Qual é o problema?
Recebi a mensagem "The bucket you are attempting to access must be addressed using the specified endpoint." Qual é o problema?
Próximos passos
Para compartilhar objetos enviados com terceiros sem expor suas credenciais, gere URLs pré-assinadas que permitam acesso temporário. Consulte Baixe um objeto usando uma URL pré-assinada.