Resuelva los errores de permiso que ocurren cuando un usuario o rol de RAM accede a Alibaba Cloud. Este tema abarca los errores de acceso denegado, donde se identifica la identidad pero carece del permiso obligatorio, y los fallos de autenticación HTTP 401, donde el sistema no puede identificar la identidad actual.
Descripción del problema
De forma predeterminada, las identidades de RAM, como los usuarios y roles de RAM, no tienen permisos sobre ninguna acción. Solo pueden acceder a recursos específicos de la nube después de que se les otorguen permisos de manera explícita. Cuando una identidad de RAM ejecuta una acción sobre un recurso de Alibaba Cloud, se muestra un error de acceso denegado en alguno de estos casos:
Denegación implícita: ninguna política permite la acción.
Denegación explícita: una política deniega la acción de forma explícita mediante una instrucción Deny.
Los errores son los siguientes:
Error de acceso a la consola: se muestra el mensaje
permission denied.Error de llamada a la API: se devuelve un código de error como
NoPermission,Forbidden.RAM,User.NoPermissionoNotAuthorized.
Un error HTTP 401, como InvalidAccessKeyId.NotFound, es distinto de los errores anteriores. Un error 401 indica un fallo de autenticación; es decir, el sistema no puede identificar la identidad actual. Un error de acceso denegado señala un fallo de autorización, lo que significa que la identidad sí se identificó, pero no tiene el permiso para ejecutar la acción. Para los errores 401, consulte HTTP 401 authentication failures.
Algunos productos de Alibaba Cloud no admiten la autorización basada en RAM. Esta limitación afecta la solución de problemas de las siguientes maneras:
Acceso a recursos: si una identidad de RAM recibe un error de acceso denegado en uno de estos productos, no podrá acceder a sus recursos.
Diagnóstico de permisos: en estos productos, la función de diagnóstico de permisos no genera un resultado de solución de problemas.
Llamadas a la API: si la operación de la API devuelve el error
Forbidden.RAM, compruebe también si la API del producto de destino admite la autorización basada en RAM. Algunas API de productos no la admiten y una identidad de RAM no puede invocarlas.Políticas del sistema: la tabla de políticas del sistema en Grant cloud product permissions to a RAM user aplica únicamente a los productos que admiten la autorización basada en RAM.
Soluciones
La siguiente tabla le ayuda a encontrar la sección adecuada según lo que observe.
|
Lo que observa |
Dónde buscar |
|
Un mensaje emergente de acceso denegado en la consola |
|
|
Una respuesta de error de una llamada desde un SDK, CLI u OpenAPI Developer Portal, con un campo |
|
|
Un usuario de RAM necesita los permisos para operar un producto de la nube como ECS, OSS o RDS |
|
|
Un error de acceso denegado al exportar la lista de instancias en la consola de ECS |
Insufficient permissions when exporting the instance list in the ECS console |
|
Un error HTTP 401 como |
Diagnosticar un error de acceso denegado
Tanto el mensaje emergente de acceso denegado en la consola como el campo AccessDeniedDetail en la respuesta de error de la API proporcionan detalles del error. Utilice esta información para identificar la causa del error de acceso denegado y su solución.
-
Identifique la identidad del operador.
El campo auth subject de la ventana emergente de la consola proporciona los detalles de la identidad del operador. En una respuesta de error de la API, los campos correspondientes se encuentran en
AccessDeniedDetail.Identity Type (AuthPrincipalType en la respuesta de la API): el tipo de identidad del operador, que puede ser un usuario de RAM, un rol de RAM o una identidad federada. En la respuesta de la API, SubUser indica un usuario de RAM, AssumedRoleUser indica un rol de RAM y Federated indica una identidad federada.
Identity Information (AuthPrincipalDisplayName en la respuesta de la API): el identificador de la identidad. Un usuario de RAM proporciona el UID. Un rol de RAM proporciona el nombre del rol y el nombre de la sesión del rol, por ejemplo,
RoleName:RoleSessionName. Una identidad federada proporciona el tipo y el nombre del proveedor de identidades, por ejemplo,saml-provider/AzureAD.Account ID (AuthPrincipalOwnerId en la respuesta de la API): el UID de la cuenta de Alibaba Cloud a la que pertenece la identidad.
-
Identifique el permiso faltante.
El campo Action (AuthAction en la respuesta de la API) muestra la acción específica que provocó el error de acceso denegado. Puede usar esta acción para solucionar el problema u otorgar el permiso.
Compruebe también si la acción implica una dependencia entre productos cuando solucione un error de acceso denegado. Algunas acciones de la consola invocan las API de otros productos de la nube en la capa subyacente. Esta dependencia no se deduce del nombre del producto donde reside la entrada de la acción. Use la authorization action de los detalles del error, por ejemplo,
oos:StartExecution, para determinar qué permiso falta realmente. -
Identifique el tipo de política que afecta el permiso.
El campo Policy Type (PolicyType en la respuesta de la API) muestra el tipo de política que causó el error de acceso denegado. Incluye la política de control, la política de sesión, la política de confianza, la política basada en identidad a nivel de cuenta y la política basada en identidad a nivel de resource group. Para obtener más información, consulte Policy evaluation process.
El tipo de política determina cómo ajustarla:
Si una control policy (ControlPolicy) deniega la acción, comuníquese con la cuenta de administración de su directorio de recursos para que otorgue el permiso. Una política de control define el límite de permisos para las cuentas miembro dentro de un directorio de recursos y tiene prioridad sobre la decisión de permisos dentro de una cuenta.
Si una session policy (SessionPolicy) deniega la acción, solicite al administrador de su cuenta que revise la política de sesión adjunta a la llamada de AssumeRole.
Si una trust policy (AssumeRolePolicy) deniega la acción, pida al administrador de su cuenta que revise la política de confianza del rol de RAM asumido.
Si una identity-based policy (AccountLevelIdentityBasedPolicy o ResourceGroupLevelIdentityBasedPolicy) deniega la acción, solicite al administrador de su cuenta que revise las políticas basadas en identidad otorgadas a la identidad del operador.
-
Determine si el error de acceso denegado se debe a una denegación implícita o a una denegación explícita.
Denegación implícita: la causa del error indica que la acción no está autorizada y el campo Denied Type muestra
insufficient permissions. El campo NoPermissionType en la respuesta de la API muestraImplicitDeny. En este caso, el administrador de su cuenta debe otorgarle el permiso para ejecutar la acción. Para ello, debe agregar Action a una instrucción Allow.Denegación explícita: la causa del error indica que la acción se denegó de forma explícita y el campo Denied Type muestra
explicit deny. El campo NoPermissionType en la respuesta de la API muestraExplicitDeny. En este caso, el administrador de su cuenta debe revisar los permisos otorgados y comprobar si alguna instrucción Deny incluye Action. Si el tipo de política es una política de control, también se devuelve una denegación explícita cuando la acción de autorización no está incluida en una instrucción Allow.
Después de ajustar el permiso, repita la operación que falló. El error de acceso denegado ya no debería aparecer. Si el error persiste, compruebe si el producto de destino admite la autorización basada en RAM y vuelva a revisar el tipo de política.
La función de diagnóstico de permisos es una herramienta de diagnóstico posterior. Primero debe ejecutar una llamada a la API y provocar una denegación. Después, use el mensaje de diagnóstico (EncodedDiagnosticMessage) o el RequestId para rastrear de forma inversa el motivo de la denegación. Ambos valores provienen de la respuesta de la llamada a la API denegada. Esta función no admite simular los permisos efectivos de una identidad de RAM en un resource group sin una llamada real. Para comprobar los permisos de antemano, utilice uno de los siguientes métodos:
Para auditar los permisos existentes de sus identidades de RAM e identificar privilegios excesivos, utilice la función Access Analysis para crear un analizador.
Para verificar si los permisos son suficientes antes de una sola llamada, agregue el parámetro
DryRuna la llamada de la API.
Acceso a la consola
La mayoría de los mensajes emergentes de acceso denegado en la consola proporcionan detalles adicionales además de la causa del error. Lea los detalles del error y siga los pasos de Diagnose an access denied error para identificar la causa y su solución. Si la ventana emergente no muestra los detalles del error, reproduzca la misma operación mediante una llamada a la API con un SDK o el CLI para obtener AccessDeniedDetail. También puede usar el RequestId de la llamada denegada para rastrear el motivo de la denegación en la página de diagnóstico de permisos de RAM.
Además, en los productos que admiten el diagnóstico de permisos, puede hacer clic en Troubleshooting en la ventana emergente de error para consultar directamente la causa y la solución.
La sección Solution de la ventana emergente de diagnóstico de permisos recomienda las políticas del sistema que puede adjuntar, como AliyunRAMFullAccess y AliyunRAMReadOnlyAccess. También ofrece acciones rápidas como View Authorization, Create Policy y Add permission.
Llamadas a la API
Cuando invoca una operación de la API directamente mediante un kit de desarrollo de software (SDK) de Alibaba Cloud, la interfaz de línea de comandos (CLI) o el OpenAPI Developer Portal, la respuesta de error proporciona información detallada. A continuación se muestra un ejemplo de respuesta de error devuelta durante la depuración en el OpenAPI Developer Portal.
{
"RequestId": "1090E608-D26F-5A08-BAE3-80D350E9FE20",
"HostId": "ram.aliyuncs.com",
"Code": "NoPermission",
"Message": "You are not authorized to do this action. resource: acs:ram:*:xxx:user/* Action: ram:ListUsers",
"Recommend": "https://next.api.alibabacloud.com/troubleshoot?q=NoPermission&product=Ram",
"AccessDeniedDetail": {
"PolicyType": "AccountLevelIdentityBasedPolicy",
"AuthPrincipalOwnerId": "xxx",
"EncodedDiagnosticMessage": "AQIBIAAAAMDAbkn...jHF4TLvjT8hp17I0RFKObkV4=",
"AuthPrincipalType": "SubUser",
"AuthPrincipalDisplayName": "xxx",
"NoPermissionType": "ExplicitDeny",
"AuthAction": "ram:ListUsers"
}
}
El campo AccessDeniedDetail de la respuesta de error muestra los detalles del error de acceso denegado. Siga los pasos de Diagnose an access denied error para identificar la causa del error y su solución.
Además, en los productos que admiten el diagnóstico de permisos, puede proporcionar todo el contenido del campo EncodedDiagnosticMessage al administrador de su cuenta. Luego, el administrador puede ir a la página de diagnóstico de permisos de RAM, introducir el valor completo de EncodedDiagnosticMessage y consultar la causa del error y la solución decodificadas. El resultado decodificado proporciona la misma información que la ventana emergente de diagnóstico de permisos en la consola. El administrador de la cuenta debe tener el permiso ram:DecodeDiagnosticMessage.
Escenarios comunes
Otorgar permisos de productos de la nube a un usuario de RAM
Cuando un usuario de RAM opera un producto de la nube como ECS, OSS o RDS, la consola muestra permission denied o una llamada a la API devuelve el error Forbidden.RAM. Esto suele ocurrir porque al usuario de RAM no se le han otorgado los permisos para operar el producto de la nube correspondiente.
Complete este procedimiento con la cuenta de Alibaba Cloud a la que pertenece el usuario de RAM. Si usted es el usuario de RAM que recibe el error, envíe este procedimiento al administrador de su cuenta.
Inicie sesión en la consola de RAM con su cuenta de Alibaba Cloud.
En el panel de navegación izquierdo, elija Identities > Users.
En la lista de usuarios, busque el usuario de RAM de destino y haga clic en su nombre de inicio de sesión.
Haga clic en la pestaña Permissions y luego haga clic en Grant Permission.
En el cuadro de búsqueda de políticas, introduzca el nombre del producto de la nube de destino, como
ECS. Seleccione la política del sistema correspondiente y confirme la autorización.
La siguiente tabla enumera los productos de la nube comunes y sus políticas del sistema correspondientes.
|
Producto de la nube |
Política de acceso total |
Política de acceso de solo lectura |
|
Elastic Compute Service (ECS) |
|
|
|
Object Storage Service (OSS) |
|
|
|
ApsaraDB RDS |
|
|
|
Virtual Private Cloud (VPC) |
|
|
|
Server Load Balancer (SLB) |
|
|
Para obtener más información sobre las políticas del sistema, consulte Manage permissions for RAM users.
Las políticas del sistema de la tabla anterior aplican únicamente a los productos que admiten la autorización basada en RAM. Si el error de acceso denegado persiste después de otorgar los permisos, consulte la documentación del producto correspondiente para confirmar si admite la autorización basada en RAM.
Permisos insuficientes al exportar la lista de instancias en la consola de ECS
Síntoma
A un usuario de RAM se le otorgó la política del sistema ReadOnlyAccess. Después de que el usuario hace clic en Export Instance List en la consola de ECS, se sigue mostrando un error de acceso denegado o se devuelve el error User.NoPermission. En los detalles del error, la authorization action es oos:StartExecution y la permission decision es insufficient permissions.
Causa
La función de exportación de la lista de instancias en la consola de ECS utiliza CloudOps Orchestration Service (OOS) para la gestión de operaciones y ejecuta la tarea de exportación de forma asíncrona. Esta acción requiere el permiso oos:StartExecution. ReadOnlyAccess solo incluye permisos de consulta de solo lectura sobre los recursos de los productos de la nube y no incluye los permisos de ejecución de CloudOps Orchestration Service. Por lo tanto, un usuario de RAM con permisos exclusivos de solo lectura no puede iniciar la exportación.
Solución
Adjunte la política del sistema AliyunOOSFullAccess al usuario de RAM o cree una política personalizada que otorgue el permiso oos:StartExecution. Después, vuelva a exportar la lista de instancias. Este escenario es un ejemplo de la dependencia entre productos descrita en Diagnose an access denied error: el permiso faltante pertenece a OOS, no a ECS.
Fallos de autenticación HTTP 401
Si recibe un error HTTP 401 como InvalidAccessKeyId.NotFound al invocar una operación de la API o acceder a la consola, la autenticación falló. Un error HTTP 401 indica un fallo de autenticación; es decir, el sistema no puede identificar la identidad actual. Gestione este error por separado del error de acceso denegado, que señala un fallo de autorización: la identidad se identifica, pero no tiene el permiso para ejecutar la acción. Cuando encuentre un error 401, resuélvalo con los siguientes pasos.
-
Compruebe si el par de AccessKey es válido.
Inicie sesión en la consola de RAM y consulte la lista de AccessKey. Si se eliminó el par de AccessKey, cree uno nuevo. Si el par de AccessKey está en estado Inactive, las llamadas a la API no se ven afectadas. Solo se afecta el inicio de sesión en la consola.
-
Compruebe el estado del usuario de RAM.
Asegúrese de que el usuario de RAM esté en estado Active. Si el usuario de RAM está en estado Inactive, habilítelo primero.
-
Compruebe el periodo de validez del token de Security Token Service (token STS).
Si usa credenciales temporales de STS para la llamada, unas credenciales caducadas provocan un fallo de autenticación. Vuelva a invocar la operación AssumeRole para obtener un nuevo token STS.