Como posso usar perfis do IAM para restringir chamadas de API de endereços IP específicos para o AWS Management Console?

4 minuto de leitura
0

Quero restringir o acesso às chamadas de API da AWS a endereços IP específicos. Como posso usar as funções do AWS Identity and Access Management (IAM) para limitar o acesso de chamadas de API ao AWS Management Console?

Breve descrição

Você pode usar a chave de condição global aws:SourceIP no elemento de condição de uma política do IAM para restringir chamadas de API de endereços IP específicos. No entanto, isso nega o acesso aos serviços da AWS, como o AWS CloudFormation, que fazem chamadas em seu nome, a menos que você também use a condição global aws:ViaAWSService. Para obter mais informações, consulte AWS: Nega o acesso à AWS com base no IP de origem.

Por exemplo, suponha que você tenha um perfil de serviço da AWS que permita ao AWS CloudFormation chamar o Amazon Elastic Compute Cloud (Amazon EC2) para interromper uma instância. A solicitação é negada porque o serviço de destino (Amazon EC2) vê o endereço IP do serviço de chamada (AWS CloudFormation) em vez do usuário de origem. Você não pode passar o endereço IP de origem por meio de um serviço de chamada para o serviço de destino para avaliação em uma política do IAM.

Resolução

Crie um perfil do IAM com o mesmo conjunto de permissões anexadas à política do IAM anexada ao usuário do IAM. Isso dá ao usuário do IAM permissões para assumir a API sts:AssumeRole do perfil somente se a solicitação for proveniente do endereço IP especificado. Isso ocorre por causa da verificação de restrição aws:SourceIP que é executada quando o usuário tenta assumir a função. Quando o usuário assume o perfil do IAM, ele adquire as permissões da política do IAM que está anexada a ele. Como a política do IAM anexada ao perfil não usa a chave de condição aws:SourceIP, o acesso aos serviços da AWS é permitido.

Crie a seguinte política do IAM e, em seguida, anexe essa política a um usuário do IAM que tenha acesso programático. Essa política do IAM permite que o usuário do IAM assuma um perfil com o nome de Bob. Bob não precisa de permissões adicionais. Todas as outras permissões necessárias são adquiridas quando o usuário do IAM assume com sucesso o perfil Bob.

Observação:

Exemplo de política de usuário do IAM

Esse exemplo de política tem permissões para realizar chamadas de API nos recursos da conta.

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

Crie o perfil do IAM Bob para delegar permissões ao usuário do IAM. Siga as instruções para Criar um perfil do IAM (Console). Você também pode usar a CLI ou a API da AWS.

Observação:

  • Ao usar o console para criar o perfil, modifique a política de confiança do perfil de forma semelhante a este exemplo para a política de confiança Bob. Ao usar a AWS CLI create-role ou a API CreateRole, você pode passar o documento de política de relacionamento de confiança como um valor no parâmetro update-assume-role-policy document.
  • A solicitação deve vir do intervalo de endereços IP especificado 103.15.250.0/24 ou 12.148.72.0/23. Caso contrário, o usuário do IAM não poderá assumir o perfil e fazer chamadas de API.

Exemplo de política de confiança de perfis do IAM

Esse exemplo de política de confiança permite que o usuário assuma o perfil se a solicitação for proveniente do intervalo de endereços IP 103.15.250.0/24 ou 12.148.72.0/23.

Observação: Substitua YOURIAMUSERNAME pelo seu nome de usuário do 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"
          ]
        }
      }
    }
  ]
}

Observação: Essa solução alternativa interrompe os registros do AWS CloudTrail porque as ações são executadas pela função do IAM que o usuário assumiu, não pelo usuário do IAM. A chamada da API assumeRole realizada pelo usuário do IAM é registrada nos registros do CloudTrail sob o usuário do IAM. Todas as chamadas de API adicionais realizadas pelo perfil do IAM são registradas nos registros do CloudTrail com o nome do perfil.


Informações relacionadas

Chaves de contexto de condição global da AWS