Trabajo con políticas de IAM - AWS SDK for JavaScript

Anunciamos la próxima AWS SDK for JavaScript versión end-of-support para la versión 2. Le recomendamos que migre a la AWS SDK for JavaScript versión 3. Para ver las fechas, los detalles adicionales y la información sobre cómo realizar la migración, consulte el anuncio enlazado.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Trabajo con políticas de IAM

JavaScript code example that applies to Node.js execution

Este ejemplo de código de Node.js muestra:

  • Cómo crear y eliminar políticas de IAM.

  • Cómo asociar y desconectar políticas de IAM de los roles.

El escenario

Conceda permisos a un usuario mediante una política, que es un documento que elabora una lista de las acciones que puede realizar un usuario y los recursos que afectan a dichas acciones. De forma predeterminada, todas las acciones o recursos que no se permiten de forma explícita se deniegan. Puede crear políticas y asociarlas a usuarios, a grupos de usuarios, a roles asumidos por usuarios y a recursos.

En este ejemplo, se van a utilizar una serie de módulos de Node.js para administrar políticas en IAM. Los módulos de Node.js usan el SDK para JavaScript para crear y eliminar políticas, así como para asociar y desvincular políticas de roles utilizando estos métodos de la clase de cliente de AWS.IAM:

Para obtener más información sobre las políticas de IAM, consulte Información general sobre la administración del acceso: permisos y políticas en la Guía del usuario de IAM.

Tareas previas necesarias

Para configurar y ejecutar este ejemplo, primero debe completar estas tareas:

Crear una política de IAM

Cree un módulo de Node.js con el nombre de archivo iam_createpolicy.js. Asegúrese de configurar el SDK tal y como se ha indicado anteriormente. Para obtener acceso a IAM, cree un objeto de servicio AWS.IAM. Cree dos objetos JSON, uno de ellos que contenga el documento de política que desea crear y el otro que contenga los parámetros necesarios para crear la política, lo que incluye el JSON de política y el nombre que desea dar a la política. Asegúrese de convertir en representación textual al objeto JSON de política en los parámetros. Llame al método createPolicy del objeto de servicio de AWS.IAM.

// Load the AWS SDK for Node.js var AWS = require("aws-sdk"); // Set the region AWS.config.update({ region: "REGION" }); // Create the IAM service object var iam = new AWS.IAM({ apiVersion: "2010-05-08" }); var myManagedPolicy = { Version: "2012-10-17", Statement: [ { Effect: "Allow", Action: "logs:CreateLogGroup", Resource: "RESOURCE_ARN", }, { Effect: "Allow", Action: [ "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:Scan", "dynamodb:UpdateItem", ], Resource: "RESOURCE_ARN", }, ], }; var params = { PolicyDocument: JSON.stringify(myManagedPolicy), PolicyName: "myDynamoDBPolicy", }; iam.createPolicy(params, function (err, data) { if (err) { console.log("Error", err); } else { console.log("Success", data); } });

Para ejecutar el ejemplo, escriba lo siguiente en la línea de comandos.

node iam_createpolicy.js

Este código de muestra se puede encontrar aquí en GitHub.

Obtención de una política de IAM

Cree un módulo de Node.js con el nombre de archivo iam_getpolicy.js. Asegúrese de configurar el SDK tal y como se ha indicado anteriormente. Para obtener acceso a IAM, cree un objeto de servicio AWS.IAM. Cree un objeto JSON que contenga los parámetros necesarios para recuperar una política, que es el ARN de la política que desea obtener. Llame al método getPolicy del objeto de servicio de AWS.IAM. Escriba la descripción de la política en la consola.

// Load the AWS SDK for Node.js var AWS = require("aws-sdk"); // Set the region AWS.config.update({ region: "REGION" }); // Create the IAM service object var iam = new AWS.IAM({ apiVersion: "2010-05-08" }); var params = { PolicyArn: "arn:aws:iam::aws:policy/AWSLambdaExecute", }; iam.getPolicy(params, function (err, data) { if (err) { console.log("Error", err); } else { console.log("Success", data.Policy.Description); } });

Para ejecutar el ejemplo, escriba lo siguiente en la línea de comandos.

node iam_getpolicy.js

Este código de muestra se puede encontrar aquí en GitHub.

Asociación de una política de roles administrada

Cree un módulo de Node.js con el nombre de archivo iam_attachrolepolicy.js. Asegúrese de configurar el SDK tal y como se ha indicado anteriormente. Para obtener acceso a IAM, cree un objeto de servicio AWS.IAM. Cree un objeto JSON que contenga los parámetros necesarios para obtener una lista de políticas de IAM administradas asociada a un rol, que se compone del nombre del rol. Proporcione el nombre del rol como un parámetro de línea de comandos. Llame al método listAttachedRolePolicies del objeto de servicio AWS.IAM, que devuelve una matriz de políticas administradas a la función de devolución de llamada.

Compruebe los miembros de la matriz para ver si la política que desea asociar al rol ya se ha asociado. Si la política no está asociada, llame al método attachRolePolicy para asociarla.

// Load the AWS SDK for Node.js var AWS = require("aws-sdk"); // Set the region AWS.config.update({ region: "REGION" }); // Create the IAM service object var iam = new AWS.IAM({ apiVersion: "2010-05-08" }); var paramsRoleList = { RoleName: process.argv[2], }; iam.listAttachedRolePolicies(paramsRoleList, function (err, data) { if (err) { console.log("Error", err); } else { var myRolePolicies = data.AttachedPolicies; myRolePolicies.forEach(function (val, index, array) { if (myRolePolicies[index].PolicyName === "AmazonDynamoDBFullAccess") { console.log( "AmazonDynamoDBFullAccess is already attached to this role." ); process.exit(); } }); var params = { PolicyArn: "arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess", RoleName: process.argv[2], }; iam.attachRolePolicy(params, function (err, data) { if (err) { console.log("Unable to attach policy to role", err); } else { console.log("Role attached successfully"); } }); } });

Para ejecutar el ejemplo, escriba lo siguiente en la línea de comandos.

node iam_attachrolepolicy.js IAM_ROLE_NAME

Desvinculación de una política de roles administrada

Cree un módulo de Node.js con el nombre de archivo iam_detachrolepolicy.js. Asegúrese de configurar el SDK tal y como se ha indicado anteriormente. Para obtener acceso a IAM, cree un objeto de servicio AWS.IAM. Cree un objeto JSON que contenga los parámetros necesarios para obtener una lista de políticas de IAM administradas asociada a un rol, que se compone del nombre del rol. Proporcione el nombre del rol como un parámetro de línea de comandos. Llame al método listAttachedRolePolicies del objeto de servicio AWS.IAM, que devuelve una matriz de políticas administradas en la función de devolución de llamada.

Compruebe los miembros de la matriz para ver si la política que desea desvincular del rol está asociada. Si la política está asociada, llame al método detachRolePolicy para desvincularla.

// Load the AWS SDK for Node.js var AWS = require("aws-sdk"); // Set the region AWS.config.update({ region: "REGION" }); // Create the IAM service object var iam = new AWS.IAM({ apiVersion: "2010-05-08" }); var paramsRoleList = { RoleName: process.argv[2], }; iam.listAttachedRolePolicies(paramsRoleList, function (err, data) { if (err) { console.log("Error", err); } else { var myRolePolicies = data.AttachedPolicies; myRolePolicies.forEach(function (val, index, array) { if (myRolePolicies[index].PolicyName === "AmazonDynamoDBFullAccess") { var params = { PolicyArn: "arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess", RoleName: process.argv[2], }; iam.detachRolePolicy(params, function (err, data) { if (err) { console.log("Unable to detach policy from role", err); } else { console.log("Policy detached from role successfully"); process.exit(); } }); } }); } });

Para ejecutar el ejemplo, escriba lo siguiente en la línea de comandos.

node iam_detachrolepolicy.js IAM_ROLE_NAME