Memberikan dan mendapatkan akses bucket penyimpanan

Halaman ini memandu Anda cara mengelola akses ke bucket penyimpanan dalam project air-gapped Google Distributed Cloud (GDC), sehingga orang yang tepat memiliki izin yang tepat. Dokumen ini mencakup prasyarat dan langkah-langkah untuk mendapatkan dan memberikan akses 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 bagi audiens seperti administrator IT dalam grup operator infrastruktur atau developer dalam grup operator aplikasi yang mengelola setelan akses untuk bucket penyimpanan di lingkungan yang terisolasi GDC. Untuk mengetahui informasi selengkapnya, lihat dokumentasi Audiens untuk GDC yang terisolasi dari internet.

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 bucket kepada pengguna atau akun layanan lain dengan membuat dan menerapkan RoleBinding dengan Peran yang telah ditentukan sebelumnya di server Management API.

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. Anda tidak dapat melakukan operasi tulis pada objek. Misalnya: mengupload, menimpa, menghapus. Memiliki akses hanya baca pada bucket zona ganda dalam organisasi dan projectnya, serta akses hanya baca pada objek dalam bucket tersebut.

  • project-bucket-object-admin: Izin ini memungkinkan pengguna mencantumkan semua bucket dalam project, serta melakukan operasi tulis dan baca pada objek. Misalnya: mengupload, menimpa, menghapus. Memiliki akses hanya baca pada bucket zona ganda dalam organisasi dan projectnya, serta akses baca-tulis pada objek dalam bucket tersebut.

  • project-bucket-admin: Peran ini memungkinkan pengguna mengelola semua bucket dalam namespace yang diberikan, serta semua objek dalam bucket tersebut. Memiliki akses hanya baca pada bucket zona ganda dalam organisasi dan projectnya, serta akses baca-tulis pada objek dalam bucket tersebut.

Untuk melihat daftar lengkap izin yang diberikan untuk Peran sebelumnya, lihat bagian izin Peran preset.

Minta Admin IAM Project Anda untuk memberi Anda izin guna membuat RoleBinding. Berikut adalah contoh pembuatan RoleBinding untuk 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: NAMESPACE_NAME
      name: readwrite-all-buckets
    roleRef:
      kind: Role
      name: project-bucket-object-admin
      apiGroup: rbac.authorization.k8s.io
    subjects:
    - kind: ServiceAccount
      namespace: NAMESPACE_NAME
      name: SA_NAME
    - kind: User
      namespace: NAMESPACE_NAME
      name: bob@example.com
      apiGroup: rbac.authorization.k8s.io
      # Could be bob or bob@example.com based on your organization settings.
    
  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 secret bernama:

object-storage-key-std-user-l74gbpyrsbmwy4mivocr3nur6dzrnhcfhe3otyplul42i732aama

Mendapatkan kredensial akses pengguna

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

  1. Jalankan perintah berikut untuk mencantumkan resource Secret yang izinnya Anda miliki untuk dilihat di namespace object-storage-access-keys:

    kubectl auth can-i --list --namespace object-storage-access-keys
    
    • CATATAN: Jika Anda adalah administrator dengan izin untuk melihat semua resource Secret atau meniru identitas pengguna lain, Anda dapat menjalankan salah satu perintah berikut untuk menemukan nama Secret bagi pengguna tertentu:

      Mencantumkan semua Secret milik pengguna tertentu:

      export USER_NAME=bob@example.com
      kubectl get secrets --namespace object-storage-access-keys -o json | jq  -r --arg USER_NAME "${USER_NAME:?}" '.items[] | select( (.metadata.annotations."object.gdc.goog/subject"==$USER_NAME)) | .metadata.name'
      

      Meniru identitas pengguna untuk melihat Rahasia mana yang dapat mereka lihat:

      export USER_NAME=bob@example.com
      kubectl auth can-i --list --namespace object-storage-access-keys --as "${USER_NAME:?}"
      

    Jika Anda dapat melihat Secret apa pun di namespace ini, Anda akan melihat output yang berisi nama Secret yang mirip dengan berikut ini:

    object-storage-key-std-user-l74gbpyrsbmwy4mivocr3nur6dzrnhcfhe3otyplul42i732aama
    
  2. Mendapatkan konten Secret yang sesuai:

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

    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

Untuk subjek akun layanan (SA), Secret dibuat di namespace yang sama dengan akun layanan.

Jalankan perintah berikut untuk memverifikasi bahwa Anda dapat mengambil dan mencantumkan resource Secret di namespace, hubungi administrator Anda jika hal ini tidak terjadi:

export SA_NAMESPACE=NAMESPACE_NAME
kubectl auth can-i --list --namespace $SA_NAMESPACE

Untuk menemukan nama Secret, jalankan:

export SA_NAME=SA_NAME
kubectl get secrets --namespace $SA_NAMESPACE  -o json | jq  -r --arg USER_NAME "${SA_NAME:?}" '.items[] | select( (.metadata.annotations."object.gdc.goog/subject"==$USER_NAME)) | .metadata.name'

Anda akan menerima output yang mirip dengan berikut ini:

object-storage-key-std-sa-mng3olp3vsynhswzasowzu3jgzct2ert72pjp6wsbzqhdwckwzbq

Anda dapat mereferensikan Secret di pod sebagai variabel lingkungan atau file.

Izin peran preset

Perhatikan bahwa peran bawaan juga tersedia di server API global untuk akses administratif dan operasional ke bucket zona ganda.

izin project-bucket-object-viewer

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

Berikut adalah daftar semua izin penyimpanan objek yang diberikan oleh kata kerja project-bucket-object-viewer:

  • Izin Bucket API:

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

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

Izin project-bucket-object-admin

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

Berikut daftar semua izin penyimpanan objek tambahan yang diberikan Peran:

  • 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 Peran adalah sebagai berikut:

  • Izin Bucket API:

    1. Buat
    2. Perbarui
    3. Hapus