Como faço para usar uma API integrada com o Lambda como provedor de identidades personalizado de um servidor do Transfer Family sem usar o CloudFormation?

9 minuto de leitura
0

Quero usar uma API do Amazon API Gateway integrada com o AWS Lambda como provedor de identidades personalizado do meu servidor do AWS Transfer Family. Só que não quero usar um dos modelos de pilha do AWS CloudFormation para a configuração. Ou seja, quero personalizar a configuração. Como configuro um provedor de identidades personalizado dessa maneira?

Breve descrição

É possível configurar manualmente uma API do API Gateway integrada com o Lambda e usá-la como provedor de identidades personalizado de um servidor do Transfer Family, em vez de usar um dos modelos de pilha do CloudFormation para fazer a configuração. Para isso, configure uma função do Lambda e uma API do API Gateway para o seu servidor.

Por exemplo, para definir a mesma configuração de um modelo de pilha básico, siga estas etapas:

1.Crie um perfil do AWS Identity and Access Management (IAM) para ser o perfil de execução do Lambda.

2.Crie a função do Lambda.

3.(Opcional) Crie um perfil do IAM para ser o perfil de registro em log do API Gateway.

4.Defina uma API do API Gateway como provedor de identidades.

5.Crie perfis do IAM para o servidor do Transfer Family e para os usuários do servidor.

6.Crie o servidor do Transfer Family.

7.Configure um armazenamento de credenciais.

Resolução

Importante: a configuração a seguir é apenas um exemplo de como configurar um provedor de identidades personalizado sem usar um modelo de pilha do CloudFormation. Modifique as etapas da configuração conforme as suas necessidades.

Crie um perfil do IAM para ser o perfil de execução do Lambda

1.Use o console do IAM para criar o perfil de execução. Observação: para essa configuração, somente as permissões básicas de execução são necessárias. Personalize as permissões conforme as necessidades do seu uso.

2.Modifique a política de confiança do perfil adicionando a declaração a seguir:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Crie a função do Lambda

Conclua as etapas a seguir para criar uma função do Lambda usando o console. Faça as seguintes configurações:

1.Em Perfil de execução, selecione o perfil de execução do Lambda que você criou.

2.Em Código da função, use a função padrão do Lambda para a autenticação. Você também pode usar uma função personalizada.

(Opcional) Crie um perfil do IAM para ser o perfil de registro em log do API Gateway

Você pode usar o Amazon CloudWatch Logs para ajudá-lo a depurar os erros da API REST. Para criar um perfil de registro em log, conclua as etapas a seguir:

1.Crie um perfil do IAM para o API Gateway e anexe a política gerenciada AmazonAPIGatewayPushToCloudWatchLogs ao perfil.

2.Modifique a política de confiança do perfil adicionando a declaração a seguir:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "apigateway.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Defina uma API do API Gateway como o provedor de identidades

1.Abra o console do API Gateway.

2.No painel de navegação, escolha APIs.

3.Escolha Criar API.

4.Em Escolher um tipo de API, navegue até API REST e escolha Compilar. Em seguida, faça as seguintes escolhas: Em Escolha o protocolo, selecione REST. Em Criar nova API, selecione API nova. Em Nome da API, digite um nome para sua API. Em Tipo de endpoint, selecione Regional.

Observação: não escolha “API REST Privada” como o tipo de API.

5.Escolha Criar API.

6.No painel de navegação, escolha Modelos. Em seguida, escolha Criar.

7.Em Nome do modelo, insira ModelodeRespostaConfigdoUsuario.

8.Em Tipo de conteúdo, insira application/json.

9.Em Esquema de modelo, insira o seguinte:

{"$schema":"http://json-schema.org/draft-04/schema#","title":"UserUserConfig","type":"object","properties":{"Role":{"type":"string"},"Policy":{"type":"string"},"HomeDirectory":{"type":"string"},"PublicKeys":{"type":"array","items":{"type":"string"}}}}

10.Escolha Criar modelo. 11.No painel de navegação, escolha Recursos.

12.Expanda Ações e escolha Criar recurso.

13.Crie um recurso para seus servidores do Transfer Family. Em Nome do recurso, digite Servidores. Em Caminho do recurso, digite servidores.

14.Crie um recurso para o ID do servidor. Em Nome do recurso, digite ServerID. Em Caminho do recurso, digite {serverId}.

15.Crie um recurso para os usuários do servidor. Em Nome do recurso, digite Usuarios. Em Caminho do recurso, digite usuarios.

16.Crie um recurso para os nomes de usuário. Em Nome do recurso, digite Username. Em Caminho do recurso, digite {username}.

17.Crie um recurso para configurações de usuário. Em Nome do recurso, digite ConfigdoUsuario. Em Caminho do recurso, digite config.

18.Expanda Ações e escolha Criar método.

19.Na lista suspensa, selecione GET. Em seguida, clique no tique de confirmação ao lado de GET para criar o método.

20.Em GET - Configuração, faça as seguintes escolhas: Em Tipo de integração, selecione Função do Lambda. Em Região do Lambda, selecione a região da AWS em que sua função do Lambda está. Em Função do Lambda, selecione a função que você criou.

21.Escolha Salvar.

22.Escolha Solicitação de método. Em seguida, faça as seguintes escolhas: Em Autorização, selecione AWS_IAM. Em Cabeçalhos de solicitação HTTP, escolha Adicionar cabeçalho. Em seguida, insira Password como nome do cabeçalho. Em Parâmetros de string de consulta de URL, escolha Adicionar string de consulta. Em seguida, digite protocol como nome da string de consulta. Escolha Adicionar string de consulta novamente e, em seguida, digite sourceIp como nome da string de consulta.

23.Na barra de navegação do método GET, escolha Execução de método para retornar à página GET - Execução de método.

24.Escolha Solicitação de integração. Em seguida, expanda Modelos de mapeamento.

25.Em Passagem do corpo da solicitação, selecione Quando nenhum modelo corresponder ao cabeçalho Content‑Type da solicitação.

26.Em Content‑Type:, digite application/json. Clique no tique de confirmação para confirmar.

27.Como modelo, insira o seguinte:

{ "username": "$input.params('username')", "password": "$util.escapeJavaScript($input.params('Password')).replaceAll("\\'","'")", "serverId": "$input.params('serverId')", "protocol": "$input.params('protocol')","sourceIp": "$input.params('sourceIp')" }

28.Escolha Salvar. 29.Na barra de navegação do método GET, escolha Execução de método para retornar à página GET - Execução de método.

30.Escolha Resposta de integração. Confirme que não há de modelos de mapeamento e que o corpo da resposta foi passado para a resposta do método.

31.Na barra de navegação do método GET, escolha Execução de método para retornar à página GET - Execução de método.

32.Escolha Resposta de método. Em seguida, expanda onde está escrito 200.

33.Em Corpo da resposta para 200, edite o valor de Modelos e selecione ModelodeRespostaConfigdoUsuario, que você criou nas etapas 7 a 10. Clique no tique de confirmação para confirmar.

34.No painel de navegação Recursos, escolha GET e depois Ações. Em seguida, escolha Implantar API. Faça as seguintes escolhas: Em Estágio de implantação, selecione [Novo estágio]. Em Nome do estágio, insira um nome para o estágio.

35.Escolha Implantar.

36.No painel de navegação, escolha Estágios. Em seguida, escolha Criar e faça as seguintes escolhas: Em Nome do estágio, insira prod. Em Implantação, selecione a implantação que você criou como novo estágio.

37.Escolha Criar.

Crie perfis do IAM para o servidor do Transfer Family e para os usuários do servidor

1.Crie um perfil do IAM para o servidor do Transfer Family. O perfil deve conceder as permissões necessárias ao servidor para invocar a API que você criou, como na declaração a seguir:

{
  "Version": "2012-10-17",
  "Statement": [
      {
          "Action": [
              "execute-api:Invoke"
          ],
          "Resource": "arn:aws:execute-api:{Region}:{AWS-Account-ID}:{API-Gateway-id}/{stage}/GET/*",
          "Effect": "Allow"
      },
      {
          "Action": [
              "apigateway:GET"
          ],
          "Resource": "*",
          "Effect": "Allow"
      }
  ]
}

2.Modifique a política de confiança do perfil adicionando a declaração a seguir:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "transfer.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

3.Crie um perfil do IAM para os usuários do servidor do Transfer Family. O perfil deve conceder aos usuários do servidor acesso ao bucket do Amazon Simple Storage Service (Amazon S3). Em seguida, modifique a política de confiança do perfil adicionando a declaração da etapa 2.

4.Crie mais um perfil do IAM para o servidor do Transfer Family. Esse perfil enviará logs para o CloudWatch. Em seguida, modifique a política de confiança do perfil adicionando a declaração da etapa 2.

Crie o servidor do Transfer Family

Conclua as etapas a seguir criar um servidor do Transfer Family. Faça as seguintes configurações:

1.Em Tipo de provedor de identidades, selecione Personalizado. Em Provedor personalizado, insira a API que você criou.

2.Em Perfil de invocação, selecione o perfil do IAM que concede as permissões necessárias ao servidor para invocar a API que você criou.

3.Em Perfil de registro em log, selecione o perfil do IAM criado para enviar logs para o CloudWatch.

Configure um armazenamento de credenciais

É necessário configurar um armazenamento de credenciais para a configuração do usuário. Para mais informações sobre como configurar um armazenamento de credenciais, consulte Função padrão do Lambda e Como usar o AWS Secrets Manager para habilitar a autenticação por senha ao usar o AWS Transfer com SFTP habilitado.

Para que os usuários possam realizar ações no bucket do Amazon S3, é necessário definir os seguintes campos (ao mínimo):

  • Nome de usuário
  • Senha
  • Diretório inicial
  • Perfil

Observação: o perfil é o nome do recurso da Amazon (ARN) do perfil do IAM que você criou para conceder aos usuários do servidor acesso ao bucket do Amazon S3.

Testar e solucionar problemas com sua configuração

Você pode testar sua configuração das seguintes formas:

Se houver problemas com sua configuração, você pode solucioná-los das seguintes maneiras:

  • Verifique a resposta do provedor de identidades do teste. Se o código de status não for 200, a configuração da API pode estar com algum problema.
  • Verifique se os perfis do IAM que você criou têm as permissões e relações de confiança necessárias.
  • Essa configuração ativa os registros em log. Analise os logs de execução do Lambda, os logs doAPI Gateway e os logs do Transfer Family para identificar problemas.
  • É possível que uma das pilhas disponíveis do CloudFormation corresponda à configuração que você precisa para o provedor de identidades personalizado. Nesse caso, implante o modelo do CloudFormation e compare‑o com sua configuração para identificar quais são os problemas.

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos