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á.
Usando AWS Lambda para integrar seu provedor de identidade
Este tópico descreve como criar uma AWS Lambda função que se conecta ao seu provedor de identidade personalizado. Você pode usar qualquer provedor de identidade personalizado, como Okta, Secrets Manager ou um armazenamento de dados personalizado que inclua lógica de autorização e autenticação. OneLogin
Para a maioria dos casos de uso, a forma recomendada de configurar um provedor de identidade personalizado é usar Solução personalizada de provedor de identidade o.
nota
Antes de criar um servidor Transfer Family que usa o Lambda como provedor de identidade, você deve criar a função. Para obter um exemplo de função do Lambda, consulte Exemplo de funções do Lambda. Ou você pode implantar uma CloudFormation pilha que usa um dosModelos de função do Lambda. Além disso, certifique-se de que sua função do Lambda use uma política baseada em recursos que confie no Transfer Family. Para visualizar um exemplo de política, consulte Exemplo de política baseada em recursos do Lambda.
-
Abra o console de AWS Transfer Family
. -
Escolha Criar servidor para abrir a página Criar servidor. Em Escolher um provedor de identidade, escolha Provedor de identidade personalizado, conforme mostrado na captura de tela a seguir.
nota
A escolha dos métodos de autenticação só estará disponível se você habilitar o SFTP como um dos protocolos do seu servidor Transfer Family.
-
Verifique se o valor padrão, Usar AWS Lambda para conectar seu provedor de identidade, está selecionado.
-
Para a AWS Lambda Função, insira o nome da sua função do Lambda.
-
Preencha as caixas restantes e escolha Criar servidor. Para obter detalhes sobre as etapas restantes para criar um servidor, consulte Configurando um endpoint de servidor SFTP, FTPS ou FTP.
Exemplo de política baseada em recursos do Lambda
Você deve ter uma política que faça referência ao servidor Transfer Family e ao ARNs Lambda. Por exemplo, é possível usar a política a seguir com sua função do Lambda que se conecta ao seu provedor de identidade. A política tem um JSON de escape como uma string.
-
"Policy": "{\"Version\":\"2012-10-17\", \"Id\":\"default\", \"Statement\":[ {\"Sid\":\"AllowTransferInvocation\", \"Effect\":\"Allow\", \"Principal\":{\"Service\":\"transfer.amazonaws.com\"}, \"Action\":\"lambda:InvokeFunction\", \"Resource\":\"arn:aws:lambda:region:account-id:function:my-lambda-auth-function\", \"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:transfer:region:account-id:server/server-id\"}}} ]}"
nota
No exemplo de política acima, substitua cada uma user input
placeholder por suas próprias informações.
Estrutura de mensagens de evento
A estrutura da mensagem de evento do servidor SFTP enviada para a função do Lambda do autorizador para um IDP personalizado é a seguinte.
{ "username": "value", "password": "value", "protocol": "SFTP", "serverId": "s-abcd123456", "sourceIp": "192.168.0.100" }
Onde username e password são os valores das credenciais de login enviadas ao servidor.
Por exemplo, insira o seguinte comando para se conectar:
sftp bobusa@server_hostname
A senha será solicitada:
Enter password: mysecretpassword
É possível verificar isso na sua função do Lambda imprimindo o evento passado de dentro da função do Lambda. A aparência deve ser semelhante ao exemplo a seguir.
{ "username": "bobusa", "password": "mysecretpassword", "protocol": "SFTP", "serverId": "s-abcd123456", "sourceIp": "192.168.0.100" }
A estrutura do evento é semelhante para FTP e FTPS: a única diferença é que esses valores são usados para o parâmetro protocol, em vez de SFTP.
Funções do Lambda para autenticação
Para implementar diferentes estratégias de autenticação, edite a função do Lambda. Para ajudá-lo a atender às necessidades do seu aplicativo, você pode implantar uma CloudFormation pilha. Para obter mais informações sobre o Lambda, consulte Guia do desenvolvedor do AWS Lambda ou Como criar funções do Lambda com Node.js.
Tópicos
Valores do Lambda válidos
A tabela a seguir descreve os detalhes dos valores que o Transfer Family aceita para funções Lambda que são usadas para provedores de identidade personalizados.
| Valor | Description | Obrigatório |
|---|---|---|
|
|
Especifica o nome do recurso da Amazon (ARN) do perfil do IAM que controla o acesso dos seus usuários ao bucket do Amazon S3 ou ao sistema de arquivos do Amazon EFS. As políticas anexadas a essa função determinam o nível de acesso que você deseja fornecer aos usuários durante a transferência de arquivos para dentro e para fora de seu sistema de arquivos do Amazon S3 ou Amazon EFS. O perfil do IAM também deve conter uma relação de confiança que permite o servidor acesse os recursos quando estiver servindo as solicitações de transferência dos usuários. Para obter informações sobre como estabelecer um relacionamento de confiança, consulte Estabelecer um relacionamento de confiança. |
Obrigatório |
|
|
A identidade POSIX completa, incluindo ID de usuário ( |
Necessário para armazenamento secundário do Amazon EFS |
|
|
Uma lista de valores de chave pública SSH que são válidos para esse usuário. Uma lista vazia indica que esse não é um login válido. Não deve ser devolvido durante a autenticação por senha. |
Opcional |
|
|
Uma política de sessão para seu usuário, para que você possa usar o mesmo perfil do IAM do entre vários usuários. Esta política delimita o acesso do usuário a partes do bucket do Amazon S3. Para obter mais informações sobre o uso de políticas de sessão com provedores de identidade personalizados, consulte os exemplos de políticas de sessão neste tópico. |
Opcional |
|
|
O tipo de diretório (pasta) inicial que você deseja que o diretório inicial dos usuários seja quando eles fizerem login no servidor.
|
Opcional |
|
|
Mapeamentos de diretórios lógicos que especificam quais caminhos e chaves do Amazon S3 devem estar visíveis para o usuário e como você deseja torná-los visíveis. Você precisa especificar o par |
Obrigatório se |
|
|
O diretório inicial de um usuário quando ele faz login no servidor usando o cliente. O formato depende do seu back-end de armazenamento:
ImportanteO nome do bucket ou o ID do sistema de arquivos do Amazon EFS devem ser incluídos no caminho. A omissão dessas informações resultará em erros de “Arquivo não encontrado” durante as transferências de arquivos. |
Opcional |
nota
HomeDirectoryDetails O é uma representação em string de um mapa JSON. Isso contrasta com PosixProfile, que é um objeto de mapa JSON real e PublicKeys que é uma matriz JSON de strings. Veja os exemplos de código para obter detalhes específicos do idioma.
HomeDirectory Requisitos de formato
Ao usar o HomeDirectory parâmetro, certifique-se de incluir o formato completo do caminho:
-
Para armazenamento no Amazon S3: sempre inclua o nome do bucket no formato
/bucket-name/path -
Para armazenamento no Amazon EFS: sempre inclua o ID do sistema de arquivos no formato
/fs-12345/path
Uma causa comum dos erros de “Arquivo não encontrado” é omitir o nome do bucket ou o ID do sistema de arquivos EFS do HomeDirectory caminho. HomeDirectoryDefinir como apenas / sem o identificador de armazenamento fará com que a autenticação seja bem-sucedida, mas as operações de arquivo falhem.
Exemplo de funções do Lambda
Esta seção apresenta alguns exemplos de funções do Lambda, tanto em NodeJS quanto em Python.
nota
Nesses exemplos, o usuário, a função, o perfil POSIX, a senha e os detalhes do diretório inicial são todos exemplos e devem ser substituídos pelos valores reais.
Testar a configuração
Depois de criar seu provedor de identidade personalizado, você deve testar sua configuração.
Se a autenticação do usuário for bem-sucedida, o teste retornará uma resposta de HTTP StatusCode:
200, uma string vazia Message: "" (que, caso contrário, conteria um motivo para a falha) e um campo Response.
nota
No exemplo de resposta abaixo, o campo Response é um objeto JSON que foi “stringificado” (convertido em uma string JSON simples que pode ser usada dentro de um programa) e contém os detalhes das funções e permissões do usuário.
{ "Response":"{\"Policy\":\"{\\\"Version\\\":\\\"2012-10-17\\\",\\\"Statement\\\":[{\\\"Sid\\\":\\\"ReadAndListAllBuckets\\\",\\\"Effect\\\":\\\"Allow\\\",\\\"Action\\\":[\\\"s3:ListAllMybuckets\\\",\\\"s3:GetBucketLocation\\\",\\\"s3:ListBucket\\\",\\\"s3:GetObjectVersion\\\",\\\"s3:GetObjectVersion\\\"],\\\"Resource\\\":\\\"*\\\"}]}\",\"Role\":\"arn:aws:iam::000000000000:role/MyUserS3AccessRole\",\"HomeDirectory\":\"/\"}", "StatusCode": 200, "Message": "" }
Modelos de função do Lambda
Você pode implantar uma CloudFormation pilha que usa uma função Lambda para autenticação. Fornecemos vários modelos que autenticam e autorizam seus usuários usando credenciais de login. Você pode modificar esses modelos ou AWS Lambda códigos para personalizar ainda mais o acesso do usuário.
nota
Você pode criar um AWS Transfer Family servidor habilitado para FIPS CloudFormation especificando uma política de segurança habilitada para FIPS em seu modelo. As políticas de segurança disponíveis estão descritas em Políticas de segurança para AWS Transfer Family servidores
Para criar uma CloudFormation pilha para usar na autenticação
-
Abra o CloudFormation console em https://console.aws.amazon.com/cloudformation
. -
Siga as instruções para implantar uma CloudFormation pilha a partir de um modelo existente em Seleção de um modelo de pilha no Guia do AWS CloudFormation usuário.
-
Use um dos modelos a seguir para criar uma função do Lambda para usar na autenticação no Transfer Family.
-
Modelo de pilha clássico (Amazon Cognito)
Um modelo básico para criar um AWS Lambda para uso como provedor de identidade personalizado em AWS Transfer Family. Ele se autentica no Amazon Cognito para autenticação baseada em senha, e as chaves públicas são retornadas de um bucket do Amazon S3 se a autenticação baseada em chave pública for usada. Após a implantação, é possível modificar o código da função do Lambda para fazer algo diferente.
-
AWS Secrets Manager modelo de pilha
Um modelo básico usado AWS Lambda com um AWS Transfer Family servidor para integrar o Secrets Manager como um provedor de identidade. Ele se autentica com base em uma entrada AWS Secrets Manager do formato
aws/transfer/. Além disso, o segredo deve conter os pares de valores-chave de todas as propriedades do usuário retornadas ao Transfer Family. Após a implantação, é possível modificar o código da função do Lambda para fazer algo diferente.server-id/username -
Modelo de pilha Okta
: um modelo básico usado AWS Lambda com um AWS Transfer Family servidor para integrar o Okta como um provedor de identidade personalizado. -
Modelo de pilha Okta-MFA: um modelo
básico que é usado AWS Lambda com um AWS Transfer Family servidor para integrar o Okta, com a autenticação multifator, como um provedor de identidade personalizado. -
Modelo do Azure Active Directory
: os detalhes dessa pilha estão descritos na postagem do blog Autenticando AWS Transfer Family com o Azure Active Directory e. AWS Lambda
Depois que a pilha for implantada, você poderá ver detalhes sobre ela na guia Saídas no console. CloudFormation
A implantação de uma dessas pilhas é a maneira mais fácil de integrar um provedor de identidade personalizado ao fluxo de trabalho do Transfer Family.
-