Descrição do problema
A política configurada para o token de segurança gerado pelo Security Token Service (STS) negou a solicitação.
Causas
O parâmetro policy no código de obtenção do token de segurança do STS causa um problema de permissão.
Exemplos
No código de exemplo Java a seguir para obter um token de segurança, o parâmetro policy especifique as permissões associadas ao token. As permissões efetivas do token correspondem à interseção entre as permissões da função e as permissões definidas no parâmetro policy do código:
String roleSessionName = "<session-name>";
String policy = "{\n" +
" \"Version\": \"1\", \n" +
" \"Statement\": [\n" +
" {\n" +
" \"Action\": [\n" +
" \"oss:*\"\n" +
" ], \n" +
" \"Resource\": [\n" +
" \"acs:oss:*:*:*\" \n" +
" ], \n" +
" \"Effect\": \"Allow\"\n" +
" }\n" +
" ]\n" +
"}";
try {
// Add the endpoint. The STS endpoint is used directly, so leave the first two parameters empty and do not specify a region ID.
DefaultProfile.addEndpoint("", "", "Sts", endpoint);
// Create the default profile. Leave the parameter empty and do not specify a region ID.
IClientProfile profile = DefaultProfile.getProfile("", accessKeyId, accessKeySecret);
// Use the profile to create a client.
DefaultAcsClient client = new DefaultAcsClient(profile);
final AssumeRoleRequest request = new AssumeRoleRequest();
request.setMethod(MethodType.POST);
request.setRoleArn(roleArn);
request.setRoleSessionName(roleSessionName);
request.setPolicy(policy); // If the policy is empty, the user is granted all permissions of the role.
request.setDurationSeconds(1000L); // Specify the validity period of the credentials.
Soluções
Verifique as permissões especificadas no parâmetro policy da operação da API do OSS. Para mais informações, consulte Use temporary credentials provided by STS to access OSS. As permissões efetivas aplicadas a um token de segurança correspondem à interseção entre as permissões da função concedidas na Step 4: Grant the role permissions to upload objects to OSS e as permissões definidas pelo parâmetro policy na Step 5: Obtain temporary access credentials. Use os exemplos a seguir para validar a interseção das permissões configuradas nessas duas etapas.
-
Exemplo 1
Se a permissão da função configurada na Etapa 4 for a permissão de sistema
AliyunOSSFullAccesse a permissãooss:PutObjectestiver configurada na Etapa 5, as credenciais de acesso temporário terão apenas a permissãooss:PutObject. Nesse caso, você só pode fazer upload de objetos para o bucket especificado. -
Exemplo 2
Se a permissão da função configurada na Etapa 4 for a permissão de sistema
oss:PutObjecte a permissãooss:GetObjectestiver definida na Etapa 5, as credenciais de acesso temporário não receberão nenhuma permissão válida. Consequentemente, não será possível executar operações no bucket especificado.