Membuat penetapan peran Azure

Halaman ini menunjukkan cara memberikan izin ke GKE di Azure agar dapat mengakses Azure API. Anda harus melakukan langkah-langkah ini saat menyiapkan cluster GKE di Azure yang baru atau saat memperbarui izin untuk cluster yang ada. Izin ini diperlukan agar GKE di Azure dapat mengelola resource Azure atas nama Anda, seperti mesin virtual, komponen jaringan, dan penyimpanan.

Mendapatkan ID langganan dan principal layanan

Untuk memberikan izin ke GKE di Azure, Anda harus mendapatkan ID langganan dan principal layanan Azure. ID langganan dan akun utama layanan Azure dikaitkan dengan aplikasi Azure AD yang Anda buat untuk GKE di Azure. Untuk mengetahui detailnya, lihat Membuat aplikasi Azure Active Directory.

Akun utama layanan adalah identitas di Azure Active Directory (AD) yang digunakan untuk mengautentikasi ke Azure dan mengakses sumber dayanya. Langganan Azure adalah penampung logis yang memberi Anda akses resmi ke produk dan layanan Azure. ID langganan adalah ID unik yang terkait dengan langganan Azure Anda.

Untuk menyimpan ID langganan dan principal layanan Anda sebagai referensi cepat, Anda dapat menyimpannya dalam variabel shell. Untuk membuat variabel shell ini, jalankan perintah berikut:

APPLICATION_ID=$(az ad app list --all \
    --query "[?displayName=='APPLICATION_NAME'].appId" \
    --output tsv)
SERVICE_PRINCIPAL_ID=$(az ad sp list --all  --output tsv \
      --query "[?appId=='$APPLICATION_ID'].id")
SUBSCRIPTION_ID=$(az account show --query "id" --output tsv)

Ganti APPLICATION_NAME dengan nama aplikasi Azure AD Anda.

Buat tiga peran khusus

Untuk memberikan izin kepada GKE di Azure untuk mengelola resource Azure Anda, Anda perlu membuat tiga peran kustom dan menetapkannya ke akun utama layanan. Hanya izin minimum yang ditambahkan dalam petunjuk berikut. Anda dapat menambahkan izin lainnya jika perlu.

Anda perlu membuat peran khusus untuk jenis akses berikut:

  • Akses tingkat langganan: Izin yang berlaku untuk seluruh langganan Azure, sehingga memungkinkan pengelolaan semua resource Azure dalam langganan tersebut.
  • Akses tingkat grup resource cluster: Izin khusus untuk mengelola resource Azure dalam grup resource tertentu yang berisi cluster GKE di Azure Anda.
  • Akses tingkat grup resource jaringan virtual: Izin khusus untuk mengelola resource Azure dalam grup resource yang berisi resource jaringan virtual Azure Anda.

Membuat peran untuk akses tingkat langganan

  1. Buat file bernama GKEOnAzureAPISubscriptionScopedRole.json.

  2. Buka GKEOnAzureAPISubscriptionScopedRole.json di editor dan tambahkan izin berikut:

    {
    "Name": "GKE on-Azure API Subscription Scoped Role",
    "IsCustom": true,
    "Description": "Allow GKE on-Azure service manage resources in subscription scope.",
    "Actions": [
      "Microsoft.Authorization/roleAssignments/read",
      "Microsoft.Authorization/roleAssignments/write",
      "Microsoft.Authorization/roleAssignments/delete",
      "Microsoft.Authorization/roleDefinitions/read"
    ],
    "NotActions": [],
    "DataActions": [],
    "NotDataActions": [],
    "AssignableScopes": ["/subscriptions/${SUBSCRIPTION_ID}"]
    }
    
  3. Buat peran khusus baru:

    az role definition create --role-definition "GKEOnAzureAPISubscriptionScopedRole.json"
    
  4. Tetapkan peran ke akun utama layanan menggunakan perintah berikut:

    az role assignment create --assignee ${SERVICE_PRINCIPAL_ID} --role "GKE on-Azure API Subscription Scoped Role" --scope /subscriptions/${SUBSCRIPTION_ID}
    

Membuat peran untuk akses tingkat grup resource cluster

  1. Buat file bernama GKEOnAzureClusterResourceGroupScopedRole.json.

  2. Buka GKEOnAzureClusterResourceGroupScopedRole.json di editor dan tambahkan izin berikut:

    {
    "Name": "GKE on-Azure API Cluster Resource Group Scoped Role",
    "IsCustom": true,
    "Description": "Allow GKE on-Azure service manage resources in cluster resource group scope.",
    "Actions": [
        "Microsoft.Resources/subscriptions/resourcegroups/read",
        "Microsoft.Authorization/roleDefinitions/write",
        "Microsoft.Authorization/roleDefinitions/delete",
        "Microsoft.ManagedIdentity/userAssignedIdentities/write",
        "Microsoft.ManagedIdentity/userAssignedIdentities/read",
        "Microsoft.ManagedIdentity/userAssignedIdentities/delete",
        "Microsoft.Network/applicationSecurityGroups/write",
        "Microsoft.Network/applicationSecurityGroups/read",
        "Microsoft.Network/applicationSecurityGroups/delete",
        "Microsoft.Network/applicationSecurityGroups/joinIpConfiguration/action",
        "Microsoft.Authorization/roleAssignments/write",
        "Microsoft.Authorization/roleAssignments/read",
        "Microsoft.Authorization/roleAssignments/delete",
        "Microsoft.Network/loadBalancers/write",
        "Microsoft.Network/loadBalancers/read",
        "Microsoft.Network/loadBalancers/delete",
        "Microsoft.Network/loadBalancers/backendAddressPools/join/action",
        "Microsoft.Network/networkSecurityGroups/write",
        "Microsoft.Network/networkSecurityGroups/read",
        "Microsoft.Network/networkSecurityGroups/delete",
        "Microsoft.Network/networkSecurityGroups/join/action",
        "Microsoft.KeyVault/vaults/write",
        "Microsoft.KeyVault/vaults/read",
        "Microsoft.KeyVault/vaults/delete",
        "Microsoft.Compute/disks/read",
        "Microsoft.Compute/disks/write",
        "Microsoft.Compute/disks/delete",
        "Microsoft.Network/networkInterfaces/read",
        "Microsoft.Network/networkInterfaces/write",
        "Microsoft.Network/networkInterfaces/delete",
        "Microsoft.Network/networkInterfaces/join/action",
        "Microsoft.Compute/virtualMachines/read",
        "Microsoft.Compute/virtualMachines/write",
        "Microsoft.Compute/virtualMachines/delete",
        "Microsoft.Compute/virtualMachineScaleSets/write",
        "Microsoft.Compute/virtualMachineScaleSets/read",
        "Microsoft.Compute/virtualMachineScaleSets/delete",
        "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action",
        "Microsoft.Compute/virtualMachines/retrieveBootDiagnosticsData/action",
        "Microsoft.Insights/Metrics/Read"
    ],
    "NotActions": [],
    "DataActions": [
        "Microsoft.KeyVault/vaults/keys/create/action",
        "Microsoft.KeyVault/vaults/keys/delete",
        "Microsoft.KeyVault/vaults/keys/read",
        "Microsoft.KeyVault/vaults/keys/encrypt/action"
    ],
    "NotDataActions": [],
    "AssignableScopes": ["/subscriptions/${SUBSCRIPTION_ID}"]
     }
     ```
    
  3. Buat peran khusus baru:

    az role definition create --role-definition "GKEOnAzureClusterResourceGroupScopedRole.json"
    
  4. Tetapkan peran ke akun utama layanan menggunakan perintah berikut:

    az role assignment create --assignee ${SERVICE_PRINCIPAL_ID} --role "GKE on-Azure API Cluster Resource Group Scoped Role" --scope /subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${CLUSTER_RESOURCE_GROUP_ID}
    

Membuat peran untuk akses tingkat grup resource jaringan virtual

  1. Buat file bernama GKEOnAzureAPIVNetResourceGroupScopedRole.json.

  2. Buka GKEOnAzureAPIVNetResourceGroupScopedRole.json di editor dan tambahkan izin berikut:

    {
    "Name": "GKE on-Azure API VNet Resource Group Scoped Role",
    "IsCustom": true,
    "Description": "Allow GKE on-Azure service manage resources in virtual network resource group scope.",
    "Actions": [
        "Microsoft.Network/virtualNetworks/read",
        "Microsoft.Network/virtualNetworks/subnets/read",
        "Microsoft.Network/virtualNetworks/subnets/join/action",
        "Microsoft.Authorization/roleDefinitions/write",
        "Microsoft.Authorization/roleDefinitions/delete"
    ],
    "NotActions": [],
    "DataActions": [],
    "NotDataActions": [],
    "AssignableScopes": ["/subscriptions/${SUBSCRIPTION_ID}"]
    }
    
  3. Buat peran khusus baru:

    az role definition create --role-definition "GKEOnAzureAPIVNetResourceGroupScopedRole.json"
    
  4. Tetapkan peran ke akun utama layanan menggunakan perintah berikut:

    az role assignment create --assignee ${SERVICE_PRINCIPAL_ID} --role "GKE on-Azure API Subscription Scoped Role" --scope "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/VNET_RESOURCE_GROUP_ID"
    

Langkah berikutnya