Ir para o conteúdo

Instalando Vinyl no AWS (windows)

Introdução

Este manual cobrirá vários métodos sugeridos de instalação do Vinyl na AWS usando Windows e SQL Server. Existem muitos métodos de configuração da arquitetura subjacente para hospedagem na web. Os aspectos de rede e segurança abaixo podem ser adaptados conforme necessário.

Este guia tem como objetivo principal ajudar com uma nova conta AWS em branco ou uma conta existente que possa ser adaptada para atender aos requisitos básicos.

Dois métodos gerais de uso da AWS para hospedagem do Vinyl no Windows são:

  • PaaS: ElasticBeanstalk - .NET como plataforma (com e sem alta disponibilidade)
  • IaaS: instâncias VMs Ec2 - (semelhante ao local)

Este documento se concentra no uso do ElasticBeanstalk (EB), pois é o método mais fácil na AWS para gerenciamento de longo prazo e facilidade de atualizações. Somente para Ec2, consulte nosso documento VM/no local. Além disso, este documento também se concentrará no uso do RDS (Relational Database Service) para o banco de dados.

Nota

Você pode economizar custos e aumentar a simplicidade colocando todos os objetos em Sub-redes públicas (sub-redes que estão em uma tabela de rotas onde o gateway padrão ((0.0.0.0/0)) é um gateway da Internet.) ; Negando a necessidade de um gateway NAT e um hospedar Bastion. Apenas observe que os grupos de segurança serão a única barreira ao acesso externo e você não poderá ter um IP de saída confiável do Vinyl para lista de permissões em sistemas externos. (Os gateways NAT possuem um eIP estático que será o IP de saída).

Elementos AWS

  • VPC com 4 ou mais sub-redes; Dois ou mais associados a uma tabela de rotear contendo um gateway de Internet como rotear padrão (pública) – Dois ou mais associados a uma tabela de rotear usando um gateway NAT como rotear padrão (Privado) As zonas de disponibilidade devem espelhar-se nas tabelas de rotas (ou seja: usando Público: 1a,1b - Privado: 1a,1b)
  • Certificado – Você precisará criar ou importar um certificado para usar SSL
  • IAM: Usuários, Funções*, Políticas* – Concessão de permissões de serviço
  • Grupos de segurança* – Concessão de permissões de entrada e entre servidores
  • Ec2, Bastion hospedar – Servidor Jump para servidor de aplicativos e acesso de administrador de banco de dados
  • S3 Bucket* - configurado para permitir acesso de leitura/gravação do Vinyl com a finalidade de criar e compartilhar chaves de segurança
  • Banco de dados* - Pode ser executado usando RDS ou instalado em instâncias EC2
  • Elastic Beanstalk* - Gerencia instâncias do Vinyl Ec2

*Um por instância

figura.png

Rede Básica

Exemplo de VPC:

VPC padrão: 172.31.0.0/16

Gateway NAT (opcional): Sub-rede como pública, Conectividade como pública, alocar eIP.

Sub-redes:

sub-redes.jpg

Tabela de Rota Pública:

publicroutetable.jpg

Tabela de rotas privadas:

privateroutetable.jpg

figura.png

Configuração S3 para Chaves de Criptografia de Dados

Crie um bucket S3 na região desejada; isso será usado para armazenar metadados de estado de sessão e criptografia de coluna Vinyl:

Nome de exemplo: *companyname*-vinyl-encryption-keys-*dev*

*Negar acesso público

EU SOU

Políticas

Política de acesso S3:

Crie uma nova política com este JSON, edite o recurso com o nome acima:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource":
        "arn:aws:s3:::companyname-vinyl-encryption-keys-dev/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListAllMyBuckets",
        "s3:GetBucketLocation",
        "s3:ListBucket"
    ],
    "Resource": "*"
    }
    ]
}

Nome do exemplo: *companyname*-vinyl-encryption-keys-s3-*dev*

Exemplo de descrição: Concede acesso EC2 ao bucket S3

Funções

Crie uma nova função: Type=EC2 -> Adicionar políticas:

  • <S3 Policy Above>
  • AWSElasticBeanstalkMulticontainerDocker
  • AWSElasticBeanstalkWebTier
  • AWSElasticBeanstalkWorkerTier

Nome: *companyname*-eb-*dev*

EC2

Dentro do serviço EC2, vá para cada uma das seções abaixo e crie o seguinte:

Grupos de segurança:

Crie pelo menos dois grupos, um para EC2/EB (aplicado em EB) e outro para RDS. O grupo EB será adicionado como fonte no grupo RDS, conforme visto abaixo. Eles concedem permissões ao RDP para a instância do EC2 e para a instância do EC2 acessar a instância do RDS:

Configuração do grupo de segurança
Nome: EB-DEV (Permite portas para Ec2)
PDR TCP 3389 <VPN Endpoint> VPN da empresa
PDR TCP 3389 <Yourself> PDR
PDR TCP 3389 sgr-091a912ec59ae4184 Bastião
Nome: RDS-DEV (Permite portas para RDS)
SQL TCP 1433 <VPN Endpoint> VPN da empresa
SQL TCP 1433 sgr-082d6e34327ee6b9c8 (EB-DEV)
SQL TCP 1433 <Yourself> RDS
SQL TCP 1433 sgr-091a912ec59ae4184 Bastião
Nome: Bastion (Opcional) (adicionado acima para permitir acesso a instâncias em sub-redes privadas)
SQL TCP 1433 <VPN Endpoint> VPN da empresa

Pares de Chaves:
Criar par de chaves -> <companyname-%dev%> -> PEM -> Criar

Instâncias: Crie um hospedar Bastion (Opcional)
Inicie uma instância básica do Windows 2019 para usar como um jump-host RDP se estiver usando sub-redes privadas para instâncias do Vinyl.

Crie um Banco de Dados Usando RDS

  1. Abra o serviço RDS no console AWS
  2. Escolha Grupos de sub-redes > Criar grupo de sub-redes de banco de dados > Rotule como privado ou público, dependendo se você deseja a capacidade de acesso externo (se os grupos de segurança permitirem) > Escolha sua VPC e adicione, selecione o par de zonas de disponibilidade que você usou ao configurar as sub-redes para a VPC acima > Agora selecione as duas sub-redes corretas que são o conjunto privado ou público. > Criar
  3. Escolha Criar banco de dados > Microsoft SQL Server > Escolher licença:

    • SQL Server Express Edition *(aceitável para bancos de dados pequenos com menos de 10 GB e instâncias de tamanho 'grande' ou menor.)
    • SQL Web Edition (para bancos de dados > 10 GB; para tamanhos de instância > 'grandes')
    • SQL Standard Edition (para Multi-AZ; Muito caro)
  4. Identificador de instância de banco de dados: IE: nomedaempresa-db-dev

  5. Nome de usuário mestre: Vinyl
  6. Senha mestra: Gere uma passagem aleatória forte que exclui símbolos (ou seja: zpZvLtLmRmrrE68T)
  7. Tamanho da instância: T3.Medium ou superior, dependendo da carga de trabalho (M5.Large ou > para CPU alta sustentada).
  8. Armazenamento alocado: 20 GB para começar para desenvolvimento; recomendo 200 GB ou mais para Prod devido à maior alocação de IOPS
  9. Grupo de sub-redes: Escolha aquele que você criou acima.

    • Acesso público: Sim se o grupo acima usar sub-redes públicas; caso contrário, não.
    • Grupos de segurança VPC existentes: escolha o grupo RDS criado anteriormente.

Defina os valores restantes conforme desejado (mantenha 1433 como porta DB).

Nota

Se hospedar o Vinyl com Jitterbit, o SQL Server Express não é uma opção de banco de dados compatível.

Configuração do Elastic Beanstalk (eb)

  • Nome do aplicativo: Vinyl
  • Nome do ambiente: *companyname*-app-*dev*
  • Plataforma: .NET no Windows; IIS 10 Windows 2019, plataforma mais recente
  • Carregue o pacote Vinyl .zip com o nome de arquivo '-eb' terminando. Por exemplo: vinyl-3.3.12345-win-eb.zip
  • Selecione Configurar mais opções - Role até o topo da página Selecione: Configuração personalizada Para o item abaixo, clique em Editar em cada seção e salve na seguinte ordem:

    Configuração do Elastic Beanstalk
    Capacidade: Carga balanceada; min 1/max 1 (Consulte o manual de alta disponibilidade para versões superiores);
    Tipo de instância: T3.medium ou superior (dependendo da carga);
    ID AMI: Use ID AMI padrão
    Rede: Selecione VPC criada
    Sub-redes do balanceador de carga: Selecione 2 sub-redes públicas
    Sub-redes de instância: Selecione 2 sub-redes privadas
    Sub-redes de banco de dados: não utilizadas
    Instâncias: Tamanho: 150 GB; Grupos: Grupo EB criado na seção EC2.
    Balanceador de carga: Tipo: Aplicação -> Processos; Editar padrão;
    Código HTTP: 200; Caminho /ping
    Para SSL: (Consulte Configurando HTTPS) Adicionar ouvinte - 443/HTTPS - Seu certificado - TLS-1-2-Ext-2018-06
    Segurança: <EC2 Key pair from above>; Perfil da instância IAM conforme criado acima. Deixar a função de serviço como está (gerada automaticamente)
  • Criar!

Configuração Pós-eb

O ambiente levará aproximadamente 15 a 20 minutos para subir.

Depois que o EB tiver concluído a montagem dos componentes, é normal que o status fique vermelho nesta fase, pois é necessário atualizar as propriedades padrão do ambiente do EB.

No ambiente ElasticBeanstalk: Vá para: Configuração -> Software -> Editar:

postconfig1.jpg

postconfig2.jpg

Role para baixo até Propriedades do ambiente:

Nome da propriedade Padrão Exemplo
Informações de conexão DatabaseType=SQLServer;HostName=;DatabaseName=Vinyl;UserName=vinyl;Password=password DatabaseType=SQLServer;HostName=example-db-dev.cmpgei1x4tzz.us-east-1.rds.amazonaws.com;DatabaseName=Vinyl;UserName=vinyl;Password=P@SSW**RD~!!
Criptografia de dados:S3BucketEndpoint https://{bucket}s3{-aws-region}.amazonaws.com https://companyname-vinyl-encryption-keys-dev
Criptografia de dados:S3KeyPrefix {elastic-beanstalk-environment-name} Companyname-app-Dev
  1. ConnectionInfo: Edite partes da string para corresponder ao nome de host, nome de usuário e senha do seu banco de dados.
  2. DataEncryptionKeyS3BucketEndpoint: Defina como o nome do bucket criado anteriormente.
  3. DataEncryptionKeyS3KeyPrefix: Defina como o nome do ambiente do Elastic Beanstalk.

Após a aplicação dessas etapas e a conclusão das atualizações, acesse a URL do site do Vinyl no EB. Isso acionará uma instalação ou atualização do banco de dados, se necessário.

Configurando HTTPS

Por padrão, os novos ambientes do Elastic Beanstalk não são configurados para HTTPS. Conforme observado na documentação do Vinyl, HTTPS é altamente recomendado para todos os novos ambientes do Elastic Beanstalk.

Os ambientes do Elastic Beanstalk encerram a conexão HTTPS no Elastic Load Balancer.

Nota

Para o processo abaixo, você já deve ter criado ou importado um certificado para o serviço Certificate Manager.

Configurar o Elastic Beanstalk para Aceitar Solicitações HTTPS

  1. Faça login no console Amazon Web Services
  2. Em Serviços, escolha Elastic Beanstalk
  3. Selecione o ambiente que você está atualizando
  4. Selecione Configuração no menu esquerdo
  5. Em Load Balancer escolha Editar
  6. Se não estiver presente, adicione Porta do ouvinte 443, HTTPS:

    https1.jpg

  7. Selecione o ID do certificado SSL aplicável *Para a 'política SSL'; Quanto ao Windows 2019, o TLS 1.2 deve ser usado

  8. Clique no botão Salvar e depois em Aplicar na página Load Balancer:

    https2.jpg

Aplicar Redirecionamento HTTPS e FQDN

Certifique-se de ter criado e testado uma entrada DNS CNAME para seu domínio com seu registrador ou servidores de nomes atuais antes de configurar o abaixo. O URI do ElasticBeanstalk será o valor alvo que sua entrada DNS deve usar. Também deve corresponder ao certificado SSL que você está usando.

Exemplo

  • Anfitrião/Nome: demo1.companydomain.com
  • Tipo: CNAME
  • Alvo/Valor: demo1.us-east-1.elasticbeanstalk.com
  1. No Vinyl, vá para IDE > Provedores de segurança
  2. No painel Configuração, clique no botão Mais e selecione Sites:

    moresites.png

  3. Clique duas vezes na entrada padrão

  4. Clique no botão Editar
  5. Insira seu URL FQDN com https no campo URL
  6. Marque para ativar Redirecionamento
  7. No campo Redirecionar se o cabeçalho existir, insira X-Forwarded-For:

    siteredirect.png

  8. Clique em Salvar