使用 IAM 策略 - AWS SDK for JavaScript

我们已宣布即将终止对 AWS SDK for JavaScript v2 的支持。建议您迁移到 AWS SDK for JavaScript v3。有关日期、其他详细信息以及如何迁移的信息,请参阅链接的公告。

使用 IAM 策略

JavaScript code example that applies to Node.js execution

此 Node.js 代码示例演示:

  • 如何创建和删除 IAM policy。

  • 如何对角色附加和分离 IAM policy。

情景

您可通过创建策略(此文档列出用户可执行的操作以及操作可以影响的资源)向用户授予权限。默认情况下会拒绝未显式允许的任何操作或资源。可将策略附加到用户、用户组、用户代入的角色以及资源。

本示例使用一系列 Node.js 模块在 IAM 中管理策略。这些 Node.js 模块使用 SDK for JavaScript,通过 AWS.IAM 客户端类的以下方法来创建和删除策略,以及附加和分离角色策略:

有关 IAM 用户的更多信息,请参阅《IAM 用户指南》中的访问管理概述:权限和策略

先决条件任务

要设置和运行此示例,您必须先完成以下任务:

创建 IAM Policy

创建文件名为 iam_createpolicy.js 的 Node.js 模块。请确保按前面所示配置开发工具包。要访问 IAM,请创建 AWS.IAM 服务对象。创建两个 JSON 对象,一个包含要创建的策略文档,另一个包含创建策略时所需的参数,该策略包括策略 JSON 以及要为策略指定的名称。确保在参数中对策略 JSON 对象进行字符串化。调用 AWS.IAM 服务对象的 createPolicy 方法。

// 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); } });

要运行示例,请在命令行中键入以下内容。

node iam_createpolicy.js

此示例代码可在 GitHub 上的此处找到。

获取 IAM Policy

创建文件名为 iam_getpolicy.js 的 Node.js 模块。请确保按前面所示配置开发工具包。要访问 IAM,请创建 AWS.IAM 服务对象。创建一个包含检索策略时所需参数的 JSON 对象,该对象是您要获取的策略的 ARN。调用 AWS.IAM 服务对象的 getPolicy 方法。将策略描述写入控制台。

// 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); } });

要运行示例,请在命令行中键入以下内容。

node iam_getpolicy.js

此示例代码可在 GitHub 上的此处找到。

附加托管的角色策略

创建文件名为 iam_attachrolepolicy.js 的 Node.js 模块。请确保按前面所示配置开发工具包。要访问 IAM,请创建 AWS.IAM 服务对象。创建一个包含获取附加到角色的托管 IAM policy 列表时所需参数的 JSON 对象,其中包括角色名称。提供角色名称作为命令行参数。调用 AWS.IAM 服务对象的 listAttachedRolePolicies 方法,该方法向回调函数返回托管策略的数组。

检查数组成员,查看要附加到角色的策略是否已附加。如果策略未附加,则调用 attachRolePolicy 方法附加该策略。

// 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"); } }); } });

要运行示例,请在命令行中键入以下内容。

node iam_attachrolepolicy.js IAM_ROLE_NAME

分离托管的角色策略

创建文件名为 iam_detachrolepolicy.js 的 Node.js 模块。请确保按前面所示配置开发工具包。要访问 IAM,请创建 AWS.IAM 服务对象。创建一个包含获取附加到角色的托管 IAM policy 列表时所需参数的 JSON 对象,其中包括角色名称。提供角色名称作为命令行参数。调用 AWS.IAM 服务对象的 listAttachedRolePolicies 方法,该方法在回调函数中返回托管策略的数组。

检查数组成员,查看要从角色分离的策略是否已附加。如果策略已附加,则调用 detachRolePolicy 方法分离该策略。

// 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(); } }); } }); } });

要运行示例,请在命令行中键入以下内容。

node iam_detachrolepolicy.js IAM_ROLE_NAME