Mengautentikasi ke GKE di AWS dengan identitas eksternal

Workforce identity federation memberikan akses ke Google Cloud layanan bagi identitas non-Google. Dalam konteks GKE di AWS, hal ini berarti Anda dapat menggunakan identitas eksternal yang sudah ada untuk membuat atau mengakses cluster GKE tanpa mengandalkan kredensial Google.

Manfaat menggunakan workforce identity federation adalah sebagai berikut:

  • Anda tidak perlu membuat akun duplikat di berbagai platform atau penyedia.
  • Anda hanya perlu menetapkan izin satu kali, sehingga tidak perlu melakukan konfigurasi di beberapa platform.
  • Anda menyederhanakan akses pengguna, karena hanya memerlukan lebih sedikit login dan sandi.

Sebelum memulai

Sebelum dapat mengizinkan pengguna atau grup eksternal mengakses cluster GKE, Anda harus melakukan langkah-langkah berikut:

  1. Agar pengguna atau grup eksternal dapat menggunakan GKE di AWS API, konfigurasikan workforce identity federation.:

  2. Tetapkan peran gkemulticloud.viewer kepada pengguna atau grup eksternal Anda agar mereka dapat mengakses cluster. Tetapkan peran container.clusterViewer untuk melihat cluster di Google Cloud konsol.

    Perhatikan bahwa peran adalah kumpulan izin. Saat Anda menetapkan peran ke entity (pengguna, grup, atau akun layanan), Anda memberikan semua izin yang terdapat dalam peran tersebut kepada entity tersebut.

    Pengguna

    Untuk setiap pengguna, Anda harus menetapkan peran gkemulticloud.viewer:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --role="roles/gkemulticloud.viewer" \
      --member="principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/SUBJECT_VALUE"
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Anda. Google Cloud
    • WORKFORCE_POOL_ID: ID yang secara unik mengidentifikasi kumpulan identitas tenaga kerja Anda di Google Cloud. Saat memformat ID, pastikan Anda mengikuti panduan yang direkomendasikan yang disediakan dalam dokumentasi IAM di bagian Parameter kueri.
    • SUBJECT_VALUE: ID yang secara unik mengidentifikasi pengguna eksternal. Misalnya, ID dapat berupa alamat email seperti alex@cymbalgroup.com.

    Grup

    Untuk grup, Anda harus menetapkan peran gkemulticloud.viewer:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --role="roles/gkemulticloud.viewer" \
      --member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID"
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Anda. Google Cloud
    • WORKFORCE_POOL_ID: ID yang secara unik mengidentifikasi kumpulan identitas tenaga kerja Anda di Google Cloud. Saat memformat ID, pastikan Anda mengikuti panduan yang direkomendasikan yang disediakan dalam dokumentasi IAM di bagian Parameter kueri.
    • GROUP_ID: ID yang secara unik mengidentifikasi grup eksternal.
  3. Opsional: Tetapkan peran Identity and Access Management (IAM) yang sesuai kepada pengguna atau grup eksternal Anda. Langkah ini hanya diperlukan jika Anda ingin memberikan kemampuan kepada pengguna atau grup untuk membuat atau memperbarui cluster; langkah ini tidak diperlukan untuk sekadar mengakses cluster.

    Pengguna

    Untuk setiap pengguna, Anda harus menetapkan peran gkemulticloud.admin:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --role="roles/gkemulticloud.admin" \
      --member="principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/SUBJECT_VALUE"
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Anda. Google Cloud
    • WORKFORCE_POOL_ID: ID yang secara unik mengidentifikasi kumpulan identitas tenaga kerja Anda di Google Cloud. Saat memformat ID, pastikan Anda mengikuti panduan yang direkomendasikan yang disediakan dalam dokumentasi IAM di bagian Parameter kueri.
    • SUBJECT_VALUE: ID yang secara unik mengidentifikasi pengguna eksternal. Misalnya, ID dapat berupa alamat email seperti alex@cymbalgroup.com.

    Grup

    Untuk grup, Anda harus menetapkan peran gkemulticloud.admin:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --role="roles/gkemulticloud.admin" \
      --member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID"
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Anda. Google Cloud
    • WORKFORCE_POOL_ID: ID yang secara unik mengidentifikasi kumpulan identitas tenaga kerja Anda di Google Cloud. Saat memformat ID, pastikan Anda mengikuti panduan yang direkomendasikan yang disediakan dalam dokumentasi IAM di bagian Parameter kueri.
    • GROUP_ID: ID yang secara unik mengidentifikasi grup eksternal.

Untuk mengetahui informasi selengkapnya tentang peran dan izin API yang diperlukan untuk GKE di AWS, lihat Peran dan izin API.

Memberikan akses eksternal ke cluster GKE

Ada dua metode untuk menyiapkan workforce identity federation agar pengguna atau grup eksternal dapat mengakses cluster GKE Anda.

Metode #1 mengharuskan Anda menentukan file RBAC dan menerapkannya ke cluster. Metode ini menawarkan kontrol izin yang disesuaikan, seperti mengizinkan pengguna memiliki akses hanya baca ke resource tanpa memberikan akses yang lebih luas kepada mereka.

Metode #2 mengharuskan Anda menentukan akses untuk identitas eksternal saat membuat atau memperbarui cluster. Metode ini memberikan hak administratif penuh kepada pengguna atau grup yang ditentukan.

Pilih metode yang paling sesuai dengan tingkat kontrol akses yang Anda inginkan: metode #1 untuk izin yang lebih terperinci, atau metode #2 untuk memberikan hak admin cluster penuh.

Metode #1: menggunakan file RBAC

Metode pertama untuk memberikan akses eksternal ke cluster GKE melibatkan penggunaan file RBAC. Ikuti langkah-langkah berikut:

  1. Tentukan file RBAC YAML yang menyertakan subjek (pengguna atau grup) dan izin yang ingin Anda berikan kepada mereka dalam cluster GKE. Berikut adalah contoh konfigurasi RBAC YAML untuk setiap pengguna dan untuk grup:

    Pengguna

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: gateway-cluster-admin-user
    subjects:
    - kind: User
      name: principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/SUBJECT_VALUE
    roleRef:
      kind: ClusterRole
      name: cluster-admin
      apiGroup: rbac.authorization.k8s.io
    

    Ganti kode berikut:

    • WORKFORCE_POOL_ID: ID yang secara unik mengidentifikasi kumpulan identitas tenaga kerja Anda di Google Cloud. Saat memformat ID, pastikan Anda mengikuti panduan yang direkomendasikan yang disediakan dalam dokumentasi IAM di bagian Parameter kueri.
    • SUBJECT_VALUE: ID yang secara unik mengidentifikasi pengguna eksternal. Misalnya, ID dapat berupa alamat email seperti alex@cymbalgroup.com.

    Grup

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: gateway-cluster-admin-group
    subjects:
    - kind: Group
      name: principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID
    roleRef:
      kind: ClusterRole
      name: cluster-admin
      apiGroup: rbac.authorization.k8s.io
    

    Ganti kode berikut:

    • WORKFORCE_POOL_ID: ID yang secara unik mengidentifikasi kumpulan identitas tenaga kerja Anda di Google Cloud. Saat memformat ID, pastikan Anda mengikuti panduan yang direkomendasikan yang disediakan dalam dokumentasi IAM di bagian Parameter kueri.
    • GROUP_ID: ID yang secara unik mengidentifikasi grup eksternal.
  2. Identifikasi cluster GKE yang ingin Anda konfigurasi dan tetapkan sebagai konteks aktif menggunakan perintah berikut:

      kubectl config use-context CLUSTER_CONTEXT
    

    Ganti CLUSTER_CONTEXT dengan nama konteks yang sesuai untuk cluster Anda.

  3. Dengan cluster GKE yang diinginkan ditetapkan sebagai konteks aktif, terapkan konfigurasi RBAC ke cluster menggunakan perintah berikut:

    kubectl apply -f RBAC_PATH
    

    Ganti RBAC_PATH dengan jalur ke file RBAC yang Anda buat atau edit.

    Saat Anda menjalankan perintah ini, pengguna atau grup yang ditentukan dalam konfigurasi RBAC kini memiliki izin untuk mengakses dan mengelola cluster GKE target, seperti yang ditentukan dalam aturan RBAC.

  4. Jika Anda perlu melakukan perubahan izin berikutnya, ubah file RBAC dan terapkan kembali ke cluster dengan mengulangi langkah-langkah sebelumnya.

Metode #2: memberikan akses ke identitas eksternal selama pembuatan atau pembaruan cluster

Metode #2 memberikan akses ke identitas eksternal selama proses pembuatan atau pembaruan cluster.

Untuk membuat cluster, ikuti langkah-langkah di Membuat cluster. Untuk memperbarui cluster, ikuti langkah-langkah di Memperbarui cluster.

Saat menjalankan perintah gcloud untuk membuat atau memperbarui cluster, tentukan parameter admin-users dan/atau admin-groups sebagai berikut:

gcloud container aws clusters [create|update] CLUSTER_NAME \
    --location=LOCATION
    --admin-users=principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject SUBJECT_VALUE \
    --admin-groups=principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster Anda.
  • LOCATION: region tempat cluster Anda dikelola. Google Cloud
  • WORKFORCE_POOL_ID: ID yang secara unik mengidentifikasi kumpulan identitas tenaga kerja Anda di Google Cloud. Saat memformat ID, pastikan Anda mengikuti panduan yang direkomendasikan yang disediakan dalam dokumentasi IAM di bagian Parameter kueri.
  • SUBJECT_VALUE: ID yang secara unik mengidentifikasi pengguna eksternal. Misalnya, ID dapat berupa alamat email seperti alex@cymbalgroup.com.
  • GROUP_ID: ID yang secara unik mengidentifikasi grup eksternal.

Ringkasan pemberian akses ID eksternal ke cluster GKE

Setelah melakukan metode #1 atau metode #2, pengguna atau grup eksternal yang ditentukan dapat menggunakan konsol untuk terhubung dan melihat detail cluster. Google Cloud Atau, mereka dapat menggunakan kubectl dengan identitas dari gcloud CLI untuk mengelola, memanipulasi, dan berkomunikasi dengan cluster.

Untuk menjalankan perintah kubectl terhadap cluster GKE, lihat cara membuat entri kubeconfig.