Topik ini menjelaskan cara mengelola izin akses file.
Prasyarat
Pada topik ini, digunakan titik akhir publik wilayah China (Hangzhou). Untuk mengakses OSS dari layanan Alibaba Cloud lainnya dalam wilayah yang sama, gunakan titik akhir internal. Untuk detail mengenai wilayah dan titik akhir yang didukung, lihat Regions and endpoints.
Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Create an OssClient.
Untuk mengatur izin akses file, Anda harus memiliki izin
oss:PutObjectAcl. Untuk mengambil izin akses file, Anda harus memiliki izinoss:GetObjectAcl. Untuk informasi selengkapnya, lihat Grant custom access policies to a RAM user.
Jenis daftar kontrol akses
File memiliki empat jenis daftar kontrol akses (ACL):
Access permissions | Description | Access permission value |
Inherit from Bucket | File mewarisi izin akses bucket tersebut. | default |
Private | Pemilik file dan pengguna yang berwenang memiliki izin baca dan tulis untuk file tersebut. Pengguna lain tidak dapat mengakses file tersebut. | private |
Public-read | Pemilik file dan pengguna yang berwenang memiliki izin baca dan tulis untuk file tersebut. Pengguna lain hanya memiliki izin baca. Gunakan izin ini dengan hati-hati. | public-read |
Public-read-write | Semua pengguna memiliki izin baca dan tulis untuk file tersebut. Gunakan izin ini dengan hati-hati. | public-read-write |
ACL file memiliki prioritas lebih tinggi daripada ACL bucket. Misalnya, jika sebuah bucket bersifat private tetapi sebuah file di dalam bucket tersebut diatur ke public-read-write, semua pengguna memiliki izin baca dan tulis pada file tersebut. Jika sebuah file tidak memiliki konfigurasi ACL, file tersebut akan mewarisi ACL bucket-nya.
Atur izin akses file
Kode berikut memberikan contoh cara mengatur ACL suatu objek:
<?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;
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
$provider = new EnvironmentVariableCredentialsProvider();
// Titik akhir diatur ke China (Hangzhou) pada contoh ini. Tentukan Titik akhir yang sebenarnya.
$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
$bucket= "yourBucketName";
$object = "yourObjectName";
// Atur ACL file ke public-read. Nilai default adalah mewarisi ACL bucket.
$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");
Dapatkan izin akses file
Kode berikut memberikan contoh cara menanyakan ACL suatu objek:
<?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;
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
$provider = new EnvironmentVariableCredentialsProvider();
// Titik akhir diatur ke China (Hangzhou) pada contoh ini. Tentukan Titik akhir yang sebenarnya.
$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);