Solução de problemas de funções do IAM - AWS Identity and Access Management

Solução de problemas de funções do IAM

Use estas informações para ajudá-lo a diagnosticar e corrigir problemas comuns que você venha a encontrar ao trabalhar com funções do IAM.

Não consigo assumir uma função

Verifique o seguinte:

  • Quando você assume uma função usando o AWS Management Console, certifique-se de usar o nome exato da sua função. Os nomes de funções diferenciam maiúsculas e minúsculas quando você assume uma função.

  • Quando você assume uma função usando a API do AWS STS ou AWS CLI, certifique-se de usar o nome exato da sua função no ARN. Os nomes de funções diferenciam maiúsculas e minúsculas quando você assume uma função.

  • Verifique se a política do IAM concede a você permissão para chamar sts:AssumeRole para a função que você deseja assumir. O elemento Action da política do IAM deve permitir chamar a ação AssumeRole. Além disso, o elemento Resource da política do IAM deve especificar a função que você deseja assumir. Por exemplo, o elemento Resource pode especificar uma função pelo Amazon Resource Name (ARN – Nome de recurso da Amazon) ou usando um curinga (*). Por exemplo, pelo menos uma política aplicável a você deve conceder permissões semelhantes às seguintes:

    "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::account_id_number:role/role-name-you-want-to-assume"
  • Verifique se a identidade do IAM está marcada com alguma tag exigida pela política do IAM. Por exemplo, nas permissões de política a seguir, o elemento Condition exige que você, como o principal que solicita assumir a função, tenha uma tag específica. Você deve estar marcado com department = HR ou department = CS. Do contrário, você não poderá pressupor a função. Para saber mais sobre como marcar usuários e funções do IAM, consulte Marcar recursos do IAM.

    "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "*", "Condition": {"StringEquals": {"aws:PrincipalTag/department": [ "HR", "CS" ]}}
  • Verifique se você atende a todas as condições especificadas na política de confiança da função. Uma Condition pode especificar uma data de expiração, um ID externo ou que uma solicitação venha apenas de endereços IP específicos. Considere o seguinte exemplo: se a data atual for qualquer período após a data especificada, a política nunca será correspondida e não concederá a você a permissão para assumir a função.

    "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::account_id_number:role/role-name-you-want-to-assume" "Condition": { "DateLessThan" : { "aws:CurrentTime" : "2016-05-01T12:00:00Z" } }
  • Verifique se a conta da AWS da qual você está chamando AssumeRole seja uma entidade confiável para a função que está assumindo. Entidades confiáveis são definidas como Principal em uma política de confiança da função. O exemplo a seguir é uma política de confiança anexada à função que você deseja assumir. Nesse exemplo, o ID da conta com o usuário do IAM com o qual você fez login deve ser 123456789012. Se o número da conta não estiver listado no elemento Principal da política de confiança da função, você não poderá assumir a função. Não importa quais permissões sejam concedidas a você nas políticas de acesso. Observe que a política de exemplo limita as permissões às ações que ocorrem entre 1° de julho de 2017 e 31 de dezembro de 2017 (UTC), inclusive. Se você fizer login antes ou depois dessas datas, a política não corresponderá e você não poderá assumir a função.

    "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": "sts:AssumeRole", "Condition": { "DateGreaterThan": {"aws:CurrentTime": "2017-07-01T00:00:00Z"}, "DateLessThan": {"aws:CurrentTime": "2017-12-31T23:59:59Z"} }
  • Source Identity (Identidade de origem) – os administradores podem configurar funções para exigir que as identidades transmitam uma sequência de caracteres personalizada que identifique a pessoa ou a aplicação que está executando ações na AWS, chamada identidade de origem. Verifique se a função que está sendo assumida exige a definição de uma identidade de origem. Para obter mais informações sobre a identidade de origem, consulte Monitorar e controlar as ações tomadas com funções assumidas.

Uma nova função apareceu na minha conta da AWS

Alguns serviços da AWS requerem que você use um tipo exclusivo de função de serviço que seja diretamente vinculada ao serviço. Essa função vinculada ao serviço é predefinida pelo serviço e inclui todas as permissões que o serviço requer. Isso facilita a configuração de um serviço, pois você não precisa adicionar manualmente as permissões necessárias. Para obter informações gerais sobre funções vinculadas ao serviço, consulte Uso de funções vinculadas a serviço.

Você já pode estar usando um serviço quando ele começa a oferecer suporte a funções vinculadas ao serviço. Se esse for o caso, você pode receber um e-mail informando sobre uma nova função na sua conta. Essa função inclui todas as permissões de que o serviço precisa para executar ações em seu nome. Você não precisa realizar nenhuma ação para oferecer suporte a essa função. No entanto, você não deve excluir a função de sua conta. Isso pode remover permissões de que o serviço precisa para acessar recursos da AWS. Você pode visualizar as funções vinculadas ao serviço na sua conta acessando o IAM, na página Funções do console do IAM. As funções vinculadas ao serviço aparecem com (Função vinculada ao serviço) na coluna Entidades confiáveis da tabela.

Para obter informações sobre quais serviços oferecem suporte a funções vinculadas ao serviço, consulte Serviços da AWS compatíveis com o IAM e procure os serviços que têm Sim na coluna Função vinculada ao serviço. Para obter informações sobre como usar a função vinculada a um serviço, escolha o link Sim.

Não consigo editar ou excluir uma função na minha conta da AWS

Você não pode excluir ou editar as permissões de uma função vinculada ao serviço no IAM. Essas funções incluem confianças e permissões predefinidas exigidas pelo serviço para executar ações em seu nome. Você pode usar o console, a AWS CLI ou a API do IAM para editar somente a descrição de uma função vinculada ao serviço. Você pode visualizar as funções vinculadas ao serviço na sua conta acessando o IAM, na página Funções no console. As funções vinculadas ao serviço aparecem com (Função vinculada ao serviço) na coluna Entidades confiáveis da tabela. Um banner na página Resumo da função também indica que a função é uma função vinculada ao serviço. Você pode gerenciar e excluir essas funções apenas por meio do serviço vinculado, caso o serviço ofereça suporte para a ação. Tenha cuidado ao modificar ou excluir uma função vinculada ao serviço, pois isso pode remover permissões de que o serviço precisa para acessar recursos da AWS.

Para obter informações sobre quais serviços oferecem suporte a funções vinculadas a serviços, consulte Serviços da AWS compatíveis com o IAM e procure os serviços que têm Sim na coluna Função vinculada ao serviço.

Não estou autorizado a executar: iam:PassRole

Quando cria uma função vinculada ao serviço, você precisa ter permissão para passar essa função para o serviço. Alguns serviços criam automaticamente uma função vinculada ao serviço na sua conta quando você executa uma ação nesse serviço. Por exemplo, o Amazon EC2 Auto Scaling cria a função vinculada ao serviço AWSServiceRoleForAutoScaling para você quando você cria um grupo de Auto Scaling pela primeira vez. Se você tentar criar um grupo de Auto Scaling sem a permissão PassRole, receberá o seguinte erro:

ClientError: An error occurred (AccessDenied) when calling the PutLifecycleHook operation: User: arn:aws:sts::111122223333:assumed-role/Testrole/Diego is not authorized to perform: iam:PassRole on resource: arn:aws:iam::111122223333:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling

Para corrigir este erro, peça ao administrador para adicionar a permissão iam:PassRole para você.

Para saber quais serviços dão suporte a funções vinculadas ao serviço, consulte Serviços da AWS compatíveis com o IAM. Para saber se um serviço cria automaticamente uma função vinculada ao serviço para você, escolha o link Sim para visualizar a documentação da função vinculada ao serviço.

Por que não é possível assumir uma função com uma sessão de 12 horas? (AWS CLI, API da AWS)

Quando usa as operações de API AssumeRole* ou as operações da CLI assume-role* do AWS STS para assumir uma função, você pode especificar um valor para o parâmetro DurationSeconds. É possível especificar um valor de 900 segundos (15 minutos) até a configuração da Duração máxima da sessão para a função. Se você especificar um valor maior do que o configurado, a operação falhará. Essa configuração pode ter um valor máximo de 12 horas. Por exemplo, se você especificar uma duração de 12 horas para a sessão, mas o administrador definir a duração máxima da sessão como 6 horas, a operação falhará. Para saber como visualizar o valor máximo para sua função, consulte Visualizar a configuração da duração máxima da sessão de uma função.

Se você usar o encadeamento de funções (usar uma função para assumir uma segunda função), sua sessão será limitada a um máximo de uma hora. Se você usar o parâmetro DurationSeconds para fornecer um valor maior do que uma hora, a operação falhará.

Recebo um erro quando tento alternar funções no console do IAM

As informações inseridas na página Trocar de função devem corresponder às informações da função. Caso contrário, a operação falha e você recebe o seguinte erro:

Invalid information in one or more fields. Check your information or contact your administrator.

Se você receber esse erro, confirme se as seguintes informações estão corretas:

  • ID ou alias da conta – o ID da conta da AWS é um número de 12 dígitos. Sua conta pode ter um alias, que é um identificador fácil, como o nome da empresa, que pode ser usado em vez do ID da conta da AWS. É possível usar o ID ou o alias da conta nesse campo.

  • Nome da função – os nomes da função diferenciam letras maiúsculas de minúsculas. O ID da conta e o nome da função devem corresponder ao que está configurado para a função.

Se continuar a receber uma mensagem de erro, entre em contato com o administrador para verificar as informações anteriores. A política de confiança de função ou a política de usuário do IAM pode limitar o acesso. O administrador pode verificar as permissões para essas políticas.

Minha função tem uma política que permite que eu execute uma ação, mas recebo a mensagem "access denied (acesso negado)"

Sua sessão de função pode estar limitada por políticas de sessão. Quando solicita credenciais de segurança temporárias de forma programática usando o AWS STS, você pode opcionalmente passar políticas de sessão em linha ou gerenciadas. As políticas de sessão são políticas avançadas que você passa como um parâmetro ao criar uma sessão de credenciais temporárias de forma programática para uma função. Você pode passar um único documento de política JSON de sessão em linha usando o parâmetro Policy. Você pode usar o parâmetro PolicyArns para especificar até 10 políticas de sessão gerenciadas. As permissões da sessão resultante são a interseção das políticas baseadas em identidade da função e das políticas de sessão. Como alternativa, se o administrador ou um programa personalizado fornecer credenciais temporárias a você, ele poderá incluir uma política de sessão para limitar seu acesso.

O serviço não criou a versão da política padrão da função

Uma função de serviço é uma função que um serviço assume para realizar ações em seu nome na sua conta. Ao configurar alguns ambientes de serviço da AWS, você deve definir uma função a ser assumida pelo serviço. Em alguns casos, o serviço cria a função de serviço e sua política no IAM para você. Embora você possa modificar ou excluir a função de serviço e sua política no IAM, a AWS não recomenda isso. A função e a política devem ser utilizadas apenas por esse serviço. Se você editar a política e configurar outro ambiente, quando o serviço tentar usar a mesma função e política, a operação poderá falhar.

Por exemplo, quando você usa o AWS CodeBuild pela primeira vez, o serviço cria uma função chamada codebuild-RWBCore-service-role. Essa função de serviço usa a política chamada codebuild-RWBCore-managed-policy. Se você editar a política, ela criará outra versão e salvará essa versão como padrão. Se você executar uma operação subsequente no AWS CodeBuild, o serviço poderá tentar atualizar a política. Se isso acontecer, você receberá o seguinte erro:

codebuild.amazon.com did not create the default version (V2) of the codebuild-RWBCore-managed-policy policy that is attached to the codebuild-RWBCore-service-role role. To continue, detach the policy from any other identities and then delete the policy and the role.

Se você receber esse erro, faça alterações no IAM antes de continuar com a operação do serviço. Primeiro, defina a versão de política padrão como V1 e tente executar a operação novamente. Se V1 tiver sido excluída anteriormente ou se escolher V1 não funcionar, limpe e exclua a política e a função existentes.

Para obter mais informações sobre como editar políticas gerenciadas, consulte Editar políticas gerenciadas pelo cliente (console). Para obter mais informações sobre as versões de política, consulte Versionamento de políticas do IAM.

Como excluir uma função de serviço e sua política

  1. Faça login no AWS Management Console e abra o console da IAM em https://console.aws.amazon.com/iam/.

  2. No painel de navegação, selecione Policies (Políticas).

  3. Na lista de políticas, escolha o nome da política que deseja excluir.

  4. Selecione a guia Uso da política para visualizar quais usuários, grupos ou funções do IAM usam essa política. Se qualquer uma dessas identidades usar a política, conclua as seguintes tarefas:

    1. Crie uma política gerenciada com as permissões necessárias. Para garantir que as identidades tenham as mesmas permissões antes e depois de suas ações, copie o documento de política JSON da política existente. Depois, crie a política gerenciada e cole o documento JSON, conforme descrito em Criar políticas na guia JSON.

    2. Para cada identidade afetada, anexe a nova política e desanexe a antiga. Para obter mais informações, consulte Adicionar e remover permissões de identidade do IAM.

  5. No painel de navegação, selecione Roles (Funções).

  6. Na lista de funções, escolha o nome da função que deseja excluir.

  7. Selecione a guia Relações de confiança para visualizar quais entidades podem assumir a função. Se qualquer entidade diferente do serviço estiver listada, conclua as seguintes tarefas:

    1. Crie uma função que confie nessas entidades.

    2. A política criada na etapa anterior. Se você pulou essa etapa, crie a política gerenciada agora.

    3. Notifique as pessoas que estavam assumindo a função de que elas não podem mais fazer isso. Forneça informações sobre como assumir a nova função e ter as mesmas permissões.

  8. Exclua a política.

  9. Exclua a função.

Não há caso de uso para uma função de serviço no console

Alguns serviços exigem que você crie manualmente uma função de serviço para conceder permissões de serviço para executar ações em seu nome. Se o serviço não estiver listado no console IAM, você deve listar manualmente o serviço como o principal confiável. Se a documentação do serviço ou recurso que você estiver usando não incluir instruções para listar o serviço como o principal confiável, forneça feedback para a página.

Para criar uma função de serviço manualmente, você precisa saber o principal do serviço para o serviço que assumirá a função. Um principal do serviço é um identificador usado para conceder permissões a um serviço. O escopo principal do serviço é definido pelo serviço.

Você pode encontrar o principal de serviço para alguns serviços, verificando o seguinte:

  1. Aberto Serviços da AWS compatíveis com o IAM.

  2. Verifique se o serviço mostra Sim na coluna Service-linked roles (Funções vinculadas ao serviço).

  3. Escolha o link Yes (Sim) para exibir a documentação da função vinculada a esse serviço.

  4. Localize a seção Service-Linked Role Permissions (Permissões da função vinculada ao serviço) desse serviço para visualizar o principal do serviço.

Criar uma função de serviço manualmente usando AWS CLI comandos ou operações deAWS API. Para criar manualmente uma função de serviço usando o console IAM, conclua as seguintes tarefas:

  1. Crie uma função IAM usando o ID da conta. Não associe uma política nem conceda nenhuma permissão. Para obter mais detalhes, consulte Criar uma função para delegar permissões a um usuário do IAM.

  2. Abra a função e edite o relacionamento de confiança. Em vez de confiar na conta, a função deve confiar no serviço. Por exemplo, atualize o seguinte elemento Principal:

    "Principal": { "AWS": "arn:aws:iam::123456789012:root" }

    Altere o principal para o valor do seu serviço, como IAM.

    "Principal": { "Service": "iam.amazonaws.com" }
  3. Adicione as permissões que o serviço exige associando políticas de permissões à função.

  4. Retorne ao serviço que exige as permissões e use o método documentado para notificar o serviço sobre a nova função de serviço.