Crea asignaciones de funciones de Azure

En esta sección, otorgarás permisos a GKE en Azure para acceder a las API de Azure.

Para guardar los ID de suscripción y principal de servicio en una variable de shell, ejecuta el siguiente comando. Reemplaza APPLICATION_NAME por un nombre para la aplicación.

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)

Asigna permisos al principal del servicio. GKE en Azure requiere permisos a fin de aprovisionar los roles necesarios para los recursos administrados de Azure a nivel de suscripción.

Para crear una función personalizada con los permisos necesarios de alcance de suscripción, haz lo siguiente:

  1. Crea un archivo nuevo llamado RoleAssignmentCreator.json.

  2. Abre RoleAssignmentCreator.json en un editor y agrega los siguientes permisos:

    {
        "Name": "Role Assignment Creator",
        "IsCustom": true,
        "Description": "Can create Azure role assignments.",
        "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. Crea el nuevo rol personalizado con el siguiente comando:

    az role definition create --role-definition "~/CustomRoles/RoleAssignmentCreator.json"
    
  4. Asigna el rol al miembro del servicio con el siguiente comando:

    az role assignment create --assignee ${SERVICE_PRINCIPAL_ID} --role "Role Assignment Creator" --scope /subscriptions/${SUBSCRIPTION_ID}
    

Cuando asignas permisos, puedes definirlos a nivel de suscripción de Azure, que se aplica a todos los recursos dentro de la suscripción, o a nivel de grupo de recursos, lo que limita los permisos a un grupo de recursos específico.

Suscripción

Asigna las funciones de Colaborador, Administrador de acceso de usuario y Administrador de Key Vault a tu suscripción:

az role assignment create \
    --role "Contributor" \
    --assignee "${SERVICE_PRINCIPAL_ID}" \
    --scope "/subscriptions/${SUBSCRIPTION_ID}"

az role assignment create \
    --role "User Access Administrator" \
    --assignee "${SERVICE_PRINCIPAL_ID}" \
    --scope "/subscriptions/${SUBSCRIPTION_ID}"

az role assignment create \
    --role "Key Vault Administrator" \
    --assignee "${SERVICE_PRINCIPAL_ID}" \
    --scope "/subscriptions/${SUBSCRIPTION_ID}"

Grupo de recursos

  1. Crea asignaciones de funciones para el grupo de recursos del clúster. Reemplaza CLUSTER_RESOURCE_GROUP_NAME por el nombre del grupo de recursos para GKE en Azure.

    az role assignment create \
      --role "Contributor" \
      --assignee "${SERVICE_PRINCIPAL_ID}" \
      --scope "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/CLUSTER_RESOURCE_GROUP_NAME"
    
    az role assignment create \
      --role "User Access Administrator" \
      --assignee "${SERVICE_PRINCIPAL_ID}" \
      --scope "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/CLUSTER_RESOURCE_GROUP_NAME"
    
    az role assignment create \
      --role "Key Vault Administrator" \
      --assignee "${SERVICE_PRINCIPAL_ID}" \
      --scope "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/CLUSTER_RESOURCE_GROUP_NAME"
    
  2. Si tu red virtual de Azure está en un grupo de recursos diferente, crea asignaciones de funciones con alcance al grupo de recursos de red virtual.

    az role assignment create \
      --role "Virtual Machine Contributor" \
      --assignee "${SERVICE_PRINCIPAL_ID}" \
      --scope "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/VNET_RESOURCE_GROUP_NAME"
    
    az role assignment create \
      --role "User Access Administrator" \
      --assignee "${SERVICE_PRINCIPAL_ID}" \
      --scope "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/VNET_RESOURCE_GROUP_NAME"
    

    Reemplaza lo siguiente:

    • VNET_RESOURCE_GROUP_NAME: Es el nombre del grupo de recursos para GKE en Azure VNet.

¿Qué sigue?