Gunakan kontrol akses berbasis peran Azure untuk menentukan akses ke file konfigurasi Kube di Azure Kubernetes Service (AKS)

Anda dapat berinteraksi dengan kluster Kube menggunakan alat kubectl ini. Azure CLI menyediakan cara mudah untuk mendapatkan kredensial akses dan file konfigurasi kubeconfig untuk terhubung ke kluster AKS Anda menggunakan kubectl. Anda dapat menggunakan kontrol akses berbasis peran Azure (Azure RBAC) untuk membatasi siapa yang bisa mendapatkan akses ke file kubeconfig dan izin yang mereka miliki.

Artikel ini memperlihatkan kepada Anda cara menetapkan peran Azure yang membatasi siapa yang bisa mendapatkan informasi konfigurasi untuk kluster AKS.

Sebelum Anda mulai

  • Artikel ini mengasumsikan bahwa Anda memiliki kluster AKS yang ada. Jika Anda memerlukan kluster AKS, buat kluster menggunakan Azure CLI, Azure PowerShell, atau portal Azure.
  • Artikel ini juga mengharuskan Anda menjalankan Azure CLI versi 2.0.65 atau yang lebih baru. Jalankan az --version untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.

Izin yang tersedia untuk peran kluster

Saat Anda berinteraksi dengan kluster AKS menggunakan alat, kubectl file konfigurasi, yang disebut kubeconfig, menentukan informasi koneksi kluster. File konfigurasi ini biasanya disimpan dalam ~/.kube/config. Beberapa kluster dapat didefinisikan dalam file kubeconfig ini. Anda dapat beralih antar kluster menggunakan kubectl config use-context perintah .

Perintah ini az aks get-credentials memungkinkan Anda mendapatkan kredensial akses untuk kluster AKS dan menggabungkan kredensial ini ke dalam file kubeconfig . Anda dapat menggunakan Azure RBAC untuk mengontrol akses ke kredensial ini. Peran Azure ini memungkinkan Anda menentukan siapa yang dapat mengambil file kubeconfig dan izin apa yang mereka miliki dalam kluster.

Ada dua peran Azure yang dapat Anda terapkan ke pengguna atau grup Microsoft Entra:

  • Peran Admin kluster Azure Kubernetes Service

    • Memungkinkan akses ke Microsoft.ContainerService/managedClusters/listClusterAdminCredential/action panggilan API. Panggilan API ini mencantumkan info masuk admin kluster.
    • Mengunduh kubeconfig untuk peran clusterAdmin.
  • Peran Pengguna kluster Azure Kubernetes Service

    • Memungkinkan akses ke Microsoft.ContainerService/managedClusters/listClusterUserCredential/action panggilan API. Panggilan API ini mencantumkan info masuk pengguna kluster.
    • Mengunduh kubeconfig untuk peran clusterUser.

Catatan

Pada kluster yang menggunakan ID Microsoft Entra, pengguna dengan peran clusterUser memiliki file kubeconfig kosong yang meminta login. Setelah masuk, pengguna memiliki akses berdasarkan pengaturan pengguna atau grup Microsoft Entra mereka. Pengguna dengan peran clusterAdmin memiliki akses admin.

Pada kluster yang tidak menggunakan MICROSOFT Entra ID, peran clusterUser memiliki efek yang sama dari peran clusterAdmin.

Menetapkan izin peran untuk pengguna atau grup

Untuk menetapkan salah satu peran yang tersedia, Anda perlu mendapatkan ID sumber daya kluster AKS dan ID akun pengguna atau grup Microsoft Entra menggunakan langkah-langkah berikut:

  1. Dapatkan ID sumber daya kluster menggunakan az aks show perintah untuk kluster bernama myAKSCluster di grup sumber daya myResourceGroup . Berikan nama grup kluster dan sumber daya Anda sendiri jika diperlukan.
  2. az account show Gunakan perintah dan az ad user show untuk mendapatkan ID pengguna Anda.
  3. Tetapkan peran menggunakan az role assignment create perintah .

Contoh berikut menetapkan Peran Admin kluster Azure Kubernetes Service ke akun pengguna individual:

# Get the resource ID of your AKS cluster
AKS_CLUSTER=$(az aks show --resource-group myResourceGroup --name myAKSCluster --query id -o tsv)

# Get the account credentials for the logged in user
ACCOUNT_UPN=$(az account show --query user.name -o tsv)
ACCOUNT_ID=$(az ad user show --id $ACCOUNT_UPN --query objectId -o tsv)

# Assign the 'Cluster Admin' role to the user
az role assignment create \
    --assignee $ACCOUNT_ID \
    --scope $AKS_CLUSTER \
    --role "Azure Kubernetes Service Cluster Admin Role"

Jika Anda ingin menetapkan izin ke grup Microsoft Entra, perbarui parameter yang --assignee ditampilkan dalam contoh sebelumnya dengan ID objek untuk grup daripada pengguna.

Untuk mendapatkan ID objek untuk grup, gunakan az ad group show perintah . Perintah berikut mendapatkan ID objek untuk grup Microsoft Entra bernama appdev:

az ad group show --group appdev --query objectId -o tsv

Penting

Dalam beberapa kasus, seperti pengguna tamu Microsoft Entra, user.name di akun berbeda dari userPrincipalName.

$ az account show --query user.name -o tsv
user@contoso.com

$ az ad user list --query "[?contains(otherMails,'user@contoso.com')].{UPN:userPrincipalName}" -o tsv
user_contoso.com#EXT#@contoso.onmicrosoft.com

Dalam hal ini, atur nilai ACCOUNT_UPN ke userPrincipalName dari pengguna Microsoft Entra. Misalnya, jika akun Anda user.name adalah user@contoso.com, tindakan ini akan terlihat seperti contoh berikut:

ACCOUNT_UPN=$(az ad user list --query "[?contains(otherMails,'user@contoso.com')].{UPN:userPrincipalName}" -o tsv)

Mendapatkan dan memverifikasi informasi konfigurasi

Setelah peran ditetapkan, gunakan az aks get-credentials perintah untuk mendapatkan definisi kubeconfig untuk kluster AKS Anda. Contoh berikut mendapatkan kredensial --admin , yang berfungsi dengan benar jika pengguna telah diberikan Peran Admin Kluster:

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --admin

Anda kemudian dapat menggunakan kubectl config view perintah untuk memverifikasi bahwa konteks untuk kluster menunjukkan bahwa informasi konfigurasi admin telah diterapkan.

$ kubectl config view

Output Anda akan terlihat mirip dengan contoh output berikut:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://myaksclust-myresourcegroup-19da35-4839be06.hcp.eastus.azmk8s.io:443
  name: myAKSCluster
contexts:
- context:
    cluster: myAKSCluster
    user: clusterAdmin_myResourceGroup_myAKSCluster
  name: myAKSCluster-admin
current-context: myAKSCluster-admin
kind: Config
preferences: {}
users:
- name: clusterAdmin_myResourceGroup_myAKSCluster
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
    token: e9f2f819a4496538b02cefff94e61d35

Menghapus izin peran

Untuk menghapus penetapan peran, gunakan az role assignment delete perintah . Tentukan ID akun dan ID sumber daya kluster yang Anda peroleh di langkah-langkah sebelumnya. Jika Anda menetapkan peran ke grup daripada pengguna, tentukan ID objek grup yang sesuai daripada ID objek akun untuk --assignee parameter .

az role assignment delete --assignee $ACCOUNT_ID --scope $AKS_CLUSTER

Langkah berikutnya

Untuk keamanan yang ditingkatkan pada akses ke kluster AKS, integrasikan autentikasi Microsoft Entra.