Come posso utilizzare un'API supportata da Lambda come provider di identità personalizzato per il mio server Transfer Family senza utilizzare CloudFormation?

9 minuti di lettura
0

Desidero utilizzare un'API Gateway Amazon API supportata da AWS Lambda come provider di identità personalizzato per il mio server AWS Transfer Family. Tuttavia, non voglio utilizzare uno dei modelli di stack di AWS CloudFormation per la mia configurazione. Oppure, voglio personalizzare la mia configurazione. Come posso configurare un provider di identità personalizzato in questo modo?

Breve descrizione

Puoi scegliere di configurare manualmente un'API Gateway API supportata da Lambda come provider di identità personalizzato per il tuo server Transfer Family, invece di utilizzare uno dei modelli di stack CloudFormation. Per fare ciò, puoi configurare direttamente una funzione Lambda e un'API Gateway API con il tuo server.

Ad esempio, per configurare la stessa configurazione del modello di stack di base, segui questi passaggi:

  1. Crea un ruolo AWS Identity and Access Management (IAM) per il ruolo di esecuzione Lambda.

  2. Crea la funzione Lambda.

  3. (Facoltativo) Crea un ruolo IAM per il ruolo di registrazione di API Gateway.

  4. Configura un'API Gateway API come provider di identità.

  5. Crea ruoli IAM per il server e gli utenti del server Transfer Family.

  6. Crea il server Transfer Family.

  7. Configura il tuo archivio di credenziali.

Risoluzione

Importante: questa configurazione è un esempio di come configurare il provider di identità personalizzato senza utilizzare un modello di stack CloudFormation. È necessario modificare i passaggi di configurazione in base alle esigenze specifiche del provider di identità personalizzato.

Crea un ruolo IAM per il ruolo di esecuzione Lambda

  1. Usa la console IAM per creare il ruolo di esecuzione. Nota: per questa configurazione, sono necessarie solo le autorizzazioni di esecuzione di base. Tuttavia, assicurati di personalizzare le autorizzazioni per il tuo caso d'uso.

  2. Modifica la policy di fiducia del ruolo per aggiungere la seguente dichiarazione:

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

Crea la funzione Lambda

Segui i passaggi per creare una funzione Lambda utilizzando la console. Assicurati di configurare quanto segue:

  1. Per il ruolo Esecuzione, seleziona il ruolo di esecuzione Lambda che hai creato.

  2. Per il Codice funzione, puoi utilizzare la funzione Lambda predefinita per l'autenticazione. In alternativa, puoi usare una funzione personalizzata.

(Facoltativo) Crea un ruolo IAM per il ruolo di registrazione di API Gateway

Puoi usare i File di Amazon CloudWatch per aiutarti a eseguire il debug degli errori con la tua REST API. Per creare un ruolo di registrazione, segui questi passaggi:

  1. Crea un ruolo IAM per API Gateway e associa la policy gestita AmazonAPIGatewayPushToCloudWatchLogs al ruolo.

  2. Modifica la policy di fiducia del ruolo per aggiungere la seguente dichiarazione:

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

Configura un'API Gateway API come provider di identità

  1. Apri la console API Gateway.

  2. Dal riquadro di navigazione, scegli API.

  3. Scegli Crea API.

  4. In Scegli un tipo di API, accedi a REST API, quindi scegli Costruisci. Quindi, inserisci quanto segue: In Scegli il protocollo, seleziona REST. Per Crea nuova API, seleziona Nuova API. Per il nome dell'API, inserisci un nome per la tua API. Per Tipo di endpoint, seleziona Regionale.

Nota: non creare la tua API dall'opzione REST API Private.

  1. Scegli Crea API.

  2. Dal pannello di navigazione, scegli Modelli. Quindi, scegli Crea.

  3. Per Nome del modello, inserisci UserConfigResponseModel.

  4. Per Tipo di contenuto, inserisci application/json.

  5. Per lo Schema del modello, inserisci quanto segue:

{"$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"}}}}
  1. Scegli Crea modello.

  2. Dal riquadro di navigazione, scegli Risorse.

  3. Espandi Azioni, quindi scegli Crea risorsa.

  4. Crea una risorsa per i tuoi server Transfer Family. Per Nome risorsa, inserisci Server. Per Percorso risorsa, inserisci i server.

  5. Crea una risorsa per l'ID del server. Per Nome risorsa, inserisci ServerID. Per Percorso risorsa, inserisci {serverId}.

  6. Crea una risorsa per gli utenti del tuo server. Per Nome risorsa, inserisci Utenti. Per Percorso risorsa, inserisci gli utenti.

  7. Crea una risorsa per i nomi utente. Per Nome risorsa, inserisci Nome utente. Per Percorso risorsa, inserisci {username}.

  8. Crea una risorsa per le configurazioni utente. Per Nome risorsa, inserisci GetUserConfig. Per Percorso risorsa, inserisci config.

  9. Espandi Azioni, quindi scegli Crea metodo.

  10. Dall'elenco a discesa, seleziona OTTIENI. Quindi, scegli l'icona di controllo accanto a OTTIENI per creare il metodo.

  11. Per OTTIENI - Impostazioni, inserisci quanto segue: Per Tipo di integrazione, seleziona Funzione Lambda. Per la Regione Lambda, seleziona la Regione AWS in cui si trova la tua funzione Lambda. Per Funzione Lambda, seleziona la funzione che hai creato.

  12. Scegli Salva.

  13. Scegli Richiesta del metodo. Quindi, inserisci quanto segue: Per Autorizzazione, seleziona AWS_IAM. Per Intestazioni delle richieste HTTP, scegli Aggiungi intestazione. Quindi, inserisci Password come nome dell'intestazione. Per Parametri della stringa di query URL, scegli Aggiungi stringa di query. Quindi, inserisci il protocollo come nome della stringa di query. Scegli nuovamente Aggiungi stringa di query, quindi inserisci sourceIP come altro nome di stringa di query.

  14. Dalla barra di navigazione del metodo OTTIENI, scegli Esecuzione del metodo per tornare alla pagina OTTIENI - Esecuzione del metodo.

  15. Scegli Richiesta di integrazione. Quindi, espandi Modelli di mappatura.

  16. Per Richiedi passthrough corpo, seleziona Quando nessun modello corrisponde all'intestazione Content-Type della richiesta.

  17. Per Content-Type, inserisci application/json. Scegli l'icona di controllo per confermare.

  18. Per il modello, inserisci quanto segue:

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

  2. Dalla barra di navigazione del metodo OTTIENI, scegli Esecuzione del metodo per tornare alla pagina OTTIENI - Esecuzione del metodo.

  3. Scegli Risposta di integrazione. Verifica che non vi siano modelli di mappatura e che il corpo della risposta sia passato alla risposta del metodo.

  4. Dalla barra di navigazione del metodo OTTIENI, scegli Esecuzione del metodo per tornare alla pagina OTTIENI - Esecuzione del metodo.

  5. Scegli **Risposta del metodo.**Quindi, espandi 200.

  6. Per Corpo della risposta per 200, modifica il valore Modelli, quindi seleziona UserConfigResponseModel che hai creato nei passaggi da 7 a 10. Scegli l'icona di controllo per confermare.

  7. Dal riquadro di navigazione Risorse, scegli OTTIENI, scegli Azioni, quindi scegli Implementa API. Inserisci quanto segue: Per la fase di distribuzione, seleziona [Nuova fase]. In Nome fase, inserisci un nome per la fase.

  8. Scegli Implementa.

  9. Dal pannello di navigazione, scegli Fasi. Quindi, scegli Crea e inserisci quanto segue: In Nome fase, inserisci prod. Per Implementazione, seleziona l’implementazione che hai creato come nuova fase.

  10. Scegli Crea.

Crea ruoli IAM per il server e gli utenti del server Transfer Family

  1. Crea un ruolo IAM per il server Transfer Family che conceda le autorizzazioni per richiamare l'API che hai creato, simile al seguente:
{
  "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.Modifica la policy di fiducia del ruolo per aggiungere la seguente dichiarazione:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "transfer.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
  1. [Crea un ruolo IAM per gli utenti del server Transfer Family](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console) che [conceda l'accesso al bucket Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/transfer/latest/userguide/read-write-access.html). Quindi, [modifica la policy di fiducia del ruolo](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-managingrole_edit-trust-policy) per aggiungere la dichiarazione del passaggio 2.
    
  2. Crea un ruolo IAM per il server Transfer Family che invia i log a CloudWatch. Quindi, modifica la policy di fiducia del ruolo per aggiungere la dichiarazione del passaggio 2.

Crea il server Transfer Family

Segui i passaggi per creare un server Transfer Family. Assicurati di configurare quanto segue:

  1. Per il tipo di provider di identità, seleziona Personalizzato. Quindi, per il Provider personalizzato, inserisci l'API che hai creato.

  2. Per il Ruolo di invocazione, seleziona il ruolo IAM che concede al server le autorizzazioni per richiamare l'API che hai creato.

  3. Per il Ruolo di registrazione, seleziona il ruolo IAM per il server che invia i log a CloudWatch.

Configura il tuo archivio di credenziali

È necessario configurare l'archivio delle credenziali per la configurazione utente. Per ulteriori informazioni sulla configurazione di un archivio di credenziali, consulta Funzione Lambda predefinita e Abilita l'autenticazione con password per AWS Transfer for SFTP utilizzando AWS Secrets Manager.

È necessario configurare almeno i seguenti campi per consentire agli utenti di eseguire azioni sul bucket Amazon S3:

  • Nome utente
  • Password
  • HomeDirectory
  • Ruolo

Nota: il ruolo è il nome della risorsa Amazon (ARN) del ruolo IAM che hai creato per concedere agli utenti del server l'accesso al bucket Amazon S3.

Test e risoluzione dei problemi di configurazione

Puoi testare la tua configurazione nei seguenti modi:

Se riscontri problemi con la configurazione, puoi risolverli nei seguenti modi:

  • Controlla la risposta del provider di identità del test. Se il codice di stato non è 200, potrebbero verificarsi problemi con la configurazione dell'API.
  • Verifica che i ruoli IAM che hai creato abbiano le autorizzazioni e le relazioni di fiducia corrette.
  • Questa configurazione attiva la registrazione ed è possibile esaminare i registri di esecuzione di Lambda, i log di API Gateway e i log di Transfer Family per identificare i problemi.
  • Se la configurazione personalizzata del provider di identità di cui hai bisogno corrisponde a uno degli stack CloudFormation disponibili, puoi provare a implementare il modello CloudFormation e confrontarlo con la tua configurazione per identificare i problemi.

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa