Cuando los trabajos de DLC acceden a otros recursos en la nube, es necesario configurar un par de AccessKey para la autenticación. Al asociar un rol de RAM, el trabajo de DLC utiliza credenciales temporales de Security Token Service (STS) para acceder a otros servicios en la nube. Esto elimina la necesidad de usar pares de AccessKey de larga duración y reduce el riesgo de filtración de claves. En este tema se describe cómo crear un rol de RAM, otorgar permisos a DLC y obtener credenciales de acceso temporales mediante dicho rol.
Ventajas
Un RAM role es una entidad de confianza que los servicios en la nube pueden asumir para gestionar el acceso entre servicios. Usar un rol de RAM para la autenticación y el control de acceso ofrece las siguientes ventajas:
Seguridad: las credenciales temporales de STS reemplazan a los pares de AccessKey de larga duración, lo que reduce el riesgo de filtración de claves.
Control y comodidad: puede controlar con precisión el acceso de los desarrolladores a los recursos en la nube si modifica la política de permisos del rol de RAM.
Límites
Solo es posible asociar un rol de RAM a cada trabajo de DLC.
Métodos de configuración
Al crear un trabajo de DLC, configure un rol de RAM y obtenga credenciales temporales de STS.
Configurar un rol de RAM para DLC
Rol predeterminado de PAI
El rol predeterminado de PAI se basa en el rol de servicio AliyunPAIDLCDefaultRole. Cuenta con permisos específicos para acceder únicamente a MaxCompute y Object Storage Service (OSS). Las credenciales temporales emitidas desde este rol tienen los mismos permisos que la cuenta de Alibaba Cloud al acceder a tablas de MaxCompute. Para OSS, solo permiten acceder al bucket de OSS predeterminado configurado en el espacio de trabajo actual.
Una vez otorgado el rol predeterminado de PAI, puede obtener credenciales temporales dentro del trabajo para acceder a los recursos básicos de desarrollo. Así evita otorgar permisos excesivos o crear un rol de RAM adicional.
-
Casos de uso
Si ya otorgó el rol predeterminado de PAI, no necesita configurar un par de AccessKey en los siguientes escenarios:
Envío de un trabajo mediante el SDK de PyODPS a un proyecto de MaxCompute donde el propietario del trabajo tiene permisos de ejecución.
Acceso a datos en el default OSS bucket configurado para el espacio de trabajo actual mediante el SDK de OSS.
-
Método de configuración
Cuando create a DLC job, en la sección Roles and Permissions, seleccione Default Roles of PAI como Instance RAM Role. En la misma sección, establezca Visibility en Visible within the workspace y Instance RAM Role en default role of PAI.
Después de configurar el rol de RAM, debe obtain a temporary access credential by using the associated RAM role.
Rol personalizado
Si los permisos de las credenciales temporales del rol predeterminado de PAI no cubren sus necesidades, cree un rol de RAM y personalice su política de permisos. Siga estos pasos:
-
Inicie sesión en la consola de RAM y create a RAM role.
Configure los siguientes parámetros clave:
Principal Type: seleccione Cloud Services.
Principal Name: seleccione PAI.
-
Otorgue permisos al rol de RAM creado.
Attach a system or custom policy al rol de RAM para definir sus permisos. Por ejemplo, asigne la política AliyunOSSReadOnlyAccess al rol de RAM para conceder acceso de solo lectura a OSS.
Si usted es un usuario de RAM, solicite al administrador de su cuenta de Alibaba Cloud que le otorgue los permisos necesarios para usar el rol de RAM. Para más información, consulte Manage RAM user permissions. A continuación se muestra un ejemplo de política de permisos personalizada:
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram::*:role/${RoleName}" } ] }Reemplace ${RoleName} por el nombre del rol de RAM asociado al trabajo de DLC.
-
Envíe el trabajo de DLC y asocie el rol de RAM. En la sección Roles and Permissions, configure los siguientes parámetros clave. Para conocer el resto de los parámetros, consulte Create a training job.
Parámetro
Descripción
Instance RAM Role
Seleccione Custom Role.
RAM Role
Seleccione el rol de RAM que creó en los pasos anteriores. La credencial temporal hereda los permisos de este rol personalizado al acceder a los servicios en la nube.
Después de configurar el rol de RAM, debe obtain a temporary access credential by using the associated RAM role.
Sin rol asociado
Si no necesita usar un par de AccessKey para acceder a los datos, se recomienda no asociar ningún rol. Cuando create a DLC job, en la sección Roles and Permissions, seleccione Does Not Associate Role como Instance RAM Role. En la misma sección, establezca Visibility en Visible to creator only y Instance RAM Role en Do not associate role.
Obtener una credencial de acceso temporal
Si asigna el rol predeterminado de PAI o un rol personalizado a un trabajo de DLC, puede obtener credenciales temporales de las siguientes maneras:
Usar la herramienta de credenciales
La herramienta Alibaba Cloud Credentials tool obtiene credenciales temporales de STS al llamar a un servicio local que se inyecta automáticamente cuando se crea el trabajo. Estas credenciales se actualizan automáticamente de forma periódica.
Cuando create a DLC job, complete las siguientes configuraciones clave:
-
Instale la herramienta Alibaba Cloud Credentials.
En la sección Third-party Library Settings, seleccione Third-party Libraries e introduzca alibabacloud_credentials en el cuadro de texto para instalar la herramienta Alibaba Cloud Credentials.
NotaPuede omitir este paso si la biblioteca ya viene preinstalada en la imagen.
-
Configure un archivo de script.
A continuación se muestra un ejemplo de script en Python. Para ver más ejemplos en otros lenguajes de SDK, consulte Best practices for using access credentials to access Alibaba Cloud OpenAPI. Utilice la opción Source Code Repositories o Mount Configuration para cargar el archivo de script en el entorno de DLC.
from alibabacloud_credentials.client import Client as CredClient from alibabacloud_credentials.models import Config as CredConfig credentialsConfig = CredConfig( type='credentials_uri' ) credentialsClient = CredClient(credentialsConfig)
Acceder al servicio local
Cuando create a DLC job, ejecute el siguiente comando en el campo Startup Command para obtener credenciales temporales del servicio local inyectado automáticamente.
# Obtain a temporary access credential for the instance RAM role.
curl $ALIBABA_CLOUD_CREDENTIALS_URI
El siguiente ejemplo muestra una salida de muestra:
{
"Code": "Success",
"AccessKeyId": "STS.N*********7",
"AccessKeySecret": "3***************d",
"SecurityToken": "DFE32G*******"
"Expiration": "2024-05-21T10:39:29Z"
}
Descripción de los campos:
SecurityToken: el token de seguridad temporal del rol de RAM.
Expiration: la fecha y hora de vencimiento de las credenciales temporales.
Acceder a un archivo local
Dentro del contenedor de DLC, lea el archivo en la ruta especificada para obtener las credenciales temporales del rol de RAM. PAI inyecta y actualiza este archivo automáticamente de forma periódica. La ruta del archivo es /mnt/.alibabacloud/credentials. El siguiente código muestra el contenido del archivo:
{
"AccessKeyId": "STS.N*********7",
"AccessKeySecret": "3***************d",
"SecurityToken": "DFE32G*******"
"Expiration": "2024-05-21T10:39:29Z"
}
Ejemplos
Acceder a ODPS
Cuando create a DLC job, complete las siguientes configuraciones clave:
-
Instale las bibliotecas obligatorias.
En la sección Third-party Library Settings, configure Third-party Libraries para instalar la herramienta Alibaba Cloud Credentials y el SDK de ODPS.
alibabacloud_credentials pyodpsNotaPuede omitir este paso si estas bibliotecas ya vienen preinstaladas en la imagen.
-
Configure un archivo de script.
A continuación se muestra un ejemplo de script en Python. Utilice la opción Source Code Repositories o Mount Configurations para cargar el archivo de script en el entorno de DLC y configure una Mount Path, como
/mnt/data/.from alibabacloud_credentials import providers from odps.accounts import CredentialProviderAccount from odps import ODPS if __name__ == '__main__': account = CredentialProviderAccount(providers.DefaultCredentialsProvider()) o = ODPS( account=account, project="{odps_project}", # Replace with your project name. endpoint="{odps_endpoint}" # Replace with the endpoint of the region where your project is located. ) for t in o.list_tables(): print(t) -
Configure el comando de inicio.
Establezca Startup Command con el comando que ejecuta el script. Por ejemplo,
python /mnt/data/xx.py. -
Configure la información del rol.
Para Instance RAM Role, seleccione Default Roles of PAI.
Acceder a OSS
Cuando create a DLC job, complete las siguientes configuraciones clave:
-
Instale las bibliotecas obligatorias.
En la sección Third-party Library Settings, configure Third-party Libraries para instalar la herramienta Alibaba Cloud Credentials y el SDK de OSS.
alibabacloud_credentials oss2NotaPuede omitir este paso si estas bibliotecas ya vienen preinstaladas en la imagen.
-
Configure un archivo de script.
A continuación se muestra un ejemplo de script en Python. Utilice la opción Source Code Repositories o Mount Configurations para cargar el archivo de script en el entorno de DLC y configure una Mount Path, como
/mnt/data/.import oss2 from alibabacloud_credentials.client import Client from alibabacloud_credentials import providers from itertools import islice auth = oss2.ProviderAuth(providers.DefaultCredentialsProvider()) bucket = oss2.Bucket(auth, '{oss_endpoint}', # Replace with the endpoint of the region where your OSS bucket is located. '{oss_bucket}' # Replace with the name of your OSS bucket. ) for b in islice(oss2.ObjectIterator(bucket), 10): print(b.key) -
Configure el comando de inicio.
Establezca Startup Command con el comando que ejecuta el script. Por ejemplo,
python /mnt/data/xx.py. -
Configure la información del rol.
Para Instance RAM Role, seleccione Default Roles of PAI.
Preguntas frecuentes
Error al seleccionar un rol personalizado
-
Mensaje de error: check permission for ram role failed o check permission for RAM user failed.
Inicie sesión en la consola de RAM para comprobar que el rol existe.
Si el rol no existe, cambie Instance RAM Role por un rol existente.
-
Si el rol existe, solicite al administrador de su cuenta de Alibaba Cloud que otorgue a su usuario de RAM los permisos para usarlo. Para más información, consulte Manage RAM user permissions. A continuación se muestra un ejemplo de política de permisos personalizada. Reemplace
${RoleName}por el nombre de su rol de RAM.{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram::*:role/${RoleName}" } ] }
-
Mensaje de error: Failed to assume role for user.
Este error suele ocurrir porque no se configuró una política de confianza para el rol. Agregue una política de confianza con los siguientes pasos:
Inicie sesión en la consola de RAM como administrador de RAM.
En el panel de navegación izquierdo, elija .
En la página Roles, haga clic en el nombre del rol de RAM correspondiente.
En la pestaña Trust Policy, haga clic en Edit Trust Policy.
-
En el editor, modifique la política de confianza y luego haga clic en OK.
Supongamos que la política de confianza original del rol es la siguiente:
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::aaa:root" ], "Service": [ "xxx.aliyuncs.com" ] } } ], "Version": "1" }El contenido de la nueva política es el siguiente:
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::aaa:root" ], "Service": [ "xxx.aliyuncs.com", "pai.aliyuncs.com" ] } } ], "Version": "1" }