Crear asignaciones de roles de Azure

Esta página muestra cómo otorgar permisos a GKE en Azure para que pueda acceder a las API de Azure. Debe realizar estos pasos al configurar un nuevo clúster de GKE en Azure o al actualizar los permisos de un clúster existente. Estos permisos son necesarios para que GKE en Azure administre recursos de Azure en su nombre, como máquinas virtuales, componentes de red y almacenamiento.

Obtener identificadores de suscripción y de entidad de servicio

Para conceder permisos a GKE en Azure, debe obtener su entidad de servicio de Azure y el identificador de suscripción. Estos identificadores están asociados a la aplicación de Azure AD que creó para GKE en Azure. Para obtener más información, consulte "Crear una aplicación de Azure Active Directory" .

Una entidad 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 de Azure es un contenedor lógico que proporciona acceso autorizado a los productos y servicios de Azure. Un identificador de suscripción es un identificador único asociado a su suscripción de Azure.

Para guardar los ID de la entidad de servicio y de la suscripción para una referencia rápida, puede almacenarlos en variables de shell. Para crear estas variables de shell, ejecute 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)

Reemplace APPLICATION_NAME con el nombre de su aplicación de Azure AD.

Crea tres roles personalizados

Para otorgar a GKE en Azure los permisos necesarios para administrar sus recursos de Azure, debe crear tres roles personalizados y asignarlos a la entidad de servicio. En las siguientes instrucciones, solo se agregan los permisos mínimos. Puede agregar más permisos si lo necesita.

Necesita 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 permiten administrar todos los recursos de Azure dentro de esa suscripción.
  • Acceso a nivel de grupo de recursos de clúster : permisos específicos para administrar recursos de Azure dentro de un grupo de recursos particular que contiene sus clústeres de GKE en Azure.
  • Acceso a nivel de grupo de recursos de red virtual : permisos específicos para administrar recursos de Azure dentro de un grupo de recursos que contiene sus recursos de red virtual de Azure.

Crear un rol para acceso a nivel de suscripción

  1. Cree un archivo llamado GKEOnAzureAPISubscriptionScopedRole.json .

  2. Abra GKEOnAzureAPISubscriptionScopedRole.json en un editor y agregue 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. Asigne el rol a la entidad de servicio mediante 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 del clúster

  1. Cree un archivo llamado GKEOnAzureClusterResourceGroupScopedRole.json .

  2. Abra GKEOnAzureClusterResourceGroupScopedRole.json en un editor y agregue 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. Asigne el rol a la entidad de servicio mediante 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. Cree un archivo llamado GKEOnAzureAPIVNetResourceGroupScopedRole.json .

  2. Abra GKEOnAzureAPIVNetResourceGroupScopedRole.json en un editor y agregue 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. Asigne el rol a la entidad de servicio mediante 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?