Mengonfigurasi akses ke sumber: Amazon S3

Anda dapat menyiapkan akses ke bucket Amazon S3 menggunakan salah satu dari dua metode:

Region yang didukung

Storage Transfer Service mendukung wilayah Amazon S3 berikut:
af-south-1
ap-east-1
ap-northeast-1
ap-northeast-2
ap-northeast-3
ap-south-1
ap-south-2
ap-southeast-1
ap-southeast-2
ap-southeast-3
ap-southeast-4
ca-central-1
ca-west-1
eu-central-1
eu-central-2
eu-north-1
eu-south-1
eu-south-2
eu-west-1
eu-west-2
eu-west-3
il-central-1
me-central-1
me-south-1
sa-east-1
us-east-1
us-east-2
us-west-1
us-west-2
Transfer menggunakan jaringan pribadi terkelola mendukung region AWS berikut:
ap-east-1
ap-northeast-1
ap-northeast-2
ap-northeast-3
ap-south-1
ap-south-2
ap-southeast-1
ca-central-1
ca-west-1
eu-central-1
eu-central-2
eu-north-1
eu-south-1
eu-south-2
eu-west-1
eu-west-2
eu-west-3
us-east-1
us-east-2
us-west-1
us-west-2
 

Izin yang diperlukan

Untuk menggunakan Storage Transfer Service guna memindahkan data dari bucket Amazon S3, akun pengguna atau peran identitas gabungan Anda harus memiliki izin yang sesuai untuk bucket tersebut:

Izin Deskripsi Gunakan
s3:ListBucket Mengizinkan Storage Transfer Service mencantumkan objek di bucket. Selalu diwajibkan.
s3:GetObject Mengizinkan Storage Transfer Service membaca objek di bucket. Wajib jika Anda mentransfer versi saat ini dari semua objek. Jika manifes Anda menentukan versi objek, gunakan s3:GetObjectVersion sebagai gantinya.
s3:GetObjectVersion Mengizinkan Storage Transfer Service membaca versi objek tertentu di bucket. Wajib jika manifes Anda menentukan versi objek. Jika tidak, gunakan s3:GetObject.
s3:DeleteObject Mengizinkan Storage Transfer Service menghapus objek di bucket. Wajib jika Anda menetapkan deleteObjectsFromSourceAfterTransfer ke true.

Melakukan autentikasi menggunakan kredensial akses

Untuk menggunakan ID kunci akses dan kunci rahasia untuk melakukan autentikasi ke AWS:

  1. Buat pengguna AWS Identity and Access Management (AWS IAM) dengan nama yang dapat Anda kenali dengan mudah, seperti transfer-user.

  2. Untuk jenis akses AWS, pilih Kunci akses - akses terprogram.

  3. Berikan salah satu peran berikut kepada pengguna:

    • AmazonS3ReadOnlyAccess untuk memberikan akses hanya baca ke sumber. Opsi ini memungkinkan transfer, tetapi tidak mendukung penghapusan objek di sumber setelah transfer selesai.
    • AmazonS3FullAccess jika transfer Anda dikonfigurasi untuk menghapus objek di sumber.
    • Peran khusus dengan izin yang sesuai dari tabel Izin yang diperlukan di atas. JSON untuk izin minimum terlihat seperti contoh di bawah:

      {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:ListBucket"
                ],
                "Resource": [
                    "arn:aws:s3:::AWS_BUCKET_NAME/*",
                    "arn:aws:s3:::AWS_BUCKET_NAME"
                ]
            }
        ]
      }
  4. Catat ID kunci akses dan kunci akses rahasia saat pengguna berhasil dibuat.

Cara Anda meneruskan ID kunci akses dan kunci akses rahasia ke Storage Transfer Service bergantung pada antarmuka yang Anda gunakan untuk memulai transfer.

Cloud Console

Masukkan nilai langsung ke formulir pembuatan tugas transfer.

Lihat Membuat transfer untuk mulai menggunakan fitur ini.

gcloud CLI

Buat file JSON dengan format berikut:

{
  "accessKeyId": "AWS_ACCESS_KEY_ID",
  "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}

Teruskan lokasi file ke perintah gcloud transfer jobs create menggunakan flag source-creds-file:

gcloud transfer jobs create s3://S3_BUCKET_NAME gs://GCS_BUCKET_NAME \
  --source-creds-file=PATH/TO/KEYFILE.JSON

REST API

Objek transferSpec Anda harus berisi info utama sebagai bagian dari objek awsS3DataSource:

"transferSpec": {
  "awsS3DataSource": {
    "bucketName": "AWS_SOURCE_NAME",
    "awsAccessKey": {
      "accessKeyId": "AWS_ACCESS_KEY_ID",
      "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
    }
  },
  "gcsDataSink": {
    "bucketName": "GCS_SINK_NAME"
  }
}

Library klien

Lihat contoh di halaman Membuat transfer.

Menyimpan kredensial akses Anda di Secret Manager

Secret Manager adalah layanan aman yang menyimpan dan mengelola data sensitif seperti sandi. Layanan ini menggunakan enkripsi yang kuat, kontrol akses berbasis peran, dan logging audit untuk melindungi rahasia Anda.

Storage Transfer Service dapat memanfaatkan Secret Manager untuk melindungi kredensial akses AWS Anda. Anda memuat kredensial ke Secret Manager, lalu meneruskan nama resource secret ke Storage Transfer Service.

Mengaktifkan API

Enable the Secret Manager API.

Enable the API

Mengonfigurasi izin tambahan

Izin pengguna

Pengguna yang membuat secret memerlukan peran berikut:

  • Secret Manager Admin (roles/secretmanager.admin)

Pelajari cara memberikan peran.

Izin agen layanan

Agen layanan Storage Transfer Service memerlukan peran IAM berikut:

  • Secret Manager Secret Accessor (roles/secretmanager.secretAccessor)

Untuk memberikan peran ke agen layanan Anda:

Cloud Console

  1. Ikuti petunjuk untuk mengambil email agen layanan Anda.

  2. Buka halaman IAM di konsol Google Cloud .

    Buka IAM

  3. Klik Grant access.

  4. Di kotak teks New principals, masukkan email agen layanan.

  5. Di drop-down Pilih peran, telusuri dan pilih Secret Manager Secret Accessor.

  6. Klik Simpan.

gcloud

Gunakan perintah gcloud projects add-iam-policy-binding untuk menambahkan peran IAM ke agen layanan Anda.

  1. Ikuti petunjuk untuk mengambil email agen layanan Anda.

  2. Dari command line, masukkan perintah berikut:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:SERVICE_AGENT_EMAIL' \
      --role='roles/secretmanager.secretAccessor'
    

Membuat secret

Buat secret dengan Secret Manager:

Cloud Console

  1. Buka halaman Secret Manager di konsol Google Cloud .

    Buka Secret Manager

  2. Klik Buat secret.

  3. Masukkan nama.

  4. Di kotak teks Secret value, masukkan kredensial Anda dalam format berikut:

    {
      "accessKeyId": "AWS_ACCESS_KEY_ID",
      "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
    }
    
  5. Klik Buat secret.

  6. Setelah secret dibuat, catat nama resource lengkap secret:

    1. Pilih tab Ringkasan.

    2. Salin nilai ID Resource. Menggunakan format berikut:

      projects/1234567890/secrets/SECRET_NAME

gcloud

Untuk membuat secret baru menggunakan alat command line gcloud, teruskan kredensial berformat JSON ke perintah gcloud secrets create:

printf '{
  "accessKeyId": "AWS_ACCESS_KEY_ID",
  "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}' | gcloud secrets create SECRET_NAME --data-file=-

Ambil nama lengkap resource rahasia:

gcloud secrets describe SECRET_NAME

Catat nilai name dalam respons. Menggunakan format berikut:

projects/1234567890/secrets/SECRET_NAME

Untuk mengetahui detail selengkapnya tentang cara membuat dan mengelola secret, lihat dokumentasi Secret Manager.

Teruskan rahasia Anda ke perintah pembuatan tugas

Penggunaan Secret Manager dengan Storage Transfer Service mengharuskan penggunaan REST API untuk membuat tugas transfer.

Teruskan nama resource Secret Manager sebagai nilai kolom transferSpec.awsS3DataSource.credentialsSecret:

POST https://storagetransfer.googleapis.com/v1/transferJobs

{
  "description": "Transfer with Secret Manager",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "transferSpec": {
      "awsS3DataSource": {
          "bucketName": "AWS_BUCKET_NAME",
          "credentialsSecret": "SECRET_RESOURCE_ID",
      },
      "gcsDataSink": {
          "bucketName": "CLOUD_STORAGE_BUCKET_NAME"
      }
  }
}

Melakukan autentikasi menggunakan identitas gabungan

Untuk menggunakan identitas gabungan guna melakukan autentikasi ke AWS:

  1. Buat peran IAM baru di AWS.

  2. Pilih Kebijakan kepercayaan kustom sebagai jenis entitas tepercaya.

  3. Salin dan tempel kebijakan kepercayaan berikut:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "accounts.google.com"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "accounts.google.com:sub": "SUBJECT_ID"
            }
          }
        }
      ]
    }
    
  4. Ganti SUBJECT_ID dengan subjectID akun layanan yang dikelola Google yang dibuat secara otomatis saat Anda mulai menggunakan Storage Transfer Service. Untuk mengambil subjectID:

    1. Buka halaman referensi googleServiceAccounts.get.

      Panel interaktif akan terbuka, berjudul Coba metode ini.

    2. Di panel, di bagian Parameter permintaan, masukkan ID project Anda. Project yang Anda tentukan di sini harus berupa project yang Anda gunakan untuk mengelola Storage Transfer Service.

    3. Klik Jalankan. subjectId disertakan dalam respons.

  5. Berikan salah satu kebijakan izin berikut ke peran:

    • AmazonS3ReadOnlyAccess memberikan akses hanya baca ke sumber. Opsi ini memungkinkan transfer, tetapi tidak mendukung penghapusan objek di sumber setelah transfer selesai.
    • AmazonS3FullAccess jika transfer Anda dikonfigurasi untuk menghapus objek di sumber.
    • Peran khusus dengan izin yang sesuai dari tabel Izin yang diperlukan di atas. JSON untuk izin minimum terlihat seperti contoh di bawah:

      {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:ListBucket"
                ],
                "Resource": [
                    "arn:aws:s3:::AWS_BUCKET_NAME/*",
                    "arn:aws:s3:::AWS_BUCKET_NAME"
                ]
            }
        ]
      }
  6. Tetapkan nama untuk peran dan buat peran.

  7. Setelah dibuat, lihat detail peran untuk mengambil Amazon Resource Name (ARN). Catat nilai ini; formatnya adalah arn:aws:iam::AWS_ACCOUNT:role/ROLE_NAME.

Cara Anda meneruskan ARN ke Storage Transfer Service bergantung pada antarmuka yang Anda gunakan untuk memulai transfer.

Cloud Console

Masukkan ARN langsung ke formulir pembuatan tugas transfer.

Lihat Membuat transfer untuk mulai menggunakan fitur ini.

gcloud CLI

Buat file JSON dengan format berikut:

{
  "roleArn": "ARN"
}

Teruskan lokasi file ke perintah gcloud transfer jobs create menggunakan flag source-creds-file:

gcloud transfer jobs create s3://S3_BUCKET_NAME gs://GCS_BUCKET_NAME \
  --source-creds-file=PATH/TO/ARNFILE.JSON

REST API

Objek transferSpec Anda harus berisi info ARN sebagai bagian dari objek awsS3DataSource:

"transferSpec": {
  "awsS3DataSource": {
    "bucketName": "AWS_SOURCE_NAME",
    "roleArn": "ARN"
  },
  "gcsDataSink": {
    "bucketName": "GCS_SINK_NAME"
  }
}

Library klien

Lihat contoh di halaman Membuat transfer.

Pembatasan IP

Jika project AWS Anda menggunakan pembatasan IP untuk akses ke penyimpanan, Anda harus menambahkan rentang IP yang digunakan oleh pekerja Storage Transfer Service ke daftar IP yang diizinkan.

Karena rentang IP ini dapat berubah, kami memublikasikan nilai saat ini sebagai file JSON di alamat permanen:

https://www.gstatic.com/storage-transfer-service/ipranges.json

Saat rentang baru ditambahkan ke file, kami akan menunggu setidaknya 7 hari sebelum menggunakan rentang tersebut untuk permintaan dari Storage Transfer Service.

Sebaiknya tarik data dari dokumen ini setidaknya setiap minggu agar konfigurasi keamanan Anda tetap terbaru. Untuk contoh skrip Python yang mengambil rentang IP dari file JSON, lihat artikel ini dari dokumentasi Virtual Private Cloud.

Untuk menambahkan rentang ini sebagai IP yang diizinkan, gunakan kolom Condition dalam kebijakan bucket, seperti yang dijelaskan dalam dokumentasi AWS S3: Mengelola akses berdasarkan alamat IP tertentu.