

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/ko_kr/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 사용 설명서*의 [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 객체를 생성합니다. 하나는 생성하려는 정책 문서를 포함하고 다른 하나는 정책 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
```