Memberikan dan mendapatkan akses bucket penyimpanan

Halaman ini memandu Anda cara mengelola akses ke bucket penyimpanan dalam project appliance 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 air-gapped GDC.

Sebelum memulai

Namespace project mengelola resource bucket di server Management API. Anda harus memiliki project untuk bekerja dengan 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.

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 memungkinkan Anda melakukan operasi tulis pada objek, seperti mengupload, menimpa, atau menghapus.

  • project-bucket-object-admin: Peran ini memungkinkan pengguna mencantumkan semua bucket dalam project, serta melakukan operasi tulis dan baca pada objek, seperti mengupload, mengganti, atau menghapus.

  • project-bucket-admin: Peran ini memungkinkan pengguna mengelola semua bucket dalam namespace yang diberikan, serta semua objek dalam bucket tersebut.

Untuk melihat daftar lengkap izin yang diberikan untuk peran ini, lihat bagian izin peran preset.

Untuk mendapatkan izin yang diperlukan untuk membuat binding peran project, minta Admin IAM Project Anda untuk memberi Anda peran Admin IAM Project (project-iam-admin).

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.

     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  # Could be bob or bob@example.com based on your organization settings.
       apiGroup: rbac.authorization.k8s.io
     ```
    
  2. Terapkan file YAML:

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

Mendapatkan kredensial akses bucket

Saat Anda memberikan akses ke bucket, kredensial akses dibuat di Secret.

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

  • Nilai untuk SUBJECT_TYPE adalah sebagai berikut:
    • user: pengguna.
    • sa: 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-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja

Mengakses secret pengguna

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

  1. Temukan nama rahasia:

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

    Anda akan menerima output yang mirip dengan berikut ini:

    secrets        []        [object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja,object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja]        [get]
    
  2. Dapatkan konten Secret yang sesuai untuk mengakses bucket:

    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 s3cmd dengan informasi yang dihasilkan.

Mengakses secret akun layanan

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

  kubectl get --namespace NAMESPACE_NAME secrets -o=jsonpath=
  '{.items[?(@.metadata.annotations.object\.gdc\.goog/subject=="SA_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 (https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-environment-variables) atau file (https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod).

Izin peran preset

Saat menggunakan penyimpanan objek, Anda mungkin perlu meminta peran berikut.

izin project-bucket-object-viewer

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

Peran project-bucket-object-viewer memiliki izin berikut:

  • Izin Bucket API:

    1. Dapatkan
    2. Daftar
    3. Tonton
  • Izin penyimpanan objek S3:

    1. GetObject
    2. GetObjectAcl
    3. GetObjectVersion
    4. ListBucket
    5. ListBucketVersions
    6. ListBucketMultipartUploads
    7. ListMultipartUploadParts

Izin project-bucket-object-admin

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

Peran project-bucket-object-admin memiliki izin penyimpanan objek berikut:

  • Izin penyimpanan Objek S3:

    1. AbortMultipartUpload
    2. DeleteObject
    3. PutObject

izin project-bucket-admin

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

Peran project-bucket-object-admin memiliki izin berikut:

  • Izin Bucket API:

    1. Buat
    2. Perbarui
    3. Hapus