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 services da Alibaba Cloud na mesma região, use um endpoint interno. Para obter detalhes sobre regiões e endpoints compatíveis, consulte Regions and endpoints.
Este tópico demonstra como crie 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 Create an OssClient.
Para defina permissões de acesso a arquivos, é necessária a permissão
oss:PutObjectAcl. Para consultar permissões de acesso a arquivos, é necessária a permissãooss:GetObjectAcl. Para mais informações, consulte Grant custom access policies to a RAM user.
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 gravação. Outros usuários não podem acessar o arquivo. |
private |
|
Leitura pública |
O proprietário e os usuários autorizados têm permissões de leitura e gravação. Outros usuários têm apenas permissão de leitura. Use esta permissão com cautela. |
public-read |
|
Leitura e gravação públicas |
Todos os usuários têm permissões de leitura e gravação 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 gravação públicas, todos os usuários terão permissões de leitura e gravação nesse arquivo. Se um arquivo não tiver uma ACL configurada, ele herdará a ACL do bucket.
Defina permissões de acesso a arquivos
O código de exemplo a seguir mostra como configure 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 código de exemplo 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);