

适用于 JavaScript 的 AWS SDK v2 已终止支持。建议您迁移到 [适用于 JavaScript 的 AWS SDK v3](https://docs.aws.amazon.com//sdk-for-javascript/v3/developer-guide/)。有关更多详情和如何迁移的信息，请参阅本[公告](https://aws.amazon.com/blogs//developer/announcing-end-of-support-for-aws-sdk-for-javascript-v2/)。

# 使用 IAM 策略
<a name="iam-examples-policies"></a>

![\[JavaScript code example that applies to Node.js execution\]](http://docs.aws.amazon.com/zh_cn/sdk-for-javascript/v2/developer-guide/images/nodeicon.png)

**此 Node.js 代码示例演示：**
+ 如何创建和删除 IAM policy。
+ 如何对角色附加和分离 IAM policy。

## 情景
<a name="iam-examples-policies-scenario"></a>

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

本示例使用一系列 Node.js 模块在 IAM 中管理策略。这些 Node.js 模块使用 SDK for JavaScript，通过 `AWS.IAM` 客户端类的以下方法来创建和删除策略，以及附加和分离角色策略：
+ [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/IAM.html#createPolicy-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/IAM.html#createPolicy-property)
+ [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/IAM.html#getPolicy-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/IAM.html#getPolicy-property)
+ [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/IAM.html#listAttachedRolePolicies-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/IAM.html#listAttachedRolePolicies-property)
+ [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/IAM.html#attachRolePolicy-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/IAM.html#attachRolePolicy-property)
+ [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/IAM.html#detachRolePolicy-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/IAM.html#detachRolePolicy-property)

有关 IAM 用户的更多信息，请参阅《IAM 用户指南》**中的[访问管理概述：权限和策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_access-management.html)。

## 先决条件任务
<a name="iam-examples-policies-prerequisites"></a>

要设置和运行此示例，您必须先完成以下任务：
+ 安装 Node.js。有关安装 Node.js 的更多信息，请参阅 [Node.js 网站](https://nodejs.org)。
+ 使用用户凭证创建共享配置文件。有关提供共享凭证文件的更多信息，请参阅[从共享凭证文件加载 Node.js 中的凭证](loading-node-credentials-shared.md)。
+ 创建一个您可以向其附加策略 IAM 角色。有关创建角色的更多信息，请参阅《IAM 用户指南》**中的[创建 IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)。

## 创建 IAM Policy
<a name="iam-examples-policies-creating"></a>

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

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

```
node iam_createpolicy.js
```

此示例代码可在 [GitHub 上的此处](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javascript/example_code/iam/iam_createpolicy.js)找到。

## 获取 IAM Policy
<a name="iam-examples-policies-getting"></a>

创建文件名为 `iam_getpolicy.js` 的 Node.js 模块。请确保按前面所示配置开发工具包。要访问 IAM，请创建 `AWS.IAM` 服务对象。创建一个包含检索策略时所需参数的 JSON 对象，该对象是您要获取的策略的 ARN。调用 `getPolicy` 服务对象的 `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 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 上的此处](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javascript/example_code/iam/iam_getpolicy.js)找到。

## 附加托管的角色策略
<a name="iam-examples-policies-attaching-role-policy"></a>

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

检查数组成员，查看要附加到角色的策略是否已附加。如果策略未附加，则调用 `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
```

## 分离托管的角色策略
<a name="iam-examples-policies-detaching-role-policy"></a>

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

检查数组成员，查看要从角色分离的策略是否已附加。如果策略已附加，则调用 `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
```