Memberikan dan mendapatkan akses bucket penyimpanan untuk project

Halaman ini memandu Anda mengelola akses ke bucket penyimpanan dalam project Google Distributed Cloud (GDC) dengan air gap, sehingga orang yang tepat memiliki izin yang tepat. Panduan ini membahas prasyarat dan langkah-langkah untuk mendapatkan dan memberikan akses akun pengguna dan akun layanan menggunakan binding peran dan peran bawaan. Informasi ini memungkinkan Anda mengontrol akses ke resource penyimpanan secara efektif serta menjaga keamanan dan efisiensi operasional.

Halaman ini ditujukan untuk audiens seperti admin IT dalam grup operator infrastruktur atau developer dalam grup operator aplikasi yang mengelola setelan akses untuk bucket penyimpanan di lingkungan GDC dengan air gap. Untuk mengetahui informasi selengkapnya, lihat Audiens untuk dokumentasi GDC dengan air gap.

Sebelum memulai

Namespace project mengelola resource bucket di server Management API. Anda harus memiliki project untuk menggunakan bucket dan objek.

Memberikan akses bucket

Anda dapat memberikan akses ke resource S3 API, seperti bucket dan objek dalam bucket tersebut, ke subjek User dan ServiceAccount dengan membuat dan menerapkan RoleBinding yang mereferensikan Peran yang telah ditetapkan di server API Management.

Peran yang telah ditetapkan

  • project-bucket-object-viewer: Peran ini memungkinkan pengguna mencantumkan semua bucket dalam project, mencantumkan objek dalam bucket tersebut, serta membaca objek dan metadata objek. Peran ini tidak mengizinkan Anda menulis operasi pada objek. Misalnya: mengupload, menimpa, menghapus. Memiliki akses hanya baca pada bucket dual-region dalam organisasi dan project-nya, serta akses hanya baca pada objek dalam bucket tersebut.

  • project-bucket-object-admin: Peran ini memungkinkan pengguna mencantumkan semua bucket dalam project, serta menulis dan membaca operasi pada objek. Misalnya: mengupload, menimpa, menghapus. Memiliki akses hanya baca pada bucket dual-region dalam organisasi dan project-nya, serta akses baca-tulis pada objek dalam bucket tersebut.

  • project-bucket-admin: Peran ini memungkinkan pengguna mengelola semua bucket di namespace tertentu, serta semua objek di bucket tersebut. Memiliki akses hanya baca pada bucket dual-region dalam organisasi dan project-nya, serta akses baca-tulis pada objek dalam bucket tersebut.

Untuk melihat daftar lengkap izin yang diberikan untuk peran sebelumnya, lihat bagian izin peran bawaan.

Anda harus memiliki peran IAM Project Admin untuk project tersebut agar dapat membuat binding peran dalam project tersebut. Berikut adalah contoh pembuatan resource RoleBinding yang memberikan akses kepada pengguna dan akun layanan:

  1. Buat file YAML di sistem Anda, seperti rolebinding-object-admin-all-buckets.yaml.

    # Example file name:
    # rolebinding-object-admin-all-buckets.yaml
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      namespace: PROJECT_NAMESPACE
      name: readwrite-all-buckets
    roleRef:
      kind: Role
      name: project-bucket-object-admin
      apiGroup: rbac.authorization.k8s.io
    subjects:
    - kind: ServiceAccount
      namespace: PROJECT_NAMESPACE
      name: SA_NAME
    - kind: User
      namespace: PROJECT_NAMESPACE
      name: bob@example.com
      apiGroup: rbac.authorization.k8s.io
      # Could be bob or bob@example.com based on your organization settings.
    

    Ganti kode berikut:

    • PROJECT_NAMESPACE: nama namespace project
    • SA_NAME: nama akun layanan

  2. Terapkan file YAML:

    kubectl apply \
    -f rolebinding-object-admin-all-buckets.yaml
    

Mendapatkan kredensial akses bucket

Setelah Anda memberikan akses ke bucket, kredensial akses akan dibuat di Secret.

Format nama secret adalah object-storage-key-STORAGE_CLASS-SUBJECT_TYPE-SUBJECT_HASH.

  • Nilai untuk STORAGE_CLASS adalah:
    • std untuk kelas penyimpanan Standard.
  • Nilai untuk SUBJECT_TYPE adalah:
    • user untuk Pengguna.
    • sa untuk ServiceAccount.
  • SUBJECT_HASH adalah hash SHA256 berenkode base32 dari nama subjek.

Sebagai contoh, pengguna bob@foo.com memiliki dua secret bernama:

  1. object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja

Mendapatkan akses pengguna

Untuk subjek pengguna, Secret berada di namespace object-storage-access-keys di server Management API.

  1. Jalankan perintah berikut untuk menemukan nama secret:

    kubectl auth can-i --list --namespace object-storage-access-keys | grep "object-storage-key-"
    

    Anda akan menerima output yang mirip dengan berikut ini:

    secrets        []        [object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja]        [get]
    
  2. Dapatkan konten secret yang sesuai untuk mengakses bucket di kelas penyimpanan Standard:

    kubectl get -o yaml --namespace object-storage-access-keys secret object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja
    

    Anda akan menerima output yang mirip dengan berikut ini:

    data:
      access-key-id: MEhYM08wWUMySjcyMkVKTFBKRU8=
      create-time: MjAyMi0wNy0yMiAwMTowODo1OS40MTQyMTE3MDMgKzAwMDAgVVRDIG09KzE5OTAuMzQ3OTE2MTc3
      secret-access-key: Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==
    
  3. Dekode ID kunci akses dan rahasia:

    echo "MEhYM08wWUMySjcyMkVKTFBKRU8=" | base64 -d \
        && echo \
        && echo "Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==" | base64 -d
    

    Anda akan menerima output yang mirip dengan berikut ini:

    0HX3O0YC2J722EJLPJEO
    Rjt1TeySxJhBIRanigT00m2YsB/FRUzwjGBnaXbT
    
  4. Ikuti bagian Mengonfigurasi gdcloud CLI, dengan informasi yang dihasilkan.

Mendapatkan akses akun layanan

Kredensial rahasia S3 hanya dibuat dan tersedia untuk diperoleh jika bucket ada di namespace project.

Untuk subjek akun layanan (SA), temukan nama secret dari cluster pengguna.

  1. Untuk Standard Storage, jalankan perintah berikut untuk mendapatkan nama Secret:

    kubectl get -n=<PROJECT-NAME> serviceaccount <SA-NAME> -o json | jq -r '.secrets[] | select(.name | test("object-storage-key-std"))'
    
  2. Cari secara manual melalui nama secret yang tercantum, atau gunakan grep untuk menemukan object-storage-key-(std|nl):

    kubectl get -n=PROJECT_NAME \
        serviceaccount SA_NAME \
        -o=jsonpath='{.secrets}{"\n"}' | grep -E 'object-storage-key-(std|nl)'
    

    Ganti kode berikut:

    • PROJECT_NAME: nama project Anda.
    • SA_NAME: nama akun layanan Anda.
  3. Anda dapat mereferensikan Secret di pod sebagai variabel lingkungan atau file.

Izin peran preset

Peran bawaan tersedia di server API global untuk akses administratif dan operasional ke bucket dua zona. Peran ini juga memberikan akses ke bucket zona, tetapi hanya jika resource IAMRoleBinding digunakan, bukan resource RoleBinding atau ClusterRoleBinding. Untuk mengetahui informasi selengkapnya tentang binding peran, lihat Memberikan dan mencabut akses.

Izin project-bucket-object-viewer

Peran ini memberikan izin untuk mendapatkan dan mencantumkan objek serta metadata objek di bucket.

Daftar semua izin penyimpanan objek yang diberikan oleh project-bucket-object-viewer Role adalah sebagai berikut:

  • Izin API bucket:

    1. get
    2. list
    3. watch
  • Izin penyimpanan objek S3:

    1. GetObject
    2. GetObjectAcl
    3. GetObjectLegalHold
    4. GetObjectRetention
    5. GetObjectTagging
    6. GetObjectVersion
    7. GetObjectVersionTagging
    8. ListBucket
    9. ListBucketVersions
    10. ListBucketMultipartUploads
    11. ListMultipartUploadParts

Izin project-bucket-object-admin

Peran ini memberikan izin untuk menempatkan dan menghapus objek, serta versi dan tag objek di bucket. Selain itu, peran ini juga memberikan semua izin di project-bucket-object-viewer.

Daftar semua izin penyimpanan objek tambahan yang diberikan Role adalah sebagai berikut:

  • Izin penyimpanan objek S3:

    1. AbortMultipartUpload
    2. DeleteObject
    3. DeleteObjectTagging
    4. DeleteObjectVersion
    5. DeleteObjectVersionTagging
    6. PutObject
    7. PutObjectTagging
    8. PutObjectVersionTagging
    9. PutOverwriteObject
    10. RestoreObject

izin project-bucket-admin

Peran ini memberikan izin untuk membuat, memperbarui, atau menghapus resource Bucket di namespace project. Selain itu, peran ini juga memberikan semua izin di project-bucket-object-admin.

Daftar izin tambahan yang diberikan Role adalah sebagai berikut:

  • Izin API bucket:

    1. Buat
    2. Perbarui
    3. Hapus