Mengonfigurasi replikasi untuk bucket sumber dan tujuan yang dimiliki oleh akun yang sama - Amazon Simple Storage Service

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengonfigurasi replikasi untuk bucket sumber dan tujuan yang dimiliki oleh akun yang sama

Replikasi adalah penyalinan objek secara otomatis dan asinkron di seluruh ember dalam hal yang sama atau berbeda. Wilayah AWS Replikasi menyalin objek yang baru dibuat dan pembaruan objek dari bucket sumber ke bucket atau bucket tujuan. Untuk informasi selengkapnya, lihat Mereplikasi ikhtisar objek.

Saat mengonfigurasi replikasi, Anda menambahkan aturan replikasi ke bucket sumber. Aturan replikasi menentukan objek bucket sumber mana yang akan direplikasi dan bucket tujuan atau bucket tempat objek yang direplikasi disimpan. Anda dapat membuat aturan untuk mereplikasi semua objek dalam bucket atau subset objek dengan awalan nama kunci tertentu, satu atau beberapa tag objek, atau keduanya. Bucket tujuan bisa Akun AWS sama dengan bucket sumber, atau bisa juga di akun yang berbeda.

Jika Anda menentukan ID versi objek yang akan dihapus, Amazon S3 menghapus versi objek tersebut dalam bucket sumber. Tetapi ini tidak mereplikasi penghapusan di bucket tujuan. Dengan kata lain, itu tidak menghapus versi objek yang sama dari bucket tujuan. Ini melindungi data dari penghapusan berbahaya.

Ketika Anda menambahkan aturan replikasi ke bucket, aturan diaktifkan secara default, sehingga aturan mulai bekerja segera setelah Anda menyimpannya.

Dalam contoh ini, Anda menyiapkan replikasi untuk bucket sumber dan tujuan yang dimiliki oleh Akun AWS yang sama. Contoh disediakan untuk menggunakan konsol Amazon S3, AWS Command Line Interface (AWS CLI), dan dan. AWS SDK for Java AWS SDK for .NET

Untuk mengonfigurasi aturan replikasi saat bucket tujuan Akun AWS sama dengan bucket sumber, ikuti langkah-langkah berikut.

Jika bucket tujuan berada di akun yang berbeda dengan bucket sumber, Anda harus menambahkan kebijakan bucket ke bucket tujuan untuk memberi pemilik akun bucket sumber izin untuk mereplikasi objek dalam bucket tujuan. Untuk informasi selengkapnya, lihat Memberikan izin saat bucket sumber dan tujuan dimiliki oleh yang berbeda Akun AWS.

  1. Masuk ke AWS Management Console dan buka konsol Amazon S3 di https://console.aws.amazon.com/s3/.

  2. Di panel navigasi kiri, pilih Bucket.

  3. Dari daftar Bucket, pilih nama bucket yang Anda inginkan.

  4. Pilih tab Manajemen, gulir ke bawah ke Aturan replikasi, lalu pilih Buat aturan replikasi.

  5. Di bagian Konfigurasi aturan replikasi, di bawah Nama aturan replikasi, masukkan nama untuk aturan Anda guna membantu mengidentifikasi aturan tersebut nanti. Nama wajib diisi dan harus unik dalam bucket.

  6. Di bawah Status, Diaktifkan dipilih secara default. Aturan yang diaktifkan mulai berfungsi segera setelah Anda menyimpannya. Jika Anda ingin mengaktifkan aturan nanti, pilih Dinonaktifkan.

  7. Jika bucket memiliki aturan replikasi yang ada, Anda diinstruksikan untuk menetapkan prioritas aturan. Anda harus menetapkan prioritas pada aturan untuk menghindari konflik yang disebabkan oleh objek yang dimasukkan dalam cakupan lebih dari satu aturan. Dalam kasus aturan yang tumpang tindih, Amazon S3 menggunakan prioritas aturan untuk menentukan aturan mana yang berlaku. Semakin tinggi angkanya, semakin tinggi prioritasnya. Untuk informasi selengkapnya tentang prioritas aturan, lihat Konfigurasi Replikasi.

  8. Di bawah Bucket sumber, Anda memiliki opsi berikut untuk mengatur sumber replikasi:

    • Untuk mereplikasi seluruh bucket, pilih Terapkan ke semua objek di bucket.

    • Untuk mereplikasi semua objek yang memiliki awalan yang sama, pilih Batasi cakupan aturan ini menggunakan satu atau beberapa filter. Ini membatasi replikasi ke semua objek yang memiliki nama yang dimulai dengan awalan yang Anda tentukan (misalnya pictures). Masukkan awalan di kotak Awalan.

      catatan

      Jika Anda memasukkan awalan yang merupakan nama folder, Anda harus menggunakan / (garis miring ke depan) sebagai karakter terakhir (misalnya, pictures/).

    • Untuk mereplikasi semua objek dengan satu atau beberapa tag objek, pilih Tambahkan tag dan masukkan pasangan nilai kunci ke dalam kotak. Ulangi prosedur untuk menambahkan tag lainnya. Anda dapat menggabungkan awalan dan tag. Untuk informasi selengkapnya tentang tag objek, lihat Mengategorikan penyimpanan Anda menggunakan tag.

    Skema XML konfigurasi replikasi baru mendukung pemfilteran awalan dan tag serta prioritas aturan. Untuk informasi selengkapnya tentang skema baru, lihat Kompatibilitas mundur. Untuk informasi selengkapnya tentang XML yang digunakan dengan API Amazon S3 yang berfungsi di balik antarmuka pengguna, lihat Konfigurasi Replikasi. Skema baru dijelaskan sebagai konfigurasi replikasi XML V2.

  9. Di bawah Tujuan, pilih bucket tempat Anda ingin Amazon S3 mereplikasi objek.

    catatan

    Jumlah ember tujuan terbatas pada jumlah Wilayah AWS di partisi tertentu. Partisi adalah pengelompokan Wilayah. AWS Saat ini memiliki tiga partisi: aws (Wilayah Standar), aws-cn (Wilayah China), dan aws-us-gov (AWS GovCloud (US) Wilayah). Untuk meminta peningkatan kuota bucket tujuan Anda, Anda dapat menggunakan kuota layanan.

    • Untuk mereplikasi ke bucket atau beberapa bucket di akun Anda, pilih Pilih bucket di akun ini, dan masukkan atau telusuri nama bucket tujuan.

    • Untuk mereplikasi ke bucket atau bucket yang berbeda Akun AWS, pilih Tentukan bucket di akun lain, lalu masukkan ID akun bucket tujuan dan nama bucket.

      Jika tujuan berada di akun yang berbeda dengan bucket sumber, Anda harus menambahkan kebijakan bucket ke bucket tujuan untuk memberi pemilik akun bucket sumber izin untuk mereplikasi objek. Untuk informasi selengkapnya, lihat Memberikan izin saat bucket sumber dan tujuan dimiliki oleh yang berbeda Akun AWS.

      Secara opsional, jika Anda ingin membantu menstandarkan kepemilikan objek baru di bucket tujuan, pilih Ubah kepemilikan objek ke pemilik bucket tujuan. Untuk informasi selengkapnya tentang metrik ini, lihat Mengontrol kepemilikan objek dan menonaktifkan ACL untuk bucket Anda.

    catatan

    Jika Penentuan Versi tidak diaktifkan pada bucket tujuan, Anda mendapatkan peringatan yang berisi tombol Aktifkan Penentuan Versi. Pilih tombol ini untuk mengaktifkan versi pada bucket.

  10. Siapkan peran AWS Identity and Access Management (IAM) yang dapat diasumsikan Amazon S3 untuk mereplikasi objek atas nama Anda.

    Untuk menyiapkan peran IAM, di bagian peran IAM, pilih salah satu dari daftar dropdown peran IAM berikut ini:

    • Kami sangat merekomendasikan Anda untuk memilih Buat peran baru agar Amazon S3 membuat peran IAM baru untuk Anda. Saat Anda menyimpan aturan, kebijakan baru akan dibuat untuk peran IAM yang sesuai dengan bucket sumber dan tujuan yang Anda pilih.

    • Anda dapat memilih untuk menggunakan peran IAM yang sudah ada. Jika melakukannya, Anda harus memilih peran yang memberi Amazon S3 izin yang diperlukan untuk replikasi. Replikasi akan gagal jika peran ini tidak memberi Amazon S3 izin yang memadai untuk mengikuti aturan replikasi Anda.

    penting

    Saat menambahkan aturan replikasi ke bucket, Anda harus memiliki izin iam:PassRole untuk dapat meneruskan peran IAM yang memberi izin Replikasi Amazon S3. Untuk informasi selengkapnya, lihat Memberikan izin pengguna untuk meneruskan peran ke Layanan AWS di Panduan Pengguna IAM.

  11. Untuk mereplikasi objek di bucket sumber yang dienkripsi dengan enkripsi sisi server dengan kunci AWS Key Management Service (AWS KMS) (SSE-KMS), di bawah Enkripsi, pilih Replikasi objek yang dienkripsi dengan. AWS KMS Di bawah AWS KMS kunci untuk mengenkripsi objek tujuan adalah kunci sumber yang dapat digunakan replikasi. Semua kunci sumber KMS disertakan secara default. Untuk mempersempit pilihan kunci KMS, Anda dapat memilih alias atau ID kunci.

    Objek yang dienkripsi oleh AWS KMS keys yang tidak Anda pilih tidak direplikasi. Kunci KMS atau kumpulan kunci KMS akan dipilih untuk Anda, tetapi Anda dapat memilih kunci KMS jika mau. Untuk informasi tentang menggunakan AWS KMS dengan replikasi, lihatMereplikasi objek terenkripsi (SSE-S3, SSE-KMS, SSE-KMS).

    penting

    Saat Anda mereplikasi objek yang dienkripsi AWS KMS, tingkat AWS KMS permintaan berlipat ganda di Wilayah sumber dan meningkat di Wilayah tujuan dengan jumlah yang sama. Tingkat panggilan yang meningkat ini disebabkan oleh cara data dienkripsi ulang dengan menggunakan kunci KMS yang Anda tentukan untuk Wilayah tujuan replikasi. AWS KMS AWS KMS memiliki kuota tarif permintaan per rekening panggilan per Region. Untuk informasi tentang default kuota, lihat Kuota AWS KMS -Permintaan per Detik: Bervariasi di Panduan Developer AWS Key Management Service .

    Jika tingkat permintaan PUT objek Amazon S3 saat ini selama replikasi lebih dari setengah batas AWS KMS tarif default untuk akun Anda, kami sarankan Anda meminta kenaikan kuota tingkat AWS KMS permintaan Anda. Untuk meminta peningkatan, buat kasus di Pusat AWS Support di Hubungi Kami. Misalnya, misalkan tingkat permintaan PUT objek Anda saat ini adalah 1.000 permintaan per detik dan Anda gunakan AWS KMS untuk mengenkripsi objek Anda. Dalam hal ini, kami menyarankan agar Anda meminta AWS Support untuk meningkatkan batas AWS KMS tarif Anda menjadi 2.500 permintaan per detik, baik di Wilayah sumber maupun tujuan Anda (jika berbeda), untuk memastikan bahwa tidak ada pembatasan oleh. AWS KMS

    Untuk melihat rasio permintaan PUT objek Anda di bucket sumber, lihat PutRequests di metrik CloudWatch permintaan Amazon untuk Amazon S3. Untuk informasi tentang melihat CloudWatch metrik, lihatMenggunakan konsol S3.

    Jika Anda memilih untuk mereplikasi objek yang dienkripsi AWS KMS, lakukan hal berikut:

    1. Di bawah AWS KMS key untuk mengenkripsi objek tujuan, tentukan kunci KMS Anda dengan salah satu cara berikut:

      • Untuk memilih dari daftar kunci KMS yang tersedia, pilih Pilih dari AWS KMS keys, dan pilih Kunci KMS Anda dari daftar kunci yang tersedia.

        Kunci Kunci yang dikelola AWS (aws/s3) dan kunci terkelola pelanggan Anda muncul dalam daftar ini. Untuk informasi selengkapnya tentang CMK, lihat Kunci pelanggan dan AWS kunci di AWS Key Management Service Panduan Pengembang.

      • Untuk memasukkan kunci KMS Amazon Resource Name (ARN), pilih Masukkan ARN AWS KMS key , dan masukkan ARN kunci KMS Anda di bidang yang muncul. Ini akan mengenkripsi replika di bucket tujuan. Anda dapat menemukan ARN untuk kunci KMS Anda di Konsol IAM, di bawah kunci Enkripsi.

      • Untuk membuat kunci terkelola pelanggan baru di AWS KMS konsol, pilih Buat kunci KMS.

        Untuk informasi selengkapnya tentang membuat AWS KMS key, lihat Membuat kunci di Panduan AWS Key Management Service Pengembang.

      penting

      Anda hanya dapat menggunakan tombol KMS yang diaktifkan Wilayah AWS sama dengan bucket. Saat memilih Pilih dari kunci KMS Anda, konsol S3 hanya mencantumkan 100 kunci KMS per Wilayah. Jika Anda memiliki lebih dari 100 tombol KMS di Wilayah yang sama, Anda hanya dapat melihat 100 kunci KMS pertama di konsol S3. Untuk menggunakan kunci KMS yang tidak tercantum di konsol, pilih Masukkan ARN AWS KMS key , lalu masukkan ARN kunci KMS Anda.

      Saat Anda menggunakan enkripsi sisi server AWS KMS key untuk Amazon S3, Anda harus memilih kunci KMS enkripsi simetris. Amazon S3 hanya mendukung kunci KMS enkripsi simetris dan tidak mendukung kunci KMS asimetris. Untuk informasi selengkapnya, lihat Mengidentifikasi tombol KMS simetris dan asimetris dalam Panduan Pengembang AWS Key Management Service .

      Untuk informasi selengkapnya tentang membuat AWS KMS key, lihat Membuat kunci di Panduan AWS Key Management Service Pengembang. Untuk informasi selengkapnya tentang penggunaan AWS KMS dengan Amazon S3, lihat. Menggunakan enkripsi sisi server dengan AWS KMS kunci (SSE-KMS)

  12. Di Bawah Kelas penyimpanan tujuan, jika Anda ingin mereplikasi data Anda ke dalam kelas penyimpanan tertentu di tujuan, pilih Ubah kelas penyimpanan untuk objek yang direplikasi. Kemudian pilih kelas penyimpanan yang ingin Anda gunakan untuk objek yang direplikasi di tujuan. Jika Anda tidak memilih opsi ini, kelas penyimpanan untuk objek yang direplikasi adalah kelas yang sama dengan objek aslinya.

  13. Anda memiliki opsi tambahan berikut saat mengatur Opsi replikasi tambahan:

    catatan

    Ketika Anda menggunakan metrik Replikasi S3 atau S3 RTC, biaya tambahan berlaku.

  14. Untuk menyelesaikan, pilih Simpan.

  15. Setelah menyimpan aturan, Anda dapat mengedit, mengaktifkan, menonaktifkan, atau menghapus aturan Anda dengan memilih aturan dan memilih Edit aturan.

Untuk menggunakan AWS CLI untuk mengatur replikasi ketika bucket sumber dan tujuan dimiliki oleh yang sama Akun AWS, Anda melakukan hal berikut:

  • Membuat bucket sumber dan tujuan

  • Mengaktifkan Penentuan Versi pada bucket

  • Membuat peran IAM yang memberikan izin Amazon S3 untuk mereplikasi objek

  • Menambahkan konfigurasi replikasi ke bucket sumber

Untuk memverifikasi konfigurasi, Anda mengujinya.

Untuk mengatur replikasi saat bucket sumber dan tujuan dimiliki oleh yang sama Akun AWS
  1. Atur profil kredensial untuk AWS CLI. Dalam contoh ini, kami menggunakan nama profil acctA. Untuk informasi tentang mengatur profil kredensial, lihat Profil Bernama di Panduan Pengguna AWS Command Line Interface .

    penting

    Profil yang Anda gunakan untuk latihan ini harus memiliki izin yang diperlukan. Misalnya, dalam konfigurasi replikasi, Anda menentukan peran IAM yang dapat diasumsikan oleh Amazon S3. Anda dapat melakukan ini hanya jika profil yang Anda gunakan memiliki izin iam:PassRole. Untuk informasi selengkapnya, lihat Memberikan Izin Pengguna untuk Meneruskan Peran ke Layanan AWS di Panduan Pengguna IAM. Jika Anda menggunakan kredensial administrator untuk membuat profil bernama, Anda dapat melakukan semua tugas.

  2. Buat source bucket dan aktifkan penentuan versi di dalamnya. Kode berikut membuat bucket source di Wilayah AS Timur (Virginia Utara) (us-east-1).

    aws s3api create-bucket \ --bucket source \ --region us-east-1 \ --profile acctA
    aws s3api put-bucket-versioning \ --bucket source \ --versioning-configuration Status=Enabled \ --profile acctA
  3. Buat destination bucket dan aktifkan penentuan versi di dalamnya. Kode berikut membuat bucket destination di Wilayah AS Barat (Oregon) (us-west-2).

    catatan

    Untuk mengatur konfigurasi replikasi saat bucket sumber dan tujuan berada di tempat yang sama Akun AWS, Anda menggunakan profil yang sama. Contoh ini menggunakan acctA. Untuk menguji konfigurasi replikasi ketika bucket dimiliki oleh yang berbeda Akun AWS, Anda menentukan profil yang berbeda untuk masing-masing. Contoh ini menggunakan profil acctB untuk bucket tujuan.

    aws s3api create-bucket \ --bucket destination \ --region us-west-2 \ --create-bucket-configuration LocationConstraint=us-west-2 \ --profile acctA
    aws s3api put-bucket-versioning \ --bucket destination \ --versioning-configuration Status=Enabled \ --profile acctA
  4. Buat peran IAM. Anda menentukan peran ini dalam konfigurasi replikasi yang Anda tambahkan ke bucket sumber nanti. Amazon S3 mengasumsikan peran ini untuk mereplikasi objek atas nama Anda. Anda membuat peran IAM dalam dua langkah:

    • Buat peran.

    • Lampirkan kebijakan izin pada peran tersebut.

    1. Buat peran IAM.

      1. Salin kebijakan kepercayaan berikut dan simpan di berkas dengan nama s3-role-trust-policy.json di direktori saat ini di komputer lokal Anda. Kebijakan ini memberi Amazon S3 izin pengguna utama layanan untuk mengasumsikan peran tersebut.

        { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"s3.amazonaws.com" }, "Action":"sts:AssumeRole" } ] }
      2. Jalankan perintah berikut untuk membuat peran.

        $ aws iam create-role \ --role-name replicationRole \ --assume-role-policy-document file://s3-role-trust-policy.json \ --profile acctA
    2. Lampirkan kebijakan izin pada peran tersebut.

      1. Salin kebijakan kepercayaan berikut dan simpan di berkas dengan nama s3-role-permissions-policy.json di direktori saat ini di komputer lokal Anda. Kebijakan ini memberikan izin untuk berbagai bucket dan tindakan objek Amazon S3.

        { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging" ], "Resource":[ "arn:aws:s3:::source-bucket/*" ] }, { "Effect":"Allow", "Action":[ "s3:ListBucket", "s3:GetReplicationConfiguration" ], "Resource":[ "arn:aws:s3:::source-bucket" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ReplicateTags" ], "Resource":"arn:aws:s3:::destination-bucket/*" } ] }
      2. Jalankan perintah berikut untuk membuat kebijakan dan melampirkannya ke peran.

        $ aws iam put-role-policy \ --role-name replicationRole \ --policy-document file://s3-role-permissions-policy.json \ --policy-name replicationRolePolicy \ --profile acctA
  5. Tambahkan konfigurasi replikasi ke bucket source.

    1. Meskipun Amazon S3 API memerlukan konfigurasi replikasi sebagai XHTML, Anda harus menentukan konfigurasi replikasi sebagai JSON. AWS CLI Simpan JSON berikut dalam file yang disebut replication.json ke direktori lokal di komputer Anda.

      { "Role": "IAM-role-ARN", "Rules": [ { "Status": "Enabled", "Priority": 1, "DeleteMarkerReplication": { "Status": "Disabled" }, "Filter" : { "Prefix": "Tax"}, "Destination": { "Bucket": "arn:aws:s3:::destination-bucket" } } ] }
    2. Perbarui JSON dengan memberikan nilai untuk destination-bucket dan IAM-role-ARN. Simpan perubahan.

    3. Jalankan perintah berikut untuk menambahkan konfigurasi replikasi ke bucket sumber Anda. Pastikan untuk memberikan nama bucket source.

      $ aws s3api put-bucket-replication \ --replication-configuration file://replication.json \ --bucket source \ --profile acctA

    Untuk mengambil konfigurasi replikasi, gunakan perintah get-bucket-replication.

    $ aws s3api get-bucket-replication \ --bucket source \ --profile acctA
  6. Uji pengaturan di konsol Amazon S3:

    1. Masuk ke AWS Management Console dan buka konsol Amazon S3 di https://console.aws.amazon.com/s3/.

    2. Di bucket source, buat folder dengan nama Tax.

    3. Tambahkan sampel objek ke folder Tax di bucket source.

      catatan

      Jumlah waktu yang diperlukan Amazon S3 untuk mereplikasi objek tergantung pada ukuran objek. Untuk informasi tentang cara melihat status replikasi, lihat Mendapatkan informasi status replikasi.

      Di destination bucket, verifikasi hal berikut:

      • Bahwa Amazon S3 mereplikasi objek.

      • Dalam objek properti, bahwa Status Replikasi ditetapkan menjadi Replica (mengidentifikasi ini sebagai objek replika).

      • Dalam objek properti, bahwa bagian izin menunjukkan tidak ada izin. Artinya replika masih dimiliki oleh pemilik bucket source, dan pemilik bucket destination tidak memiliki izin atas replika objek. Anda dapat menambahkan konfigurasi opsional guna memberi tahu Amazon S3 untuk mengubah kepemilikan replika. Sebagai contoh, lihat Cara mengganti pemilik replika.

        Ambil tangkapan layar dari properti objek yang menunjukkan izin dan status replikasi.

Gunakan contoh kode berikut untuk menambahkan konfigurasi replikasi ke bucket dengan AWS SDK for Java dan AWS SDK for .NET, masing-masing.

Java

Contoh berikut ini menambahkan konfigurasi replikasi ke bucket dan kemudian mengambil dan memverifikasi konfigurasi. Untuk petunjuk cara membuat dan menguji sampel yang berfungsi, lihat Memulai di Panduan AWS SDK for Java Pengembang.

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.identitymanagement.AmazonIdentityManagement; import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder; import com.amazonaws.services.identitymanagement.model.CreateRoleRequest; import com.amazonaws.services.identitymanagement.model.PutRolePolicyRequest; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.BucketReplicationConfiguration; import com.amazonaws.services.s3.model.BucketVersioningConfiguration; import com.amazonaws.services.s3.model.CreateBucketRequest; import com.amazonaws.services.s3.model.DeleteMarkerReplication; import com.amazonaws.services.s3.model.DeleteMarkerReplicationStatus; import com.amazonaws.services.s3.model.ReplicationDestinationConfig; import com.amazonaws.services.s3.model.ReplicationRule; import com.amazonaws.services.s3.model.ReplicationRuleStatus; import com.amazonaws.services.s3.model.SetBucketVersioningConfigurationRequest; import com.amazonaws.services.s3.model.StorageClass; import com.amazonaws.services.s3.model.replication.ReplicationFilter; import com.amazonaws.services.s3.model.replication.ReplicationFilterPredicate; import com.amazonaws.services.s3.model.replication.ReplicationPrefixPredicate; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class CrossRegionReplication { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String accountId = "*** Account ID ***"; String roleName = "*** Role name ***"; String sourceBucketName = "*** Source bucket name ***"; String destBucketName = "*** Destination bucket name ***"; String prefix = "Tax/"; String roleARN = String.format("arn:aws:iam::%s:%s", accountId, roleName); String destinationBucketARN = "arn:aws:s3:::" + destBucketName; AmazonS3 s3Client = AmazonS3Client.builder() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); createBucket(s3Client, clientRegion, sourceBucketName); createBucket(s3Client, clientRegion, destBucketName); assignRole(roleName, clientRegion, sourceBucketName, destBucketName); try { // Create the replication rule. List<ReplicationFilterPredicate> andOperands = new ArrayList<ReplicationFilterPredicate>(); andOperands.add(new ReplicationPrefixPredicate(prefix)); Map<String, ReplicationRule> replicationRules = new HashMap<String, ReplicationRule>(); replicationRules.put("ReplicationRule1", new ReplicationRule() .withPriority(0) .withStatus(ReplicationRuleStatus.Enabled) .withDeleteMarkerReplication( new DeleteMarkerReplication().withStatus( DeleteMarkerReplicationStatus.DISABLED)) .withFilter(new ReplicationFilter().withPredicate( new ReplicationPrefixPredicate(prefix))) .withDestinationConfig(new ReplicationDestinationConfig() .withBucketARN(destinationBucketARN) .withStorageClass(StorageClass.Standard))); // Save the replication rule to the source bucket. s3Client.setBucketReplicationConfiguration(sourceBucketName, new BucketReplicationConfiguration() .withRoleARN(roleARN) .withRules(replicationRules)); // Retrieve the replication configuration and verify that the configuration // matches the rule we just set. BucketReplicationConfiguration replicationConfig = s3Client .getBucketReplicationConfiguration(sourceBucketName); ReplicationRule rule = replicationConfig.getRule("ReplicationRule1"); System.out.println("Retrieved destination bucket ARN: " + rule.getDestinationConfig().getBucketARN()); System.out.println("Retrieved priority: " + rule.getPriority()); System.out.println("Retrieved source-bucket replication rule status: " + rule.getStatus()); } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } private static void createBucket(AmazonS3 s3Client, Regions region, String bucketName) { CreateBucketRequest request = new CreateBucketRequest(bucketName, region.getName()); s3Client.createBucket(request); BucketVersioningConfiguration configuration = new BucketVersioningConfiguration() .withStatus(BucketVersioningConfiguration.ENABLED); SetBucketVersioningConfigurationRequest enableVersioningRequest = new SetBucketVersioningConfigurationRequest( bucketName, configuration); s3Client.setBucketVersioningConfiguration(enableVersioningRequest); } private static void assignRole(String roleName, Regions region, String sourceBucket, String destinationBucket) { AmazonIdentityManagement iamClient = AmazonIdentityManagementClientBuilder.standard() .withRegion(region) .withCredentials(new ProfileCredentialsProvider()) .build(); StringBuilder trustPolicy = new StringBuilder(); trustPolicy.append("{\\r\\n "); trustPolicy.append("\\\"Version\\\":\\\"2012-10-17\\\",\\r\\n "); trustPolicy.append("\\\"Statement\\\":[\\r\\n {\\r\\n "); trustPolicy.append("\\\"Effect\\\":\\\"Allow\\\",\\r\\n \\\"Principal\\\":{\\r\\n "); trustPolicy.append("\\\"Service\\\":\\\"s3.amazonaws.com\\\"\\r\\n },\\r\\n "); trustPolicy.append("\\\"Action\\\":\\\"sts:AssumeRole\\\"\\r\\n }\\r\\n ]\\r\\n}"); CreateRoleRequest createRoleRequest = new CreateRoleRequest() .withRoleName(roleName) .withAssumeRolePolicyDocument(trustPolicy.toString()); iamClient.createRole(createRoleRequest); StringBuilder permissionPolicy = new StringBuilder(); permissionPolicy.append( "{\\r\\n \\\"Version\\\":\\\"2012-10-17\\\",\\r\\n \\\"Statement\\\":[\\r\\n {\\r\\n "); permissionPolicy.append( "\\\"Effect\\\":\\\"Allow\\\",\\r\\n \\\"Action\\\":[\\r\\n "); permissionPolicy.append("\\\"s3:GetObjectVersionForReplication\\\",\\r\\n "); permissionPolicy.append( "\\\"s3:GetObjectVersionAcl\\\"\\r\\n ],\\r\\n \\\"Resource\\\":[\\r\\n "); permissionPolicy.append("\\\"arn:aws:s3:::"); permissionPolicy.append(sourceBucket); permissionPolicy.append("/*\\\"\\r\\n ]\\r\\n },\\r\\n {\\r\\n "); permissionPolicy.append( "\\\"Effect\\\":\\\"Allow\\\",\\r\\n \\\"Action\\\":[\\r\\n "); permissionPolicy.append( "\\\"s3:ListBucket\\\",\\r\\n \\\"s3:GetReplicationConfiguration\\\"\\r\\n "); permissionPolicy.append("],\\r\\n \\\"Resource\\\":[\\r\\n \\\"arn:aws:s3:::"); permissionPolicy.append(sourceBucket); permissionPolicy.append("\\r\\n "); permissionPolicy .append("]\\r\\n },\\r\\n {\\r\\n \\\"Effect\\\":\\\"Allow\\\",\\r\\n "); permissionPolicy.append( "\\\"Action\\\":[\\r\\n \\\"s3:ReplicateObject\\\",\\r\\n "); permissionPolicy .append("\\\"s3:ReplicateDelete\\\",\\r\\n \\\"s3:ReplicateTags\\\",\\r\\n "); permissionPolicy.append("\\\"s3:GetObjectVersionTagging\\\"\\r\\n\\r\\n ],\\r\\n "); permissionPolicy.append("\\\"Resource\\\":\\\"arn:aws:s3:::"); permissionPolicy.append(destinationBucket); permissionPolicy.append("/*\\\"\\r\\n }\\r\\n ]\\r\\n}"); PutRolePolicyRequest putRolePolicyRequest = new PutRolePolicyRequest() .withRoleName(roleName) .withPolicyDocument(permissionPolicy.toString()) .withPolicyName("crrRolePolicy"); iamClient.putRolePolicy(putRolePolicyRequest); } }
C#

Contoh AWS SDK for .NET kode berikut menambahkan konfigurasi replikasi ke bucket dan kemudian mengambilnya. Untuk menggunakan kode ini, berikan nama untuk bucket Anda dan Amazon Resource Name (ARN) untuk peran IAM Anda. Untuk informasi tentang menyiapkan dan menjalankan contoh kode, lihat Memulai SDK for .NET di AWSAWS SDK for .NET Developer Guide.

using Amazon; using Amazon.S3; using Amazon.S3.Model; using System; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class CrossRegionReplicationTest { private const string sourceBucket = "*** source bucket ***"; // Bucket ARN example - arn:aws:s3:::destinationbucket private const string destinationBucketArn = "*** destination bucket ARN ***"; private const string roleArn = "*** IAM Role ARN ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint sourceBucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 s3Client; public static void Main() { s3Client = new AmazonS3Client(sourceBucketRegion); EnableReplicationAsync().Wait(); } static async Task EnableReplicationAsync() { try { ReplicationConfiguration replConfig = new ReplicationConfiguration { Role = roleArn, Rules = { new ReplicationRule { Prefix = "Tax", Status = ReplicationRuleStatus.Enabled, Destination = new ReplicationDestination { BucketArn = destinationBucketArn } } } }; PutBucketReplicationRequest putRequest = new PutBucketReplicationRequest { BucketName = sourceBucket, Configuration = replConfig }; PutBucketReplicationResponse putResponse = await s3Client.PutBucketReplicationAsync(putRequest); // Verify configuration by retrieving it. await RetrieveReplicationConfigurationAsync(s3Client); } catch (AmazonS3Exception e) { Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message); } catch (Exception e) { Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message); } } private static async Task RetrieveReplicationConfigurationAsync(IAmazonS3 client) { // Retrieve the configuration. GetBucketReplicationRequest getRequest = new GetBucketReplicationRequest { BucketName = sourceBucket }; GetBucketReplicationResponse getResponse = await client.GetBucketReplicationAsync(getRequest); // Print. Console.WriteLine("Printing replication configuration information..."); Console.WriteLine("Role ARN: {0}", getResponse.Configuration.Role); foreach (var rule in getResponse.Configuration.Rules) { Console.WriteLine("ID: {0}", rule.Id); Console.WriteLine("Prefix: {0}", rule.Prefix); Console.WriteLine("Status: {0}", rule.Status); } } } }