Quero usar as funções do AWS Identity and Access Management (AWS IAM) para limitar o acesso de chamadas de API ao Console de Gerenciamento da AWS.
Breve descrição
Use 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