¿Cómo puedo usar roles de IAM para restringir a la consola de administración de AWS las llamadas a la API desde direcciones IP concretas?
Quiero restringir a direcciones IP concretas el acceso a llamadas a la API de AWS. ¿Cómo puedo usar roles de AWS Identity and Access Management (IAM) para limitar a la consola de administración de AWS el acceso a llamadas a la API?
Breve descripción
Puede utilizar la clave de condición global aws:SourceIp en el elemento de condición de una política de IAM para restringir las llamadas a la API desde direcciones IP concretas. Sin embargo, así se deniega el acceso a servicios de AWS que realizan llamadas en su nombre, como AWS CloudFormation, a menos que utilice también la condición global aws:ViaAWSService. Para obtener más información, consulte AWS: deniega acceso a AWS en función de la dirección IP de origen.
Por ejemplo, supongamos que tiene un rol de servicio de AWS que permite que AWS CloudFormation llame a Amazon Elastic Compute Cloud (Amazon EC2) con el fin de detener una instancia. La solicitud se deniega porque el servicio de destino (Amazon EC2) ve la dirección IP del servicio que llama (AWS CloudFormation) en lugar del usuario de origen. No puede pasar la dirección IP de origen a través de un servicio de llamadas al servicio de destino para su evaluación en una política de IAM.
Solución
Cree un rol de IAM con el mismo conjunto de permisos asociados que la política de IAM asociada al usuario de IAM. Así se concede permisos al usuario de IAM para asumir la API de rol sts:AssumeRole solo si la solicitud proviene de la dirección IP especificada. Esto se debe a la comprobación de la restricción aws:SourceIp, que se lleva a cabo cuando el usuario intenta asumir el rol. Cuando el usuario asume el rol de IAM, adquiere los permisos de la política de IAM asociada. Dado que la política de IAM asociada al rol no utiliza la clave de condición aws:SourceIp, se permite el acceso a servicios de AWS.
Cree la siguiente política de IAM y luego asocie esta política a un usuario de IAM con acceso programático. Esta política de IAM permite al usuario de IAM asumir el rol (AssumeRole) denominado Bob. Bob no necesita permisos adicionales. Todos los demás permisos necesarios se adquieren cuando el usuario de IAM asume satisfactoriamente el rol Bob.
Nota:
- Si se muestran errores al ejecutar comandos de Interfaz de la línea de comandos de AWS (AWS CLI), compruebe si está utilizando la versión más reciente de AWS CLI.
- Sustituya Bob por el nombre de su rol de IAM y EXAMPLEIAMACCOUNTID por el ID de su cuenta.
Ejemplo de política de usuario de IAM
Esta política de ejemplo tiene permisos para realizar llamadas a la API en los recursos de la cuenta.
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::EXAMPLEIAMACCOUNTID:role/Bob" } }
Cree el rol de IAM Bob para delegar los permisos al usuario de IAM. Siga las instrucciones de Creación de un rol de IAM (consola). También puede utilizar la API de AWS o AWS CLI.
Nota:
- Si utiliza la consola para crear el rol, modifique la política de confianza del rol como en el ejemplo de la política de confianza Bob. Si utiliza el comando create-role de AWS CLI o CreateRole de la API, puede transferir la política de la relación de confianza como valor en el parámetro update-assume-role-policy del documento.
- La solicitud debe venir del intervalo de direcciones IP especificado: 103.15.250.0/24 o 12.148.72.0/23. De lo contrario, el usuario de IAM no podrá asumir el rol ni realizar llamadas a la API.
Ejemplo de política de confianza para roles de IAM
Este ejemplo de política de confianza permite que el usuario asuma el rol si la solicitud viene del intervalo de direcciones IP 103.15.250.0/24 o 12.148.72.0/23.
Nota: Sustituya YOURIAMUSERNAME por el nombre de su usuario de 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" ] } } } ] }
Nota: Esta solución alternativa interrumpe los registros de AWS CloudTrail porque las acciones las realiza el rol de IAM que asumió el usuario, no el usuario de IAM. La llamada a la API assumeRole realizada por el usuario de IAM se guarda en registros de CloudTrail en el usuario de IAM. Todas las llamadas a la API adicionales que realice el rol de IAM se guardarán en registros de CloudTrail con el nombre del rol.
Información relacionada
Vídeos relacionados
Contenido relevante
- OFICIAL DE AWSActualizada hace 5 meses
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace 2 años