Como posso resolver o erro da política de confiança do IAM “Falha ao atualizar a política de confiança. Entidade principal inválida na política”?

Data da última atualização: 4/4/2022

Quando tentei editar minha política de confiança de função do AWS Identity and Access Management (IAM) usando o Console de Gerenciamento da AWS, recebi um erro semelhante ao seguinte:

“Falha ao atualizar a política de confiança. Entidade principal inválida na política”.

Descrição breve

Essa mensagem de erro indica que o valor de um elemento de Entidade principal na sua política de confiança do IAM não é válido. Para resolver esse erro, confirme o seguinte:

  • Sua política de confiança de função do IAM usa valores compatíveis com a formatação correta para o elemento da Entidade principal.
  • Se a política de confiança de função do IAM usar uma identidade do IAM (usuários, grupos de usuários e funções) como entidades principais, confirme se o usuário ou a função não foi excluída.

Resolução

Verifique os valores compatíveis com o elemento da Entidade principal

O elemento da Entidade principal na política de confiança do IAM da sua função deve incluir os seguintes valores compatíveis.

1.    Certifique-se de que a política do IAM inclua o ID correto da conta da AWS de 12 dígitos semelhante ao seguinte:

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

Observação: a conta da AWS também pode ser especificada usando o usuário raiz nome do recurso da Amazon (ARN). Por exemplo: arn:aws:iam::123456789012:root.

2.    Se as entidades principais da política de confiança do IAM forem usuários, funções ou usuários federados do IAM, todo o ARN deverá ser especificado da mesma forma que o seguinte:

"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"
  ]
}

Se a política de confiança do IAM incluir curinga, siga estas diretrizes.

Observação: não é possível usar um caractere curinga "*" para corresponder a parte de um nome da entidade principal ou ARN.

O exemplo a seguir tem um uso incorreto de um caractere curinga em uma política de confiança do IAM:

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

Para corresponder a parte do nome de entidade principal usando um caractere curinga, use um elemento Condition (Condição) com a chave de condição globalaws:PrincipalArn e especifique um ARN com o curinga.

Para especificar identidades de todas as contas da AWS, use um caractere curinga semelhante ao seguinte:

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

Importante: você pode usar um caractere curinga no elemento de Entidade principal com um efeito Allow (Permitir) em uma política de confiança. No entanto, isso permite que qualquer usuário do IAM, sessão de função presumida ou usuário federado em qualquer conta da AWS na mesma partição acesse sua função. Para usuários do IAM e entidades principais de função em sua conta da AWS, nenhuma outra permissão é necessária. Para entidades principais em outras contas da AWS, eles devem ter permissões baseadas em identidade para assumir sua função do IAM.

Esse método não permite que entidades principais de sessão de identidade da web, entidades de sessão SAML ou entidades principais de serviço acessem os seus recursos.

Como prática recomendada, use esse método somente com o elemento Condition (Condição) e uma chave de condição como aws:PrincipalArn para limitar permissões semelhantes às seguintes:

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

Este exemplo de política de confiança usa a chave de condição aws:PrincipalArn para permitir que apenas usuários com nomes de usuário correspondentes assumam a função do IAM.

4.    Se sua função do IAM for uma função de serviço da AWS, toda a entidade principal de serviço deverá ser especificada de forma semelhante à seguinte:

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

5.    Você pode usarentidades principais de sessão SAML com um provedor de identidade SAML externo para autenticar usuários do IAM. A política de confiança da função do IAM deve ter um elemento de Entidade principal semelhante ao seguinte:

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

6.    Você pode usar as entidades principais de sessão de identidade da web para autenticar usuários do IAM. A política de confiança da função do IAM que fornece acesso deve ter um elemento de Entidade principal semelhante ao seguinte:

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

7.    Se você usar diferentes tipos de entidades principais em uma única instrução, formate a política de confiança do IAM semelhante à seguinte:

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

O usuário ou a função do IAM deve ser uma identidade existente

Se a política de confiança de função do IAM utilizar usuários ou funções do IAM como entidades principais, confirme se essas identidades do IAM não foram excluídas. O erro “Entidade principal inválida na política” ocorre se você modificar a política de confiança do IAM e a entidade principal for excluída.

Observação: se a entidade principal foi excluída, observe o ID exclusivo da entidade principal na política de confiança do IAM e não o ARN.