Come posso risolvere l'errore della policy di attendibilità IAM "Impossibile aggiornare la policy di attendibilità. Principale non valido nella policy"?

Ultimo aggiornamento: 04/04/2022

Quando ho provato a modificare la mia policy di attendibilità dei ruoli AWS Identity and Access Management (IAM) tramite la Console di gestione AWS, ho ricevuto un errore simile al seguente:

"Impossibile aggiornare la policy di attendibilità. Principale non valido nella policy."

Breve descrizione

Questo messaggio di errore indica che il valore di un elemento Principal nella policy di attendibilità IAM non è valido. Per risolvere l'errore, verifica quanto segue:

  • La policy di attendibilità del ruolo IAM utilizza i valori supportati con la formattazione corretta per l'elemento Principal.
  • Se la policy di attendibilità del ruolo IAM utilizza identità IAM (utenti, gruppi di utenti e ruoli) come principali, verifica che l'utente o il ruolo non sia stato eliminato.

Risoluzione

Verifica i valori supportati per l'elemento Principal

L'elemento Principal nella policy di attendibilità IAM del tuo ruolo deve includere i seguenti valori supportati.

1.    Assicurati che la policy IAM includa l'ID account AWS a 12 cifre corretto, simile al seguente:

"Principal": {
"AWS": "123456789012"
}

Nota: l'account AWS può essere specificato anche utilizzando l'Amazon Resource Name (ARN) dell’utente root. Ad esempio, arn:aws:iam::123456789012:root.

2.    Se i principal delle policy di attendibilità IAM sono utenti, ruoli o utenti federati IAM, l'intero ARN deve essere specificato in modo simile al seguente:

"Principal": {
  "AWS": [
    "arn:aws:iam::123456789012:user/user-name",
    "arn:aws:iam::123456789012:role/role-name",
    "arn:aws:sts::123456789012:assumed-role/role-name/role-session-name",
    "arn:aws:sts::123456789012:federated-user/user-name"
  ]
}

3.    Se la policy di attendibilità IAM include caratteri jolly, segui queste linee guida.

Nota: non è possibile utilizzare un carattere jolly "*" per far corrispondere parte del nome di un principale o un ARN.

L'esempio seguente riporta un uso non corretto di un carattere jolly in una policy di attendibilità IAM:

"Principal": {
  "AWS": "arn:aws:iam::123456789012:user/user-*"
}

Per far corrispondere parte del nome del principale tramite un carattere jolly, utilizza un elemento Condition con la chiave di condizione globale aws:PrincipalArn e specifica un ARN con il carattere jolly.

Per specificare le identità di tutti gli account AWS, utilizza un carattere jolly simile al seguente:

"Principal": {
  "AWS": "*"
}

Importante: è possibile utilizzare un carattere jolly nell'elemento Principal con un effetto Consenti in una policy di attendibilità. Tuttavia, ciò consente a qualsiasi utente IAM, sessione di ruolo presunta o utente federato in qualsiasi account AWS nella stessa partizione di accedere al ruolo. Per gli utenti e i principali del ruolo IAM all'interno del tuo account AWS non sono richieste altre autorizzazioni. Per assumere il tuo ruolo IAM, i principali in altri account AWS, devono disporre di autorizzazioni basate sull'identità.

Questo metodo non consente ai principali di sessione di identità Web, ai principali di sessione SAML o ai principali di servizio di accedere alle risorse.

Come best practice, utilizza questo metodo solo con l'elemento Condition e una chiave di condizione come aws:PrincipalArn per limitare le autorizzazioni come riportato di seguito:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringLike": {
          "aws:PrincipalArn": "arn:aws:iam::123456789012:user/user-*"
        }
      }
    }
  ]
}

Questo esempio di policy di attendibilità utilizza la chiave condizionale aws:PrincipalArn per consentire solo agli utenti con nomi utente corrispondenti di assumere il ruolo IAM.

4.    Se il tuo ruolo IAM è un ruolo di servizio AWS, l'intero principale del servizio deve essere specificato in modo simile al seguente:

"Principal": {
  "Service": "ec2.amazonaws.com"
}

5.    È possibile utilizzare i principali di sessione SAML con un provider di identità SAML esterno per autenticare gli utenti IAM. La policy di attendibilità del ruolo IAM deve avere un elemento Principal simile al seguente:

"Principal": {
  "Federated": "arn:aws:iam::123456789012:saml-provider/provider-name"
}

6.    È possibile utilizzare i principali di sessione di identità Web per autenticare gli utenti IAM. La policy di attendibilità del ruolo IAM che fornisce l'accesso deve avere un elemento Principal simile al seguente:

"Principal": { "Federated": "cognito-identity.amazonaws.com" }

7.    Se all'interno di una singola istruzione utilizzi diversi tipi di principali, formatta la policy di attendibilità IAM in modo simile al seguente:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:user/user-name",
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

L'utente o il ruolo IAM deve essere un'identità esistente

Se la policy di attendibilità del ruolo IAM utilizza utenti o ruoli IAM come principali, verifica che tali identità IAM non vengano eliminate. L'errore "Principale non valido nella policy" si verifica se si modifica la policy di attendibilità IAM e il principale è stato eliminato.

Nota: se il principale è stato eliminato, prendi nota dell'ID univoco del principale nella policy di attendibilità IAM e non dell'ARN.