Graças ao comentário HBruijn , entendi por que estava recebendo o redirecionamento loop.
O tráfego do ELB sempre será HTTP, pois ele manipula o tráfego HTTPS para o usuário, mas para o servidor é HTTP, portanto, minha regra anterior resultará em um loop.
Após algumas pesquisas, descobri que o balanceador de carga encaminha alguns cabeçalhos de usuário, como X-Forwarded-Proto
. Isso pode ser usado para determinar se o cliente está usando HTTP ou HTTPS da seguinte forma:
### Force HTTPS
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Espero que o texto acima ajude alguém ao tentar forçar o HTTPS por trás do balanceador de carga do Amazon Web Services.