Crear asignaciones de roles de Azure

En esta página se explica cómo conceder permisos a GKE en Azure para que pueda acceder a las APIs de Azure. Debes seguir estos pasos al configurar un clúster de GKE en Azure o al actualizar los permisos de un clúster. Estos permisos son necesarios para que GKE en Azure gestione recursos de Azure en tu nombre, como máquinas virtuales, componentes de red y almacenamiento.

Obtener los IDs de la entidad de servicio y de la suscripción

Para conceder permisos a GKE en Azure, debes obtener el ID de tu suscripción y de tu principal de servicio de Azure. El principal de servicio de Azure y el ID de suscripción están asociados a la aplicación de Azure AD que has creado para GKE en Azure. Para obtener más información, consulta el artículo Crear una aplicación de Azure Active Directory.

Una cuenta principal de servicio es una identidad de Azure Active Directory (AD) que se usa para autenticarse en Azure y acceder a sus recursos. Una suscripción de Azure es un contenedor lógico que te proporciona acceso autorizado a productos y servicios de Azure. Un ID de suscripción es un identificador único asociado a tu suscripción de Azure.

Para guardar los IDs de tu principal de servicio y de tu suscripción para consultarlos rápidamente, puedes almacenarlos en variables de shell. Para crear estas variables de shell, ejecuta el siguiente comando:

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)

Sustituye APPLICATION_NAME por el nombre de tu aplicación de Azure AD.

Crear tres roles personalizados

Para conceder a GKE en Azure los permisos necesarios para gestionar tus recursos de Azure, debes crear tres roles personalizados y asignárselos a la entidad de servicio. En las siguientes instrucciones solo se añaden los permisos mínimos. Puedes añadir más permisos si lo necesitas.

Debe crear roles personalizados para los siguientes tipos de acceso:

  • Acceso a nivel de suscripción: permisos que se aplican a toda la suscripción de Azure y que permiten gestionar todos los recursos de Azure de esa suscripción.
  • Acceso a nivel de grupo de recursos de clúster: permisos específicos para gestionar recursos de Azure en un grupo de recursos concreto que contenga tus clústeres de GKE en Azure.
  • Acceso a nivel de grupo de recursos de red virtual: permisos específicos para gestionar recursos de Azure en un grupo de recursos que contenga tus recursos de red virtual de Azure.

Crear un rol para el acceso a nivel de suscripción

  1. Crea un archivo llamado GKEOnAzureAPISubscriptionScopedRole.json.

  2. Abre GKEOnAzureAPISubscriptionScopedRole.json en un editor y añade los siguientes permisos:

    {
    "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. Crea el nuevo rol personalizado:

    az role definition create --role-definition "GKEOnAzureAPISubscriptionScopedRole.json"
    
  4. Asigna el rol a la entidad de servicio con el siguiente comando:

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

Crear un rol para el acceso a nivel de grupo de recursos de clúster

  1. Crea un archivo llamado GKEOnAzureClusterResourceGroupScopedRole.json.

  2. Abre GKEOnAzureClusterResourceGroupScopedRole.json en un editor y añade los siguientes permisos:

    {
    "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. Crea el nuevo rol personalizado:

    az role definition create --role-definition "GKEOnAzureClusterResourceGroupScopedRole.json"
    
  4. Asigna el rol a la entidad de servicio con el siguiente comando:

    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}
    

Crear un rol para el acceso a nivel de grupo de recursos de red virtual

  1. Crea un archivo llamado GKEOnAzureAPIVNetResourceGroupScopedRole.json.

  2. Abre GKEOnAzureAPIVNetResourceGroupScopedRole.json en un editor y añade los siguientes permisos:

    {
    "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. Crea el nuevo rol personalizado:

    az role definition create --role-definition "GKEOnAzureAPIVNetResourceGroupScopedRole.json"
    
  4. Asigna el rol a la entidad de servicio con el siguiente comando:

    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"
    

Siguientes pasos