Crea asignaciones de funciones de Azure

En esta página, se muestra cómo otorgar permisos a GKE en Azure para que pueda acceder a las APIs de Azure. Debes realizar estos pasos cuando configures un clúster de GKE en Azure nuevo o cuando actualices los permisos de un clúster existente. Estos permisos son necesarios para que GKE en Azure administre recursos de Azure en tu nombre, como máquinas virtuales, componentes de red y almacenamiento.

Obtén los IDs del principal de servicio y de la suscripción

Para otorgar permisos a GKE en Azure, debes obtener el principal de servicio y el ID de suscripción de Azure. El principal de servicio y el ID de suscripción de Azure están asociados con la aplicación de Azure AD que creaste para GKE en Azure. Para obtener más información, consulta Crea una aplicación de Azure Active Directory.

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

Para guardar los IDs de suscripción y principal de servicio como referencia rápida, 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)

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

Crea tres roles personalizados

Para otorgar a GKE en Azure los permisos para administrar tus recursos de Azure, debes crear tres roles personalizados y asignarlos al principal de servicio. En las siguientes instrucciones, solo se agregan los permisos mínimos. Si lo necesitas, puedes agregar más permisos.

Debes crear roles personalizados para los siguientes tipos de acceso:

  • Acceso a nivel de la suscripción: Son permisos que se aplican a toda la suscripción de Azure y que permiten administrar todos los recursos de Azure dentro de esa suscripción.
  • Acceso a nivel del grupo de recursos del clúster: Son permisos específicos para administrar recursos de Azure dentro de un grupo de recursos en particular que contiene tus clústeres de GKE en Azure.
  • Acceso a nivel del grupo de recursos de red virtual: Son permisos específicos para administrar recursos de Azure dentro de un grupo de recursos que contiene los recursos de tu red virtual de Azure.

Crea un rol para el acceso a nivel de la suscripción

  1. Crea un archivo llamado GKEOnAzureAPISubscriptionScopedRole.json.

  2. Abre GKEOnAzureAPISubscriptionScopedRole.json en un editor y agrega 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 al principal 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}
    

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

  1. Crea un archivo llamado GKEOnAzureClusterResourceGroupScopedRole.json.

  2. Abre GKEOnAzureClusterResourceGroupScopedRole.json en un editor y agrega 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 al principal 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}
    

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

  1. Crea un archivo llamado GKEOnAzureAPIVNetResourceGroupScopedRole.json.

  2. Abre GKEOnAzureAPIVNetResourceGroupScopedRole.json en un editor y agrega 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 al principal 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"
    

¿Qué sigue?