

AWS SDK for JavaScript v2 はサポート終了となりました。[AWS SDK for JavaScript 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/ja_jp/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 モジュールは 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 ポリシーの作成
<a name="iam-examples-policies-creating"></a>

`iam_createpolicy.js` というファイル名で Node.js モジュールを作成します。前に示したように SDK を必ず設定します。IAM にアクセスするには、`AWS.IAM` サービスオブジェクトを作成します。JSON オブジェクトを 2 つ作成します。1 つには作成するポリシードキュメントが含まれ、もう 1 つにはポリシーの作成に必要なパラメータが含まれます。これには、ポリシー 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 ポリシーの取得
<a name="iam-examples-policies-getting"></a>

`iam_getpolicy.js` というファイル名で Node.js モジュールを作成します。前に示したように SDK を必ず設定します。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 モジュールを作成します。前に示したように SDK を必ず設定します。IAM にアクセスするには、`AWS.IAM` サービスオブジェクトを作成します。ロールにアタッチされたマネージド IAM ポリシーの一覧を取得するために必要なパラメータを含む 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 モジュールを作成します。前に示したように SDK を必ず設定します。IAM にアクセスするには、`AWS.IAM` サービスオブジェクトを作成します。ロールにアタッチされたマネージド IAM ポリシーの一覧を取得するために必要なパラメータを含む 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
```