Topik ini menjelaskan cara mengelola Daftar Kontrol Akses (ACL) objek menggunakan OSS SDK untuk PHP.
Catatan penggunaan
Kode contoh dalam topik ini menggunakan
cn-hangzhou. Secara default, permintaan ke bucket menggunakan endpoint publik. Namun, jika Anda mengakses bucket dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan endpoint internal untuk performa dan keamanan yang lebih baik. Untuk informasi tentang wilayah dan endpoint OSS, lihat Wilayah dan Endpoint.Untuk mengonfigurasi ACL untuk objek, Anda harus memiliki izin
oss:PutObjectAcl. Untuk menanyakan ACL objek, Anda harus memiliki izinoss:GetObjectAcl. Untuk informasi lebih lanjut, lihat Lampirkan Kebijakan Kustom ke Pengguna RAM.
Jenis-jenis ACL
Tabel berikut menjelaskan ACL yang dapat dikonfigurasikan untuk sebuah objek.
ACL | Deskripsi | Nilai |
Diwarisi dari bucket | ACL objek sama dengan ACL bucket tempat objek tersebut disimpan. | oss.ObjectACLDefault |
Pribadi | Hanya pemilik objek dan pengguna yang berwenang yang memiliki izin baca dan tulis pada objek. Pengguna lain tidak dapat mengakses objek tersebut. | oss.ObjectACLPrivate |
Publik-baca | Hanya pemilik objek dan pengguna yang berwenang yang memiliki izin baca dan tulis pada objek. Pengguna lain hanya memiliki izin baca pada objek. Berhati-hatilah saat menetapkan ACL objek ke nilai ini. | ObjectACLPublicRead |
Publik-baca-tulis | Semua pengguna memiliki izin baca dan tulis pada objek. Berhati-hatilah saat menetapkan ACL objek ke nilai ini. | oss.ObjectACLPublicReadWrite |
ACL objek memiliki prioritas lebih tinggi daripada ACL bucket tempat objek tersebut disimpan. Sebagai contoh, jika ACL objek dalam bucket pribadi diatur ke public-read, semua pengguna, termasuk pengguna anonim, dapat membaca objek tersebut. Jika ACL objek tidak dikonfigurasikan, ACL objek akan sama dengan ACL bucket tempat objek tersebut disimpan.
Kode contoh
1. Atur ACL objek.
<?php
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
$optsdesc = [
"region" => ['help' => 'Wilayah tempat bucket berada.', 'required' => True],
"endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.', 'required' => False],
"bucket" => ['help' => 'Nama bucket', 'required' => True],
"key" => ['help' => 'Nama objek', 'required' => True],
];
// Buat array opsi panjang yang diperlukan oleh getopt. Contoh: --region:.
$longopts = array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// Parse parameter baris perintah.
$options = getopt("", $longopts);
// Periksa apakah parameter yang diperlukan hilang.
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
// Cetak informasi bantuan dan keluar jika parameter yang diperlukan hilang.
$help = $value['help'];
echo "Error: argumen berikut diperlukan: --$key, $help\n";
exit(1);
}
}
// Ekstrak nilai-nilai parameter.
$region = $options["region"];
$bucket = $options["bucket"];
$key = $options["key"];
// Dapatkan kredensial akses (AccessKey ID dan AccessKey secret) dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
// Jika parameter endpoint ditentukan, itu akan dikonfigurasi sebagai URL akses kustom.
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// Inisialisasi instance OSSClient.
$client = new Oss\Client($cfg);
// Buat objek PutObjectAclRequest dan tentukan nama bucket, kunci objek, dan ACL.
$request = new Oss\Models\PutObjectAclRequest($bucket, $key, Oss\Models\ObjectACLType::PUBLIC_READ);
// Setel ACL objek ke public-read.
$result = $client->putObjectAcl($request);
// Keluarkan kode status HTTP dan ID permintaan dari respons.
printf(
'kode status:' . $result->statusCode . PHP_EOL .
'ID permintaan:' . $result->requestId
);
2. Tanyakan ACL bucket.
<?php
// Masukkan file autoload untuk memuat pustaka dependen.
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// Tentukan deskripsi untuk parameter baris perintah.
$optsdesc = [
"region" => ['help' => 'Wilayah tempat bucket berada', 'required' => True], // (Diperlukan) Tentukan wilayah tempat bucket berada.
"endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS', 'required' => False], // (Opsional) Tentukan endpoint OSS.
"bucket" => ['help' => 'Nama bucket', 'required' => True], // (Diperlukan) Tentukan nama bucket.
"key" => ['help' => 'Nama objek', 'required' => True], // (Diperlukan) Tentukan nama objek.
];
// Hasilkan daftar opsi panjang untuk memparse parameter baris perintah.
$longopts = \array_map(function ($key) {
return "$key:"; // Tambahkan titik dua (:) di akhir setiap parameter untuk menunjukkan bahwa nilai diperlukan.
}, array_keys($optsdesc));
// Parse parameter baris perintah.
$options = getopt("", $longopts);
// Periksa apakah parameter yang diperlukan hilang.
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: argumen berikut diperlukan: --$key, $help"; // Tampilkan parameter yang diperlukan tetapi hilang.
exit(1);
}
}
// Dapatkan nilai parameter baris perintah.
$region = $options["region"]; // Wilayah tempat bucket berada.
$bucket = $options["bucket"]; // Nama bucket.
$key = $options["key"]; // Nama objek.
// Muat AccessKey ID dan AccessKey secret dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// Gunakan konfigurasi default SDK.
$cfg = Oss\Config::loadDefault();
// Tentukan penyedia kredensial.
$cfg->setCredentialsProvider($credentialsProvider);
// Tentukan wilayah.
$cfg->setRegion($region);
// Jika endpoint diberikan, tentukan endpoint.
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// Buat instance OSSClient.
$client = new Oss\Client($cfg);
// Buat objek permintaan untuk mendapatkan ACL objek.
$request = new Oss\Models\GetObjectAclRequest(bucket: $bucket, key: $key);
// Gunakan metode getObjectAcl untuk menanyakan ACL objek.
$result = $client->getObjectAcl($request);
// Tampilkan hasilnya.
printf(
'kode status:' . $result->statusCode . PHP_EOL . // Kode status HTTP.
'ID permintaan:' . $result->requestId . PHP_EOL . // ID permintaan.
'acl:' . $result->accessControlList->grant // ACL objek.
);
Referensi
Untuk kode contoh lengkap yang digunakan untuk mengonfigurasi ACL objek, kunjungi GitHub.
Untuk informasi tentang operasi API yang dapat dipanggil untuk mengonfigurasi ACL objek, lihat PutObjectACL.
Untuk kode contoh lengkap yang digunakan untuk menanyakan ACL objek, kunjungi GitHub.
Untuk informasi tentang operasi API yang dapat dipanggil untuk menanyakan ACL objek, lihat GetObjectACL.