IAM 정책으로 작업 - AWS SDK for JavaScript

곧 AWS SDK for JavaScript(v2)에 대한 지원이 종료될 예정임을 알려드립니다. 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 객체를 생성합니다. 하나는 생성하려는 정책 문서를 포함하고 다른 하나는 정책 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