Grupo de segurança para uma instância aws mutável via endereço ip externo

3

Tenho um problema que tenho certeza de que outras pessoas se depararam e estou tentando encontrar a melhor solução. Pode ser um pouco longo, então, por favor, descubra comigo.

ATENÇÃO: a porta 22 é apenas uma porta de exemplo, haverá casos em que não é a porta 22 que eu estou tentando lidar.

Grupos de segurança

"server-1" has a security group "group-1"
"server-2" has a security group "group-2"
"server-1" has an elastic ip address assigned to it i.e 111.222.333.444

e

"group-2" is allowed to connect to "group-1" via port 22

Então, se eu ssh de server-2 para server-1 através do seguinte comando

ssh -iKEY.pem [email protected]

a conexão está bem, funciona como esperado.

Se, no entanto, eu tentar conectar-me por esse comando.

ssh -iKEY.pem [email protected]

Não funciona para o que suponho serem razões óbvias

Eu saí da rede aws para conectar ao server-1 e, portanto, o aws vê a conexão do server-2 como um recurso externo e não é mais um aws instância. Isso significa que não usará o grupo de segurança que diz:

"group-2" is allowed to connect to "group-1" via port 22

Problema Real

Eu quero me conectar ao server-1 através do endereço ElasticIP para que eu possa reinicializar com alegria server-1 e / ou server-2 e não precisa se preocupar que o nome da instância do aws / endereço IP foi alterado, ou seja, o nome do domínio no primeiro exemplo ssh será alterado em uma reinicialização / nova instância assumindo o controle.

Então, minha pergunta é qual é a melhor maneira de fazer isso. As opções que posso ver no momento são:

  1. Faça uma pesquisa reversa do endereço ElasticIP e conecte-se usando este nome de domínio forma server-2 para server-1 ou seja, o endereço IP elástico é 111.222.333.444 e a consulta inversa retornará

    ec2-111-222-333-444.eu-west-1.compute.amazonaws.com

    Eu não posso retransmitir para criar isso manualmente, pois também preciso saber em que zona de disponibilidade a instância está para fazer isso (eu gostaria muito de não me importar com o local).

  2. Eu diria que há uma chamada aws api que eu posso fazer para pegar o nome da instância atual que está anexado ao endereço ElasticIP. Não estou muito preocupado com o aplicativo sabendo que ele está em um servidor aws e gostaria de ficar longe da API.

  3. Use instâncias vpc dentro do aws. Dessa forma, eu sempre posso anexar o mesmo endereço IP privado ao server-1 e conectar-me a ele de maneira confiável, mesmo após uma reinicialização de qualquer servidor. No entanto, isso parece vir com muita configuração e manutenção.

  4. Eu poderia atualizar manualmente qualquer configuração que apontasse para o server-1 após a reinicialização (isso não é uma sugestão de série).

  5. Abra a server-1 porta 22 para o mundo (OBSERVAÇÃO: desejo abrir outras portas e não apenas 22) e me preocupo com o aplicativo que está fazendo a autenticação. (novamente, não é realmente uma opção sensata como se eu quisesse abrir a porta 80 para server-2 então ter que usar .htaccess ou similar para autenticar a conexão, portanto apenas movendo este problema e não realmente resolvendo-o) .

O problema que tenho com as opções 1 e 2 é que eu sempre tenho que fazer essas pesquisas, o que produz uma sobrecarga massiva em um aplicativo ou eu armazeno em cache e tenho que conviver com o fato de que se a instância de server- 1 muda, ou seja, ocorre uma reinicialização e, em seguida, há uma hora em que server-2 não será capaz de se conectar ao server-1 até que ele faça o cache das nome da instância.

A opção 3 é provavelmente a melhor solução, no entanto, é fornecida com configuração e manutenção que consome tempo e exige conhecimento extra em nossa empresa.

Alguém tem outra sugestão que funcione?

    
por Alistair Prestidge 07.01.2013 / 11:45

2 respostas

2

Dadas as suas necessidades, eu concordaria que usar um VPC é a solução mais ideal. Como parece que você fez sua pesquisa, sabe que um VPC permite um controle mais refinado sobre endereçamento de sub-rede e host. Para responder à sua pergunta, essa é a abordagem das "melhores práticas".

O que eu faria é criar duas sub-redes privadas, uma em cada AZ, e colocar uma Interface de Rede Elástica com um endereço IP privado e estático em cada sub-rede. Em seguida, você pode anexar / desconectar o ENI para a instância apropriada à vontade. Isso permite algumas coisas interessantes e funciona como hot-swap de um NIC entre servidores enquanto o tráfego ainda está fluindo através dele. Sim, há uma curva de aprendizado significativa com a configuração de um VPC, mas a desvantagem é maior segurança e flexibilidade ao usar várias instâncias do EC2 que precisam se comunicar entre si.

É importante notar que a utilização da API da AWS (como você também mencionou) também é uma solução viável para suas necessidades imediatas. Mas quanto mais você percorrer esse caminho de escrever uma solução personalizada, mais demorada será a manutenção conforme suas necessidades crescem.

    
por 09.01.2013 / 18:32
0

O método da API da AWS para pesquisar o DNS público da instância é o seguinte:

http://169.254.169.254/latest/meta-data/public-hostname

(É um ip interno da AWS, não um serviço externo.)

Mas quanto à raiz do problema, o DNS público para um Elastic IP deve estar permanentemente associado a esse Elastic IP, independentemente de reinicializações / novas instâncias para as quais ele aponta. Todo o meu DNS público Elastic IP se parece com ec2-11-22-33-44.compute-1.amazonaws.com. Por que você tem uma região no DNS público? O que isso retorna com a API acima?

    
por 06.08.2013 / 20:07