Come posso usare i ruoli IAM per limitare le chiamate API da indirizzi IP specifici alla Console di gestione AWS?

4 minuti di lettura
0

Desidero limitare l'accesso alle chiamate API AWS a indirizzi IP specifici. Come posso usare i ruoli di AWS Identity and Access Management (IAM) per limitare l'accesso dalle chiamate API alla Console di gestione AWS?

Breve descrizione

Puoi utilizzare la chiave di condizione globale aws:SourceIp nell'elemento condizionale di una policy IAM per limitare le chiamate API da indirizzi IP specifici. Tuttavia, ciò nega l'accesso ai servizi AWS, come AWS CloudFormation, che effettuano chiamate per tuo conto, a meno che tu non utilizzi anche la condizione globale aws:ViaAWSService. Per ulteriori informazioni, consulta AWS: Nega l'accesso ad AWS in base all'IP di origine.

Ad esempio, supponi di avere un ruolo di servizio AWS che consente ad AWS CloudFormation di chiamare Amazon Elastic Compute Cloud (Amazon EC2) per interrompere un'istanza. La richiesta viene rifiutata perché il servizio di destinazione (Amazon EC2) vede l'indirizzo IP del servizio chiamante (AWS CloudFormation) anziché l'utente di origine. Non è possibile passare l'indirizzo IP di origine tramite un servizio di chiamata al servizio di destinazione per la valutazione in una policy IAM.

Risoluzione

Crea un ruolo IAM con lo stesso set di autorizzazioni associato alla policy IAM associata all'utente IAM. Ciò fornisce all'utente IAM le autorizzazioni per assumere il ruolo sts:AssumeRole API solo se la richiesta proviene dall'indirizzo IP specificato. Ciò è dovuto al controllo delle restrizioni aws:SourceIp che viene eseguito quando l'utente tenta di assumere il ruolo. Quando l'utente assume il ruolo IAM, acquisisce le autorizzazioni della policy IAM ad esso associata. Poiché la policy IAM associata al ruolo non utilizza la chiave di condizione aws:SourceIp, l'accesso ai servizi AWS è consentito.

Crea la seguente policy IAM, quindi allega questa policy a un utente IAM con accesso programmatico. Questa policy IAM consente all'utente IAM di AssumeRole con il nome di ruolo Bob. Bob non ha bisogno di autorizzazioni aggiuntive. Tutte le altre autorizzazioni necessarie vengono acquisite quando l'utente IAM assume con successo il ruolo Bob.

Nota:

Policy per utente IAM di esempio

Questa policy di esempio dispone delle autorizzazioni per eseguire chiamate API sulle risorse dell'account.

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "arn:aws:iam::EXAMPLEIAMACCOUNTID:role/Bob"
  }
}

Crea il ruolo IAM Bob per delegare le autorizzazioni all'utente IAM. Segui le istruzioni per la creazione di un ruolo IAM (console). Puoi anche utilizzare l'interfaccia della linea di comando o l'API AWS.

Nota:

  • Quando usi la console per creare il ruolo, modifica la policy di fiducia del ruolo in modo simile a questo esempio per la policy di fiducia Bob. Utilizzando l'interfaccia della linea di comando AWS create-role o l'API CreateRole, puoi passare il documento sulla policy delle relazioni di fiducia come valore nel parametro del documento update-assume-role-policy.
  • La richiesta deve provenire dall'intervallo di indirizzi IP specificato 103.15.250.0/24 o 12.148.72.0/23. Altrimenti, l'utente IAM non sarà in grado di assumere il ruolo ed effettuare chiamate API.

Esempio di policy di fiducia dei ruoli IAM

Questo esempio di policy di fiducia consente all'utente di assumere il ruolo se la richiesta proviene dall'intervallo di indirizzi IP 103.15.250.0/24 o 12.148.72.0/23.

**Nota:**Sostituisci YOURIAMUSERNAME con il tuo nome utente IAM.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::account-id:user/YOURIAMUSERNAME"
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Effect": "Deny",
      "Principal": {
        "AWS": "arn:aws:iam::account-id:user/YOURIAMUSERNAME"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": [
            "103.15.250.0/24",
            "12.148.72.0/23"
          ]
        }
      }
    }
  ]
}

**Nota:**Questa soluzione alternativa interrompe i log di AWS CloudTrail perché le azioni vengono eseguite dal ruolo IAM assunto dall'utente, non dall'utente IAM. Le chiamate API assumeRole eseguite dall'utente IAM vengono registrate nei log di CloudTrail sotto l'utente IAM. Eventuali chiamate API aggiuntive eseguite dal ruolo IAM vengono registrate nei log di CloudTrail con il nome del ruolo.


Informazioni correlate

Chiavi di contesto delle condizioni globali di AWS