

 適用於 JavaScript 的 AWS SDK v2 已end-of-support。我們建議您遷移至 [適用於 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_tw/sdk-for-javascript/v2/developer-guide/images/nodeicon.png)

**這個 Node.js 程式碼範例會說明：**
+ 如何建立和刪除 IAM 政策。
+ 如何從角色連接和分離 IAM 政策。

## 使用案例
<a name="iam-examples-policies-scenario"></a>

您能夠建立*政策*，進而將許可授與給使用者。該政策文件會列出使用者可執行的動作，以及會受到這些動作影響的資源。根據預設，未明確允許的任何動作或資源將被拒絕。可建立政策並連接至使用者、使用者群組、使用者擔任的角色以及資源。

在此範例中，一系列 Node.js 模組用於管理 IAM 中的政策。Node.js 模組使用適用於 JavaScript 的 SDK 來建立和刪除政策，以及使用這些`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 政策
<a name="iam-examples-policies-creating"></a>

以檔名 `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 上](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javascript/example_code/iam/iam_createpolicy.js)找到這個範本程式碼。

## 取得 IAM 政策
<a name="iam-examples-policies-getting"></a>

以檔名 `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 上](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` 服務物件。建立 JSON 物件，其中包含取得連接至角色的受管 IAM 政策清單所需的參數，其中包含角色的名稱。然後，提供角色名稱以做為命令列參數。呼叫 `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
```

## 分離受管角色政策
<a name="iam-examples-policies-detaching-role-policy"></a>

以檔名 `iam_detachrolepolicy.js` 建立一個 Node.js 模組。請務必依前述的內容來設定軟體開發套件。若要存取 IAM，請建立 `AWS.IAM` 服務物件。建立 JSON 物件，其中包含取得連接至角色的受管 IAM 政策清單所需的參數，其中包含角色的名稱。然後，提供角色名稱以做為命令列參數。呼叫 `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
```