

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Configurando um método Amazon API Gateway como um provedor de identidade personalizado
<a name="gateway-api-tutorial"></a>

Este tutorial ilustra como configurar um método do Amazon API Gateway e usá-lo como um provedor de identidade personalizado para carregar arquivos em um AWS Transfer Family servidor. Este tutorial usa o [Modelo de pilha básica](https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-basic-apig.template.yml) e outras funcionalidades básicas apenas como exemplo. 

**Topics**
+ [Pré-requisitos](#prereq-api-gateway-tutorial)
+ [Etapa 1: criar uma CloudFormation pilha](#create-cf-stack)
+ [Etapa 2: Conferir a configuração do método do API Gateway para seu servidor](#deploy-api-gateway)
+ [Etapa 3: Visualizar os detalhes do servidor do Transfer Family](#create-transfer-server)
+ [Etapa 4: Testar se o usuário consegue se conectar ao servidor](#test-user-server-connect)
+ [Etapa 5: Testar a conexão SFTP e a transferência de arquivos](#test-sftp-connection)
+ [Etapa 6: Limitar o acesso ao bucket](#example-bucket)
+ [Atualize o Lambda se estiver usando o Amazon EFS](#lambda-posix)

## Pré-requisitos
<a name="prereq-api-gateway-tutorial"></a>

Antes de criar os recursos do Transfer Family em CloudFormation, crie seu armazenamento e sua função de usuário.

**Para especificar o armazenamento e criar uma função de usuário**

1. Dependendo do armazenamento que você está usando, consulte a seguinte documentação:
   + Para criar um bucket do Amazon S3, consulte [Como criar um bucket do S3?](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket-overview.html) no *Guia do usuário do console do Amazon Simple Storage Service*.
   + Para criar um sistema de arquivos Amazon EFS, consulte[Configurar um sistema de arquivos Amazon EFS](configure-storage.md#requirements-efs).

1. Para criar uma função de usuário, consulte [Criar uma política e um perfil do IAM](requirements-roles.md).

Você insere os detalhes do seu armazenamento e da sua função de usuário ao criar sua pilha CloudFormation na próxima seção.

## Etapa 1: criar uma CloudFormation pilha
<a name="create-cf-stack"></a>

**Para criar uma AWS CloudFormation pilha a partir do modelo fornecido**

1. Abra o CloudFormation console em [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Selecione **Criar pilha** e depois **Com novos recursos (padrão)**. 

1. No painel **Pré-requisito - Preparar modelo**, **escolha Escolher um** modelo existente. 

1. Copie este link, [Modelo básico de pilha](https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-basic-apig.template.yml), e cole-o no campo **URL do Amazon S3**. 

1. Clique em **Next**. 

1. Especifique os parâmetros, incluindo um nome para sua pilha. Não deixe de fazer o seguinte: 
   + Substitua os valores padrão por **UserName**UserPassword****e.
   + Para **UserHomeDirectory**, insira os detalhes do armazenamento (um bucket do Amazon S3 ou um sistema de arquivos do Amazon EFS) que você criou anteriormente.
   + Substitua o padrão **UserRoleArn**pela função de usuário que você criou anteriormente. A função AWS Identity and Access Management (IAM) deve ter as permissões apropriadas. Para obter um exemplo de perfil do IAM e política de bucket, consulte [Etapa 6: Limitar o acesso ao bucket](#example-bucket). 
   + Se você quiser se autenticar usando uma chave pública em vez de uma senha, insira sua chave pública no **UserPublicKey1**campo. A primeira vez que você se conectar ao servidor usando SFTP, fornecerá a chave privada, em vez da senha. 

1. Escolha **Avançar** e então **Avançar** outra vez na página **Configurar opções de pilha**. 

1. Revise os detalhes da pilha que você está criando e escolha **Criar pilha**. 
**nota**  
Na parte inferior da página, em **Capacidades**, reconheça que CloudFormation pode criar recursos do IAM. 

## Etapa 2: Conferir a configuração do método do API Gateway para seu servidor
<a name="deploy-api-gateway"></a>

**nota**  
Para melhorar a segurança, é possível configurar um firewall para aplicações Web. O AWS WAF é um firewall para aplicações Web que permite monitorar as solicitações HTTP e HTTPS que são encaminhadas ao Amazon API Gateway. Para obter detalhes, consulte [Adicione um firewall da aplicação web](web-application-firewall.md).

**Não habilite o armazenamento em cache do API Gateway**  
Não habilite o armazenamento em cache para seu método API Gateway ao usá-lo como um provedor de identidade personalizado para Transfer Family. O armazenamento em cache é impróprio e inválido para solicitações de autenticação porque:  
Cada solicitação de autenticação é exclusiva e requer uma resposta ativa, não uma resposta em cache
O armazenamento em cache não oferece benefícios, pois o Transfer Family nunca envia solicitações duplicadas ou repetidas para o API Gateway.
A ativação do armazenamento em cache fará com que o API Gateway responda com dados incompatíveis, resultando em respostas inválidas às solicitações de autenticação

**Para verificar a configuração do método do API Gateway para seu servidor e implantá-lo.**

1. <a name="step_invoke_url"></a>

   Abra o console do API Gateway em [https://console.aws.amazon.com/apigateway/](https://console.aws.amazon.com/apigateway/). 

1. Escolha a **API de modelo básico do Transfer Custom Identity Provider** que o CloudFormation modelo gerou.

1. No painel **Recursos**, selecione **/** e, em seguida, escolha **Solicitação de método**.

1. Escolha **Ações** e **Implantar API**. Para o **Estágio de implantação**, escolha **prod** e **Implantar**.

   Depois que o método API Gateway for implantado com sucesso, veja seu desempenho na seção **Editor de estágio**.
**nota**  
Copie o endereço do **URL de invocação** exibido na parte superior da página. Você precisará dele para a próxima etapa.

## Etapa 3: Visualizar os detalhes do servidor do Transfer Family
<a name="create-transfer-server"></a>

Quando você usa o modelo para criar uma CloudFormation pilha, um servidor Transfer Family é criado automaticamente.

**Para visualizar os detalhes do servidor do Transfer Family**

1. Abra o CloudFormation console em [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Escolha a pilha que você criou.

1. Escolha a guia **Recursos**.  
![Tela que mostra a lista de recursos criados durante a criação da CloudFormation pilha, com os detalhes do servidor Transfer Family destacados.](http://docs.aws.amazon.com/pt_br/transfer/latest/userguide/images/apig-find-server-id.png)

   O ARN do servidor é mostrado na coluna **ID física** da **TransferServer**linha. O ID do servidor está contido no ARN, por exemplo, **s-11112222333344445.**

1. Abra o AWS Transfer Family console em e [https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/), na página **Servidores**, escolha o novo servidor.

   O ID do servidor corresponde ao ID exibido para o **TransferServer**recurso em CloudFormation.

## Etapa 4: Testar se o usuário consegue se conectar ao servidor
<a name="test-user-server-connect"></a>

**Para testar se o usuário consegue se conectar ao servidor usando o console Transfer Family**

1. Abra o AWS Transfer Family console em [https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/).

1. Na página **Servidores**, escolha seu novo servidor, escolha **Ações** e escolha **Testar**.

1. Insira o texto das suas credenciais de login no campo **Nome de usuário** e no campo **Senha**. Esses são os valores que você definiu ao implantar a CloudFormation pilha.

1. Em **Protocolo do servidor**, selecione **SFTP** e, em **IP de origem**, insira **127.0.0.1**. 

1. Escolha **Testar**.

   Se a autenticação do usuário for bem-sucedida, o teste retornará uma resposta HTML `StatusCode: 200` e um objeto JSON contendo os detalhes das funções e permissões do usuário. Por exemplo:

   ```
   {
       "Response": "{\"Role\": \"arn:aws:iam::{{123456789012}}:role/{{my-user-role}}\",\"HomeDirectory\": \"/${transfer:HomeBucket}/\"}",
       "StatusCode": 200,
       "Message": "",
       "Url": "https://{{1a2b3c4d5e}}.execute-api.{{us-east-2}}.amazonaws.com/prod/servers/s-{{1234abcd5678efgh0}}/users/{{myuser}}/config"
   }
   ```

   Se o teste falhar, adicione uma das políticas AWS gerenciadas do API Gateway à função que você está usando para sua API. 

## Etapa 5: Testar a conexão SFTP e a transferência de arquivos
<a name="test-sftp-connection"></a>

**Para testar a conexão SFTP**

1. Em um dispositivo Linux ou Macintosh, abra um terminal de comando. 

1. Digite um dos comandos a seguir, dependendo se você está usando uma senha ou um par de chaves para autenticação. 
   + Se você estiver usando uma senha, digite este comando:

      ` sftp -o PubkeyAuthentication=no {{myuser}}@{{server-ID}}.server.transfer.{{region-code}}.amazonaws.com ` 

     Insira sua senha quando for solicitado.
   +  Se você estiver usando um par chave, digite este comando: 

     ` sftp -i {{private-key-file}} {{myuser}}@{{server-ID}}.server.transfer.{{region-code}}.amazonaws.com `
**nota**  
Para estes comandos `sftp`, insira o código para a Região da AWS onde seu servidor Transfer Family está localizado. Por exemplo, se seu servidor estiver no Leste dos EUA (Ohio), insira **us-east-2**.

1.  No prompt `sftp>`, verifique se é possível fazer upload (`put`), baixar (`get`) e visualizar diretórios e arquivos (`pwd` e `ls`). 

## Etapa 6: Limitar o acesso ao bucket
<a name="example-bucket"></a>

É possível limitar quem pode acessar um bucket específico do Amazon S3. O exemplo a seguir mostra as configurações a serem usadas em sua CloudFormation pilha e na política que você seleciona para seu usuário. 

Neste exemplo, definimos os seguintes parâmetros para a CloudFormation pilha: 
+ **CreateServer**: `true`
+ **UserHomeDirectory**: `/amzn-s3-demo-bucket1`
+ **UserName**: `myuser`
+ **UserPassword**: `MySuperSecretPassword`
**Importante**  
Este é um exemplo de senha. Ao configurar seu método do API Gateway, insira uma senha forte.
+ **UserPublicKey1**: `{{your-public-key}}`
+ **UserRoleArn**: `arn:aws:iam::{{role-id}}:role/myuser-api-gateway-role`

``**UserPublicKey1**É uma chave pública que você gerou como parte de um par de public/private chaves.

O `{{role-id}}` é único para a função de usuário que você criar. A política do `myuser-api-gateway-role` a seguir é anexada ao: 

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObjectAcl",
                "s3:GetObject",
                "s3:DeleteObjectVersion",
                "s3:DeleteObject",
                "s3:PutObjectAcl",
                "s3:GetObjectVersion"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*"
        }
    ]
}
```

 Para se conectar ao servidor usando SFTP, digite um dos comandos a seguir no prompt. 
+ Se você estiver usando um par de chaves para autenticação, execute este comando:

   ` sftp -o PubkeyAuthentication=no {{myuser}}@{{transfer-server-ID}}.server.transfer.{{region-id}}.amazonaws.com` 

  Insira sua senha quando for solicitado.
+  Se você estiver usando um par chave para autenticação, execute este comando: 

  ` sftp -i {{private-key-file}} myuser@{{transfer-server-ID}}.server.transfer.{{region-id}}.amazonaws.com `

**nota**  
Para esses `sftp` comandos, use o ID de Região da AWS onde seu servidor Transfer Family está localizado. Por exemplo, se seu servidor estiver no Leste dos EUA (Ohio), use `us-east-2`. 

 No prompt `sftp`, você é direcionado ao seu diretório inicial, que pode ser visualizado executando o comando `pwd`. Por exemplo: 

```
sftp> pwd
Remote working directory: /amzn-s3-demo-bucket1
```

O usuário não pode visualizar nenhum diretório acima do diretório inicial. Por exemplo: 

```
sftp> pwd
Remote working directory: /amzn-s3-demo-bucket1
sftp> cd ..
sftp> ls
Couldn't read directory: Permission denied
```

## Atualize o Lambda se estiver usando o Amazon EFS
<a name="lambda-posix"></a>

 Se você selecionou o Amazon EFS como opção de armazenamento para seu servidor do Transfer Family, edite a função do Lambda para sua pilha. 

**Para adicionar um perfil Posix à sua função Lambda**

1. Abra o console Lambda em. [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)

1.  Escolha a função do Lambda que você criou anteriormente. A função Lambda tem o formato de **{{stack-name}}- GetUserConfigLambda - {{lambda-identifier}}**, onde {{stack-name}} é o nome da CloudFormation pilha e {{lambda-identifier}} é o identificador da função. 

1.  Na guia **Código**, selecione **index.js** para exibir o código da função. 

1.  No `response`, adicione a seguinte linha entre `Policy` e `HomeDirectory`: 

    ` PosixProfile: {"Uid": {{uid-value}}, "Gid": {{gid-value}}}, ` 

    Onde {{uid-value}} e {{gid-value}} são números inteiros, 0 ou maiores, que representam a ID do usuário e a ID do grupo, respectivamente. 

   Por exemplo, depois de adicionar o perfil Posix, o campo de resposta pode ficar assim:

   ```
    response = {
         Role: 'arn:aws:iam::123456789012:role/api-gateway-transfer-efs-role', // The user will be authenticated if and only if the Role field is not blank
         Policy: '', // Optional JSON blob to further restrict this user's permissions
         PosixProfile: {"Gid": 65534, "Uid": 65534},
         HomeDirectory: '/fs-fab2c234' // Not required, defaults to '/'
       };
   ```