

O AWS SDK para JavaScript v2 chegou ao fim do suporte. Recomendamos migrar para o [AWS SDK para JavaScript v3](https://docs.aws.amazon.com//sdk-for-javascript/v3/developer-guide/). Para ver detalhes e informações sobre como migrar, consulte este [anúncio](https://aws.amazon.com/blogs//developer/announcing-end-of-support-for-aws-sdk-for-javascript-v2/).

# Trabalhar com políticas do IAM
<a name="iam-examples-policies"></a>

![\[JavaScript code example that applies to Node.js execution\]](http://docs.aws.amazon.com/pt_br/sdk-for-javascript/v2/developer-guide/images/nodeicon.png)

**Este exemplo de código Node.js mostra:**
+ Como criar e excluir políticas do IAM.
+ Como anexar e separar políticas do IAM das funções.

## O cenário
<a name="iam-examples-policies-scenario"></a>

Conceda permissões a um usuário ao criar uma *política*, que é um documento que lista as ações que um usuário pode executar e os recursos afetados por essas ações. Todas as ações ou recursos que não são explicitamente permitidos são negados por padrão. As políticas podem ser criadas e anexadas aos usuários, grupos de usuários, funções assumidas por usuários e recursos.

Neste exemplo, é usada uma série de módulos do Node.js para gerenciar políticas no IAM. Os módulos do Node.js usam o SDK para criar e excluir políticas, bem como para anexar e desanexar políticas da função, usando estes métodos da classe do cliente `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)

Para obter mais informações sobre as políticas do IAM, consulte [Visão geral do gerenciamento de acesso: permissões e políticas](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_access-management.html) no *Guia do usuário do IAM*.

## Tarefas de pré-requisito
<a name="iam-examples-policies-prerequisites"></a>

Para configurar e executar este exemplo, você deve primeiro concluir estas tarefas:
+ Instale o Node.js. Para obter mais informações sobre como instalar Node.js, consulte o [website de Node.js](https://nodejs.org).
+ Crie um arquivo de configurações compartilhado com as credenciais de usuário. Para obter mais informações sobre como fornecer um arquivo de credenciais compartilhadas, consulte [Carregar credenciais em Node.js do arquivo de credenciais compartilhado](loading-node-credentials-shared.md).
+ Crie um perfil do IAM ao qual você possa anexar políticas. Para obter mais informações sobre como criar perfis, consulte [Criar perfils do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html) no *Guia do usuário do IAM*.

## Criar uma política do IAM
<a name="iam-examples-policies-creating"></a>

Crie um módulo do Node.js com o nome de arquivo `iam_createpolicy.js`. Não se esqueça de configurar o SDK conforme mostrado anteriormente. Para acessar o IAM, crie um objeto de serviço do `AWS.IAM`. Crie dois objetos JSON, um contendo o documento de política que você deseja criar e o outro contendo os parâmetros necessários para criar a política, que inclui a política JSON e o nome que você deseja dar a ela. Execute o stringify do objeto JSON da política nos parâmetros. Chame o método `createPolicy` do objeto de serviço do `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);
  }
});
```

Para executar o exemplo, digite o seguinte na linha de comando.

```
node iam_createpolicy.js
```

Este código de exemplo pode ser encontrado [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javascript/example_code/iam/iam_createpolicy.js).

## Obter uma política do IAM
<a name="iam-examples-policies-getting"></a>

Crie um módulo do Node.js com o nome de arquivo `iam_getpolicy.js`. Não se esqueça de configurar o SDK conforme mostrado anteriormente. Para acessar o IAM, crie um objeto de serviço do `AWS.IAM`. Crie um objeto JSON contendo os parâmetros necessários para recuperar uma política, que é o ARN da política que você deseja obter. Chame o método `getPolicy` do objeto de serviço do `AWS.IAM`. Grave a descrição da política no console.

```
// 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);
  }
});
```

Para executar o exemplo, digite o seguinte na linha de comando.

```
node iam_getpolicy.js
```

Este código de exemplo pode ser encontrado [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javascript/example_code/iam/iam_getpolicy.js).

## Anexar uma política de função gerenciada
<a name="iam-examples-policies-attaching-role-policy"></a>

Crie um módulo do Node.js com o nome de arquivo `iam_attachrolepolicy.js`. Não se esqueça de configurar o SDK conforme mostrado anteriormente. Para acessar o IAM, crie um objeto de serviço do `AWS.IAM`. Crie um objeto JSON contendo os parâmetros necessários para obter uma lista de políticas do IAM gerenciadas anexadas a uma função, que consiste no nome da função. Forneça o nome da função como parâmetro de linha de comando. Chame o método `listAttachedRolePolicies` do objeto de serviço do `AWS.IAM`, que retorna um array de políticas gerenciadas para a função de retorno de chamada.

Verifique os membros do array para ver se a política que você deseja anexar à função já está anexada. Se a política não estiver anexada, chame o método `attachRolePolicy` para anexá-la. 

```
// 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");
      }
    });
  }
});
```

Para executar o exemplo, digite o seguinte na linha de comando.

```
node iam_attachrolepolicy.js IAM_ROLE_NAME
```

## Desanexar uma política de função gerenciada
<a name="iam-examples-policies-detaching-role-policy"></a>

Crie um módulo do Node.js com o nome de arquivo `iam_detachrolepolicy.js`. Não se esqueça de configurar o SDK conforme mostrado anteriormente. Para acessar o IAM, crie um objeto de serviço do `AWS.IAM`. Crie um objeto JSON contendo os parâmetros necessários para obter uma lista de políticas do IAM gerenciadas anexadas a uma função, que consiste no nome da função. Forneça o nome da função como parâmetro de linha de comando. Chame o método `listAttachedRolePolicies` do objeto de serviço do `AWS.IAM`, que retorna um array de políticas gerenciadas na função de retorno de chamada.

Verifique se os membros do array para ver se a política que você deseja desanexar da função está anexada. Se a política estiver anexada, chame o método `detachRolePolicy` para desanexá-la.

```
// 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();
          }
        });
      }
    });
  }
});
```

Para executar o exemplo, digite o seguinte na linha de comando.

```
node iam_detachrolepolicy.js IAM_ROLE_NAME
```