Come posso fornire l'autorizzazione IAM tra account per le API HTTP di API Gateway?

3 minuti di lettura
0

Desidero attivare l'autenticazione di AWS Identity and Access Management (IAM) per l'accesso multi-account alla mia API HTTP di Gateway Amazon API. Come posso configurarla?

Breve descrizione

Per le REST API di API Gateway, per fornire l'autenticazione IAM tra account puoi utilizzare le policy delle risorse. Tuttavia, questa opzione non è disponibile per le API HTTP di API Gateway.

Per assumere un ruolo per l'account API HTTP puoi utilizzare l'operazione API sts:AssumeRole. Il ruolo assunto fornisce credenziali di sicurezza temporanee che possono essere utilizzate per richiamare l'API HTTP in un altro account.

Risoluzione

Creazione delle credenziali temporanee IAM

Nota: se durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI) ricevi dei messaggi di errore, assicurati di utilizzare la versione più recente di AWS CLI.

1.    Crea una policy IAM per l'Account A che ospita l'API HTTP. Questa policy fornisce l'autorizzazione di richiamo per l'ARN dell'API HTTP execute-api.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "execute-api:Invoke",
            ],
            "Resource": [
                "arn:aws:execute-api:us-east-1:<AccountA-id>:<Api-id>/$default/*/*"
            ]
        }
    ]
}

2.    Crea un ruolo IAM nell'Account A, aggiungi "Trusted Entity Type" (Tipo di entità attendibile) come "AWS Account" (Account AWS) e inserisci l'ID per l'Account B.

3.    Collega la policy IAM creata nella fase 1 al ruolo IAM creato nella fase 2.

4.    Crea una policy IAM per l'Account B in modo da consentire l'operazione API sts:AssumeRole:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::<AccountA-id>:role/<AssumedRoleName>"
    }
  ]
}

5.    Collega la policy IAM all'utente nell'Account B.

6.    Esegui il comando AWS CLI assume-role in modo simile al seguente:

$ aws sts assume-role --role-arn arn:aws:iam::<account-id>:role/<AssumedRoleName> --role-session-name role_session

Output di esempio:

{
    "Credentials": {
        "AccessKeyId": "A1B2C3D4E5E6G7H8J9K0",
        "SecretAccessKey": "abcdefghijk123456789",
       
 "SessionToken": 
"11111111111122222222223333333333344444444455555566666667777777777778888888999999999aaaaaaaaaabbbbbbbbbcccccccc==",
        "Expiration": "2022-07-11T15:55:25+00:00"
    },
    "AssumedRoleUser": {
        "AssumedRoleId": "AAAAAAABBBBBBBBBBB:role_session",
        "Arn": "arn:aws:sts::<account-id>:assumed-role/<AssumedRoleName>/role_session"
    }
}

Controlla l'oggetto delle credenziali per AccessKeyId, SecretAccessKey e SessionToken. Queste credenziali temporanee fornite dal ruolo assunto possono essere utilizzate per richiamare l'API HTTP.

Test dell'autenticazione IAM

Usa l'app Postman per inviare una richiesta alla tua risorsa API utilizzando il metodo per cui hai attivato l'autenticazione IAM.

Nota: per autenticare manualmente le richieste inviate ad API Gateway utilizzando un altro strumento o ambiente, utilizza il processo di firma Signature Version 4 (SigV4). Per ulteriori informazioni, consulta Firma delle richieste API per AWS.

1.    In Postman, seleziona la scheda Authorization (Autorizzazione) e completa le seguenti operazioni:
Per Type (Tipo), scegli AWS Signature (Firma AWS).
Per AccessKey, SecretKey e SessionToken, immetti i valori dalla chiamata API assume-role.

2.    Per Enter request URL (Immetti URL richiesta), specifica l'URL di richiamo dell'API come riportato di seguito:

https://<Api-id>.execute-api.<region>.amazonaws.com/<stagename>/<resourcepath>

Una richiesta autenticata restituisce un codice di risposta 200 OK. Una richiesta non autorizzata restituisce il messaggio Missing Authentication Token (Token di autenticazione mancante) e un codice di risposta 403 Non consentito.


Informazioni correlate

In che modo posso attivare l'autenticazione IAM per le REST API di API Gateway?