IAM ポリシーの使用 - AWS SDK for JavaScript

AWS SDK for JavaScript v2 の近日発表 end-of-support しました。AWS SDK for JavaScript v3 に移行することをお勧めします。日付、その他の詳細、移行方法については、リンク先の発表内容を参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

IAM ポリシーの使用

JavaScript code example that applies to Node.js execution

この Node.js コード例は以下を示しています。

  • IAM ポリシーを作成および削除する方法。

  • ロールから IAM ポリシーをアタッチおよびデタッチする方法。

シナリオ

ポリシーを作成することで、ユーザーにアクセス許可を付与します。ポリシーは、ユーザーが実行できるアクションと、そのアクションが影響を与えるリソースの一覧が記載されているドキュメントです。明示的に許可されていないアクションやリソースはすべて、デフォルトで拒否されます。ポリシーを作成して、ユーザー、ユーザーのグループ、ユーザーが引き受けるロール、およびリソースにアタッチできます。

この例では、一連の Node.js モジュールを使用して IAM でポリシーを管理します。Node.js モジュールは SDK for JavaScript を使用してポリシーを作成および削除し、さらに AWS.IAM クライアントクラスの以下のメソッドを使用してロールポリシーのアタッチやデタッチを実行します。

IAM ユーザーの詳細については、IAM ユーザーガイドアクセス管理の概要: 許可とポリシーを参照してください。

前提条件タスク

この例をセットアップして実行するには、まず次のタスクを完了する必要があります。

IAM ポリシーの作成

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

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