我们已宣布
使用 IAM 策略
此 Node.js 代码示例演示:
如何创建和删除 IAM policy。
如何对角色附加和分离 IAM policy。
情景
您可通过创建策略(此文档列出用户可执行的操作以及操作可以影响的资源)向用户授予权限。默认情况下会拒绝未显式允许的任何操作或资源。可将策略附加到用户、用户组、用户代入的角色以及资源。
本示例使用一系列 Node.js 模块在 IAM 中管理策略。这些 Node.js 模块使用 SDK for JavaScript,通过 AWS.IAM
客户端类的以下方法来创建和删除策略,以及附加和分离角色策略:
有关 IAM 用户的更多信息,请参阅《IAM 用户指南》中的访问管理概述:权限和策略。
先决条件任务
要设置和运行此示例,您必须先完成以下任务:
安装 Node.js。有关安装 Node.js 的更多信息,请参阅 Node.js 网站
。 使用用户凭证创建共享配置文件。有关提供共享凭证文件的更多信息,请参阅从共享凭证文件加载 Node.js 中的凭证。
创建一个您可以向其附加策略 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