Este tópico descreve como gerenciar permissões de acesso a arquivos.
Pré-requisitos
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 obter detalhes sobre regiões e endpoints compatíveis, consulte Regiões e endpoints.
Este tópico demonstra como criar uma instância OSSClient com um endpoint do OSS. Para configurações alternativas, como uso de domínio personalizado ou autenticação com credenciais do Security Token Service (STS), consulte Criar um OssClient.
Para definir permissões de acesso a arquivos, você precisa da permissão
oss:PutObjectAcl. Para consultar permissões de acesso a arquivos, você precisa da permissãooss:GetObjectAcl. Para mais informações, consulte Conceder políticas de acesso personalizadas a um usuário RAM.
Tipos de listas de controle de acesso
Os arquivos têm quatro tipos de listas de controle de acesso (ACLs):
|
Permissões de acesso |
Descrição |
Valor da permissão de acesso |
|
Herdar do Bucket |
O arquivo herda as permissões de acesso do bucket. |
default |
|
Privado |
O proprietário do arquivo e os usuários autorizados têm permissões de leitura e escrita. Outros usuários não podem acessar o arquivo. |
private |
|
Leitura pública |
O proprietário do arquivo e os usuários autorizados têm permissões de leitura e escrita. Outros usuários têm apenas permissão de leitura. Use esta permissão com cautela. |
public-read |
|
Leitura e escrita públicas |
Todos os usuários têm permissões de leitura e escrita no arquivo. Use esta permissão com cautela. |
public-read-write |
As ACLs de arquivo têm prioridade sobre as ACLs de bucket. Por exemplo, se um bucket for privado, mas um arquivo nele estiver configurado como leitura e escrita públicas, todos os usuários terão permissões de leitura e escrita nesse arquivo. Se um arquivo não tiver uma ACL configurada, ele herdará a ACL do bucket.
Definir permissões de acesso a arquivos
O exemplo de código a seguir mostra como configurar a ACL de um objeto:
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\Core\OssException;
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
$provider = new EnvironmentVariableCredentialsProvider();
// The Endpoint is set to China (Hangzhou) in this example. Specify the actual Endpoint.
$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
$bucket= "yourBucketName";
$object = "yourObjectName";
// Set the file ACL to public-read. The default is to inherit the bucket's ACL.
$acl = "public-read";
try {
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
$ossClient->putObjectAcl($bucket, $object, $acl);
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");
Obter permissões de acesso a arquivos
O exemplo de código a seguir mostra como consultar a ACL de um objeto:
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\Core\OssException;
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
$provider = new EnvironmentVariableCredentialsProvider();
// The Endpoint is set to China (Hangzhou) in this example. Specify the actual Endpoint.
$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
$bucket= "yourBucketName";
$object = "yourObjectName";
try {
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
$objectAcl = $ossClient->getObjectAcl($bucket, $object);
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");
var_dump($objectAcl);