Cuando utiliza funciones como el registro, el acceso a VPC o la invocación asíncrona, Function Compute necesita permisos para acceder a otros servicios en la nube. Por ejemplo, para configurar el registro de una función, debe otorgar a Function Compute permisos de escritura sobre un logstore específico para que pueda escribir los registros de la función.
Para simplificar el proceso de autorización, Function Compute admite un service-linked role. Las funciones usan este rol de forma predeterminada, lo que les permite acceder a capacidades como el registro, el acceso a VPC y la invocación asíncrona sin necesidad de configurar roles adicionales.
Si el código de su función necesita acceder a otros servicios en la nube o requiere permisos más específicos, debe configurar un Function Role. Cuando se invoca la función, Function Compute asume automáticamente el rol configurado.
Cómo funciona
Function Compute obtiene credenciales temporales (un token de STS) mediante una llamada a AssumeRole, con base en el rol que usted configura para la función. Después, las pasa a su función a través del parámetro Credentials o credentials del contexto. Estas credenciales temporales otorgan acceso a todos los recursos cubiertos por los permisos configurados. Puede usarlas en el código de su función para acceder a otros servicios de Alibaba Cloud.
Las credenciales temporales tienen una vigencia fija de 36 horas. Dado que la duración máxima de ejecución de una función es de 24 horas, las credenciales no caducan durante su ejecución.
La ubicación del parámetro Credentials o credentials varía según el entorno de ejecución. Para obtener información sobre entornos específicos, consulte los siguientes enlaces. En los entornos de ejecución personalizados y las imágenes personalizadas, las credenciales temporales se inyectan en los encabezados de la solicitud HTTP.
Ejemplo: otorgar acceso a OSS
Este ejemplo muestra cómo otorgar a una función el permiso para gestionar OSS. Creará un rol con permisos de OSS y luego lo vinculará a la función.
Requisitos previos
Procedimiento
Paso 1: crear un rol y otorgar permisos
Inicie sesión en la consola de RAM. En el panel de navegación izquierdo, elija Roles > Create Role.
En la página Create Role, seleccione Cloud Service en Principal Type y Function Compute / FC en Principal Name. A continuación, haga clic en OK.
En el cuadro de diálogo Create Role que aparece, establezca el Role Name; por ejemplo,
mytestrole. Luego, haga clic en OK. Esto lo redirige a la página de detalles del rol.En la pestaña Permissions, haga clic en Grant Permission. En el panel Grant Permission, siga estos pasos para otorgar permisos al rol.
-
Seleccione el Resource Scope. De forma predeterminada, el Principal es el rol de destino. En la lista de directivas, seleccione la casilla junto a una directiva del sistema o personalizada para agregarla a la lista Selected Policies. Después, haga clic en OK. Para obtener más información, consulte Policies and examples.
Account: los permisos surten efecto dentro de la cuenta actual de Alibaba Cloud.
Resource Group: los permisos surten efecto dentro del resource group especificado. Esta opción solo está disponible si el servicio en la nube admite resource groups. Para obtener más información, consulte Cloud services that support resource groups.
En este ejemplo, para gestionar OSS, debe agregar la directiva del sistema AliyunOSSFullAccess al nuevo rol.
Paso 2: vincular el rol a la función de destino
Inicie sesión en la consola de Function Compute. En el panel de navegación izquierdo, elija .
En la barra de menú superior, seleccione una región. En la página Functions, busque la función de destino y haga clic en Configuration en la columna Actions.
En la página de detalles de la función, seleccione la pestaña Configuration. En la sección Advanced Settings, haga clic en Modify. En el panel Advanced Settings, expanda la sección Permissions. En Function Role, seleccione el rol
mytestroleque creó en Step 1. Luego, haga clic en Deploy.
Paso 3: probar la función
Compruebe si la función asociada al rol mytestrole tiene permisos para gestionar OSS.
-
En la página de lista de funciones, haga clic en la función de destino. En la pestaña Code, haga clic en la flecha junto a Test Function y seleccione Configure Test Parameters. A continuación se muestra un evento de prueba de ejemplo.
{ "endpoint": "http://oss-cn-hangzhou.aliyuncs.com", "bucket": "web****", "objectName": "myObj", "message": "your-message" }En este ejemplo, reemplace el valor de
bucketcon el nombre de su bucket, el cual debe estar en la misma región que la función. -
En la pestaña Code, introduzca el código en el editor y haga clic en Deploy.
Este ejemplo usa el entorno de ejecución de Python. El código utiliza las credenciales temporales proporcionadas por Function Compute para acceder a OSS.
import json import oss2 def handler(event, context): evt = json.loads(event) creds = context.credentials # Use the temporary credentials injected by Function Compute. # Your Alibaba Cloud account AccessKey pair grants full access to all API operations. # We recommend that you use a RAM user for API access and routine O&M. # To prevent security risks, do not hardcode the AccessKey ID and AccessKey secret in your project code. # This example shows how to obtain the AccessKey ID and AccessKey secret from the context. auth = oss2.StsAuth(creds.access_key_id, creds.access_key_secret, creds.security_token) bucket = oss2.Bucket(auth, evt['endpoint'], evt['bucket']) bucket.put_object(evt['objectName'], evt['message']) return 'success' Haga clic en Test Function. Una vez que la función se ejecute correctamente, inicie sesión en la consola de OSS, busque el bucket de destino y compruebe que el contenido del objeto de destino se haya actualizado con el valor del parámetro
messagedel evento de prueba.
Referencias
Function Compute 3.0 admite roles vinculados al servicio para aplicar la autorización de privilegio mínimo. Para obtener detalles sobre la directiva del rol vinculado al servicio, consulte AliyunServiceRoleForFC.
Para aprender a configurar un rol de función, consulte Create a function.