使用 IAM 策略 - Amazon SDK for JavaScript
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

我们已宣布即将终止对 Amazon SDK for JavaScript v2 的支持。建议您迁移到 Amazon 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