帮助我们改进Amazon SDK for JavaScript版本 3 (V3) 文档,方法是使用反馈链接,或者在上创建议题或拉取请求GitHub
这些区域有:Amazon SDK for JavaScriptV3 API 参考指南详细描述了Amazon SDK for JavaScript版本 3 (V3)。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 IAM 策略
此 Node.js 代码示例演示:
如何创建和删除 IAM 策略。
如何附加和分离角色的 IAM 策略。
场景
您可通过创建策略(此文档列出用户可执行的操作以及操作可以影响的资源)向用户授予权限。默认情况下会拒绝未显式允许的任何操作或资源。可将策略附加到用户、用户组、用户代入的角色以及资源。
在本示例中,使用一系列 Node.js 模块在 IAM 中管理策略。Node.js 模块使用开发工具包 JavaScript 通过以下方法来创建和删除策略,以及附加和分离角色策略:IAM
客户端类:
有关 IAM 用户的更多信息,请参阅访问管理概述:权限与策略中的IAM 用户指南.
先决条件任
要设置和运行此示例,您必须先完成以下任务:
-
设置项目环境以运行这些 Node TypeScript 示例,然后安装所需的Amazon SDK for JavaScript以及第三方模块。按照中的说明操作GitHub
. -
使用用户凭证创建共享配置文件。有关提供共享凭证文件的更多信息,请参阅从共享凭证文件加载 Node.js 中的凭证。
-
创建可以将策略附加到的 IAM 角色。有关创建角色的更多信息,请参阅创建 IAM 角色中的IAM 用户指南.
这些示例演示了如何使用 ECMASCRIPT6 (ES6) 导入/导出客户端服务对象和命令。
这需要 Node.js 版本 13.x 或更高版本。要下载并安装最新版本的 Node.js,请参阅Node.js 下载。
. 如果您希望使用 CommonJS 语法,请参阅JavaScript ES6/常用JS 语法.
创建 IAM 策略
创建libs
创建文件名为的 Node.js 模块iamClient.js
. 将下面的代码复制并粘贴到其中,这将创建 IAM 客户端对象。Replace领域
使用您的Amazon区域。
import { IAMClient } from "@aws-sdk/client-iam"; // Set the AWS Region. const REGION = "REGION"; // For example, "us-east-1". // Create an IAM service client object. const iamClient = new IAMClient({ region: REGION }); export { iamClient };
可以找到此示例代码在 GitHub 上)
创建文件名为 iam_createpolicy.js
的 Node.js 模块。请确保按前面所示配置开发工具包,包括下载所需客户端和软件包。创建两个 JSON 对象,一个包含要创建的策略文档,另一个包含创建策略时所需的参数,该策略包括策略 JSON 以及为策略指定的名称。确保在参数中对策略 JSON 对象进行字符串化。调用CreatePolicyCommand
方法IAM
客户端服务对象。
Replace资源CE_ARN
与要授予权限的资源的 Amazon 资源名称 (ARN),以及DYNAMODB_POLICY _NAME
使用 DynamoDB 策略名为的名称。
// Import required AWS SDK clients and commands for Node.js. import { iamClient } from "./libs/iamClient.js"; import { CreatePolicyCommand } from "@aws-sdk/client-iam"; // Set the parameters. const myManagedPolicy = { Version: "2012-10-17", Statement: [ { Effect: "Allow", Action: "logs:CreateLogGroup", Resource: "RESOURCE_ARN", // RESOURCE_ARN }, { Effect: "Allow", Action: [ "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:Scan", "dynamodb:UpdateItem", ], Resource: "DYNAMODB_POLICY_NAME", // DYNAMODB_POLICY_NAME; For example, "myDynamoDBName". }, ], }; export const params = { PolicyDocument: JSON.stringify(myManagedPolicy), PolicyName: "IAM_POLICY_NAME", }; export const run = async () => { try { const data = await iamClient.send(new CreatePolicyCommand(params)); console.log("Success", data); return data; } catch (err) { console.log("Error", err); } }; run();
要运行示例,请在命令提示符处输入以下内容。
node iam_createpolicy.js
可以找到此示例代码在 GitHub 上)
获取 IAM 策略
创建libs
创建文件名为的 Node.js 模块iamClient.js
. 将下面的代码复制并粘贴到其中,这将创建 IAM 客户端对象。Replace领域
使用您的Amazon区域。
import { IAMClient } from "@aws-sdk/client-iam"; // Set the AWS Region. const REGION = "REGION"; // For example, "us-east-1". // Create an IAM service client object. const iamClient = new IAMClient({ region: REGION }); export { iamClient };
可以找到此示例代码在 GitHub 上)
创建文件名为 iam_getpolicy.js
的 Node.js 模块。请确保按前面所示配置开发工具包,包括下载所需客户端和软件包。创建一个包含获取策略时所需参数的 JSON 对象,该对象是要获取的策略的 ARN。调用GetPolicyCommand
的方法IAM
客户端服务对象。将策略描述写入控制台。
// Import required AWS SDK clients and commands for Node.js. import { iamClient } from "./libs/iamClient.js"; import { GetPolicyCommand } from "@aws-sdk/client-iam"; // Set the parameters. const params = { PolicyArn: "POLICY_ARN" /* required */, }; const run = async () => { try { const data = await iamClient.send(new GetPolicyCommand(params)); console.log("Success", data.Policy); } catch (err) { console.log("Error", err); } }; run();
要运行示例,请在命令提示符处输入以下内容。
node iam_getpolicy.js
可以找到此示例代码在 GitHub 上)
附加托管角色策略
创建libs
创建文件名为的 Node.js 模块iamClient.js
. 将下面的代码复制并粘贴到其中,这将创建 IAM 客户端对象。Replace领域
使用您的Amazon区域。
import { IAMClient } from "@aws-sdk/client-iam"; // Set the AWS Region. const REGION = "REGION"; // For example, "us-east-1". // Create an IAM service client object. const iamClient = new IAMClient({ region: REGION }); export { iamClient };
可以找到此示例代码在 GitHub 上)
创建文件名为 iam_attachrolepolicy.js
的 Node.js 模块。请确保按前面所示配置开发工具包,包括下载所需客户端和软件包。创建一个 JSON 对象,其中包含获取附加到角色的托管 IAM 策略列表时所需的参数,该角色由角色名称组成。提供角色名称作为命令行参数。调用ListAttachedRolePoliciesCommand
的方法IAM
客户端服务对象,该对象向回调函数返回托管策略的数组。
检查数组成员,查看要附加到角色的策略是否已附加。如果策略未附加,则调用 AttachRolePolicyCommand
方法附加该策略。
ReplaceROLE_NAME
用要附加的角色的名称。
// Import required AWS SDK clients and commands for Node.js. import { iamClient } from "./libs/iamClient.js"; import { ListAttachedRolePoliciesCommand, AttachRolePolicyCommand, } from "@aws-sdk/client-iam"; // Set the parameters. const ROLENAME = "ROLE_NAME"; const paramsRoleList = { RoleName: ROLENAME }; //ROLE_NAME export const params = { PolicyArn: "arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess", RoleName: ROLENAME, }; export const run = async () => { try { const data = await iamClient.send( new ListAttachedRolePoliciesCommand(paramsRoleList) ); return data; const 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(); } }); try { const data = await iamClient.send(new AttachRolePolicyCommand(params)); console.log("Role attached successfully"); return data; } catch (err) { console.log("Error", err); } } catch (err) { console.log("Error", err); } }; run();
要运行示例,请在命令提示符处输入以下内容。
node iam_attachrolepolicy.js
可以找到此示例代码在 GitHub 上)
分离托管角色策略
创建libs
创建文件名为的 Node.js 模块iamClient.js
. 将下面的代码复制并粘贴到其中,这将创建 IAM 客户端对象。Replace领域
使用您的Amazon区域。
import { IAMClient } from "@aws-sdk/client-iam"; // Set the AWS Region. const REGION = "REGION"; // For example, "us-east-1". // Create an IAM service client object. const iamClient = new IAMClient({ region: REGION }); export { iamClient };
可以找到此示例代码在 GitHub 上)
创建文件名为 iam_detachrolepolicy.js
的 Node.js 模块。请确保按前面所示配置开发工具包,包括下载所需客户端和软件包。创建一个 JSON 对象,其中包含获取附加到角色的托管 IAM 策略列表时所需的参数,该角色由角色名称组成。提供角色名称作为命令行参数。调用ListAttachedRolePoliciesCommand
的方法IAM
客户端服务对象,该对象在回调函数中返回托管策略的数组。
检查数组成员,查看要从角色分离的策略是否已附加。如果策略已附加,则调用 DetachRolePolicyCommand
方法分离该策略。
ReplaceROLE_NAME
以及要分离的角色的名称。
// Import required AWS SDK clients and commands for Node.js. import { iamClient } from "./libs/iamClient.js"; import { ListAttachedRolePoliciesCommand, DetachRolePolicyCommand, } from "@aws-sdk/client-iam"; // Set the parameters. export const params = { RoleName: "ROLE_NAME" }; //ROLE_NAME export const run = async () => { try { const data = await iamClient.send( new ListAttachedRolePoliciesCommand(params) ); return data; const myRolePolicies = data.AttachedPolicies; myRolePolicies.forEach(function (val, index, array) { if (myRolePolicies[index].PolicyName === "AmazonDynamoDBFullAccess") { const params = { PolicyArn: "arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess", paramsRoleList, }; try { const results = iamClient.send( new DetachRolePolicyCommand(paramsRoleList) ); console.log("Policy detached from role successfully"); process.exit(); } catch (err) { console.log("Unable to detach policy from role", err); } } else { } }); } catch (err) { console.log("User " + "USER_NAME" + " does not exist."); } }; run();
要运行示例,请在命令提示符处输入以下内容。
node iam_detachrolepolicy.js
可以找到此示例代码在 GitHub 上)