Рубрики
Uncategorized

Продолжайте со временем: использовать AWS PrivateLink

Таблица контента Этот пост начинается с краткого объяснения AWS PrivateLink, Distild M … Помечено DevOps, AWS, облако, архитектуру.

Стол содержания

Этот пост начинается с краткого объяснения AWS PrivateLink, отгонял в основном из AWS PrivateLink Whitepaper Но ограничивается самой сущностью.

Вторая часть — это практический пример, описывающий, как настроить службу конечной точки VPC и соединение конечного точка VPC. Он включает в себя шаблон области облака со всеми необходимыми ресурсами.

Что такое AWS PrivateLink?

В двух словах AWS PrivateLink обеспечивает безопасное, частное подключение между Amazon VPCS, AWS Services и включенными приложениями в сети AWS. В результате вы можете просто и надежно получать доступ к услугам AWS с помощью частной сети Amazon.

AWS PrivateLink позволяет вам также создавать приложение в вашей Amazon VPC и предлагает это приложение в качестве службы конечной точки VPC. Служба Endpoint VPC позволяет другим получать доступ к вашему сервису с помощью AWS PrivateLink.

AWS Private Link VS VPC

AWS PrivateLink не является заменой для виргирования VPC. В некоторых случаях виргирование VPC по-прежнему лучше. С другой стороны, случаи, когда доступ ранее был установлен с использованием VPC Polying, теперь лучше использовать AWS PrivateLink.

Преимущества AWS PrivateLink

По сравнению с VPC Poling AWS PrivateLink имеет довольно некоторые преимущества:

  • PrivateLink использует частные IP-адреса для трафика : PrivateLink Traffic не проходит через Интернет. AWS PrivateLink использует частные IP-адреса и группы безопасности в пределах Amazon VPC, так что функции служб, как если бы они были размещены непосредственно в пределах Amazon VPC.
  • Безопасность : По сравнению с VPC Polying, который позволяет доступу ко всем ресурсам, AWS PrivateLink обеспечивает только доступ к конкретному обслуживанию или приложению.
  • PrivateLink поддерживает перекрытие CIDR
  • Однонаправленный доступ : Только конечные точки VPC могут инициировать соединение.
  • Упростите сетевое управление AWS PrivateLink позволяет подключаться к услугам по разным учетным записям и Amazon VPCS без необходимости модификаций таблицы маршрута. Больше не нужно настроить интернет-шлюз, VPC Playing Connection или Transit VPC для включения подключения.
  • Облегчить вашу облачную миграцию : AWS PrivateLink дает локальные сети Частный доступ к услугам AWS через AWS Direct Connect. Клиенты могут легче мигрировать традиционные предельные приложения на услуги, размещенные в облаке, и используют облачные сервисы с уверенностью, что трафик остается частным.

AWS PrivateLink Use-Case

Частный доступ к заявкам SaaS

AWS PrivateLink позволяет поставщикам программного обеспечения AS-A-Service (SaaS) для создания высокоботровных и безопасных услуг на AWS. Использование службы Endpoint VPC, поставщики услуг могут в частной собственности представить свою услугу до тысяч клиентов на AWS с легкостью.

Ранее разоблачение сервиса с использованием VPC Polying ощущается, как использовать кувалду, чтобы взломать гайку. Для меня это чувствовало так, потому что VPC Playing потенциально подвергает все ваши ресурсы вместо того, чтобы ограничить его одному сервису. Таким образом, если у вас есть услуга, которую вы хотите разоказать в частной сети AWS, используя службу конечной точки VPC, является немаловым.

Общие услуги

Общие сервисы, такие как службы безопасности, регистрации, мониторинг, инструменты DEVOPS и аутентификация, могут быть выставлены как службы Endpoint VPC. Опять же, это дает вам довольно некоторые преимущества по сравнению с VPC Polying. Кроме того, он может помочь вам преодолеть лимит VPC Playing Limit в 125 прогулков к односпальным соединениям с одной Amazon VPC.

Гибридные услуги

Балансировщик сетевой нагрузки, сидя за услугой Endpoint VPC, обеспечивает расширение архитектуры сервисной архитектуры для загрузки рабочих нагрузок баланса по ресурсам в AWS и в помещениях и позволяет легко мигрировать на облаку, отключение к облаку или отключению Облако. Когда вы завершаете миграцию в облако, в локальные цели могут быть заменены целевыми экземплярами в AWS.

Микросервисы

AWS PrivateLink VPC Endpoint Services хорошо подходит для среды микросервисов. Потребитель услуг будет запросить доступ к службе конечной точки и создать конечную точку интерфейса VPC, связанную с службой конечной точки в их службе Amazon VPC. Не гораздо больше, чтобы сказать, это просто действительно хорошо подходит для микросервисов 😄

Deep Div: в частном порядке, выставляющем ваше программное обеспечение-AS-A-Service

В последнее время требование в частном порядке разоблачить одну из наших услуг. Вместо того, чтобы выбрать VPC Polying, мы выбираем службу Endpoint VPC, чтобы выставить наш сервис на этот раз. Позвольте мне быстро направить вас через необходимые шаги, чтобы открыть ваш сервис в виде службы Endpoint VPC.

  1. Добавить сетевой балансировщик нагрузки : Создание службы EndPoint VPC требует балансировщика сети (NLB). Для выполнения этого я развернул дополнительный NLB, помимо моего существующего балансировщика нагрузки на приложение (ALB). Хотя дополнительный балансировщик нагрузки имеет небольшую затрат на голову, он также отделяет трафик и обязанности. В случае неприятностей это может помочь точно определить причину, кроме того, он также ограничивает радиус взрыва на случай, если балансировщик нагрузки не удастся.
  2. Отрегулируйте группу безопасности ваших целей : В отличие от ALB, NLB не имеет группы безопасности. Если вы знаете IP-диапазоны ваших потребителей, вы можете использовать их. Вы также можете позволить всем Частная сеть варьируется Как я делал в примере облака отчета ниже.
  3. Создайте службу конечной точки VPC и прикрепите его к NLB.

Вот как это выглядит переведено в облачность:

AWSTemplateFormatVersion: '2010-09-09'
Description: VPC Endpoint service stack.

Parameters:
  Application:
    Type: String
  VpcId:
    Type: AWS::EC2::VPC::Id
  PrivateSubnetIds:
    Type: List
  HostedZoneId:
    Description: Hosted zone id
    Type: AWS::Route53::HostedZone::Id
  HostedZoneDomainName:
    Description: Hosted zone domain name
    Type: String
  LogBucketName:
    Type: String

Resources:
  EndpointServiceNetworkLoadBalancerCert:
    Type: AWS::CertificateManager::Certificate
    Properties:
      DomainName: !Sub ${Application}.${HostedZoneDomainName}
      ValidationMethod: DNS
      DomainValidationOptions:
        - DomainName: !Ref HostedZoneDomainName
          HostedZoneId: !Ref HostedZoneId

  EndpointServiceNetworkLoadBalancer:
    Type: AWS::ElasticLoadBalancingV2::LoadBalancer
    Properties:
      Name: !Sub endpointsrv-${Application}-nlb-cfn
      Type: network
      Scheme: internal
      Subnets:
        - !Select [ 0, !Ref PrivateSubnetIds ]
        - !Select [ 1, !Ref PrivateSubnetIds ]
        - !Select [ 2, !Ref PrivateSubnetIds ]
      LoadBalancerAttributes:
        - Key: deletion_protection.enabled
          Value: "true"
        - Key: load_balancing.cross_zone.enabled
          Value: "true"
        - Key: access_logs.s3.enabled
          Value: "true"
        - Key: access_logs.s3.bucket
          Value: !Ref LogBucketName
        - Key: access_logs.s3.prefix
          Value: endpointservice-NLB
      Tags:
        - Key: Name
          Value: !Sub endpointsrv-${Application}-nlb-cfn

  EndpointServiceNetworkLoadBalancerListener:
    Type: AWS::ElasticLoadBalancingV2::Listener
    Properties:
      DefaultActions:
          - Type: forward
            TargetGroupArn: !Ref EndpointServiceTargetGroup
      LoadBalancerArn: !Ref EndpointServiceNetworkLoadBalancer
      Port: 443
      Protocol: TLS
      Certificates:
        - CertificateArn: !Ref EndpointServiceNetworkLoadBalancerCert
      SslPolicy: ELBSecurityPolicy-FS-1-2-Res-2019-08

  EndpointServiceTargetGroup:
    Type: AWS::ElasticLoadBalancingV2::TargetGroup
    Properties:
      Name: !Sub endpointsrv-${Application}-tg-cf
      Port: 80
      Protocol: TCP
      VpcId: !Ref VpcId
      HealthCheckProtocol : HTTP
      HealthCheckIntervalSeconds: 30
      HealthyThresholdCount: 3
      UnhealthyThresholdCount: 3
      TargetGroupAttributes:
        - Key: deregistration_delay.timeout_seconds
          Value: "90"
      Tags:
        - Key: Name
          Value: !Sub endpointtsrv-${Application}-tg-cf

  EndpointService:
    Type: AWS::EC2::VPCEndpointService
    Properties:
      AcceptanceRequired: True
      NetworkLoadBalancerArns:
        - !Ref EndpointServiceNetworkLoadBalancer

  EndpointServicePermissions:
    Type: AWS::EC2::VPCEndpointServicePermissions
    Properties:
      AllowedPrincipals:
        - arn:aws:iam::123456789012:root #changeme
      ServiceId: !Ref EndpointService

# Other necessary resources ##############################

  EC2AutoScalingGroup:
    Type: AWS::AutoScaling::AutoScalingGroup
    Properties:
      ...
      MaxInstanceLifetime: 1209600 # 14 days
      LaunchTemplate:
        LaunchTemplateId: !Ref Ec2ServiceLaunchTemplate
        Version: !GetAtt Ec2ServiceLaunchTemplate.LatestVersionNumber
      TargetGroupARNs:
        - !Ref EndpointServiceTargetGroup
      ...

  Ec2ServiceLaunchTemplate:
    Type: AWS::EC2::LaunchTemplate
    Properties:
      ...
      LaunchTemplateData:
        MetadataOptions:
          HttpTokens: required
        SecurityGroupIds:
            - !Ref Ec2ServiceSecurityGroup

 Ec2ServiceSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupName: !Sub ${Application}-sg-cfn
      GroupDescription: Enable HTTP and Endpoint Access
      SecurityGroupIngress:
        ...
        - CidrIp: 10.0.0.0/8
          FromPort: 80
          IpProtocol: tcp
          ToPort: 80
          Description: Allow traffic from the NLB (which has no security group and is a pass-through)
        - CidrIp: 172.16.0.0/12
          FromPort: 80
          IpProtocol: tcp
          ToPort: 80
          Description: Allow traffic from the NLB (which has no security group and is a pass-through)
        - CidrIp: 192.168.0.0/16
          FromPort: 80
          IpProtocol: tcp
          ToPort: 80
          Description: Allow traffic from the NLB (which has no security group and is a pass-through)
      VpcId: !Ref VpcId
      Tags:
        - Key: Name
          Value: !Sub ${Application}-sg-cfn

Несколько предостережений

  • Теги или не поддерживаются для облачной информации Vpcendpointservice Ресурс. 😟
  • Чтобы разрешить конечное точка VPC из другого изменения учетной записи Разрешительные права под EndPointServicePermissions Облакоформационный ресурс.
  • Облачная информация не поддерживает частные DNS-имена для службы конечной точки. Вам необходимо добавить частные DNS вручную в веб-консоли (под VPC Endpoint Service) после создания конечной точки. Это имя должно совпадать с именем домена сертификата, прикрепленным к слушателю NLB. Имя DNS также необходимо проверить с помощью TXT Records Отказ
  • Невозможно проверить службу конечной точки VPC из того же счета Отказ Вы можете проверить только службу конечной точки VPC, создав соединение конечного точка VPC в другой учетной записи.

Создайте подключение конечной точки VPC к службе конечной точки VPC (веб-консоль)

  1. В другом учетной записи создайте конечную точку VPC, используя «Найти обслуживание по имени». Укажите имя службы конечной точки и VPC для развертывания конечных точек.
  2. Принять связь В хостинге учетной записи VPC Endpoint Service Отказ
  3. Назад на учетной записи клиента, после того, как соединение принято, на конечной точке VPC выберите «Изменить частные DNS-имена» и отметьте «включить имя DNS». Убедитесь, что «Включить DNS-хосты» и «Включить поддержку DNS» устанавливаются «TRUE» для VPC.
  4. В учетной записи службы Endpoint VPC во второй раз принимайте соединение по службе конечной точки VPC. Соединение теперь готово и конечная точка достижима с использованием частного DNS-имени.

Подключение конечных точек VPC также может быть легко создано с использованием облачной информации. Смотрите пример ниже.

Бонус: Другое полезное подключение конечной точки VPC

Помимо подключений конечной точки VPC к пользовательским услугам SaaS конечной точки, следующие конечные точки VPC очень удобны или даже рекомендуются. Эти конечные точки будут препятствовать трафику другим сервисам AWS, чтобы покинуть частную сеть AWS и перейти на публичную сеть. Помимо более безопасного, это также более эффективно.

Пример облака отформации конечной точки интерфейса VPC для EC2:

  EC2VpcEndpointSG:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupName: !Sub vpc-endpoint-ec2-${EnvironmentName}-sg-cfn
      GroupDescription: Allow EC2 VPC Endpoint outbound traffic
      VpcId: !Ref VPC
      SecurityGroupIngress:
        - CidrIp: !Ref VPCCidr
          FromPort: 443
          IpProtocol: tcp
          ToPort: 443
          Description: Allow traffic from within the VPC to the EC2 Endpoint

  EC2VpcEndpoint:
    Type: AWS::EC2::VPCEndpoint
    Properties:
      VpcEndpointType: Interface
      ServiceName: !Sub com.amazonaws.${AWS::Region}.ec2
      VpcId: !Ref VPC
      SubnetIds:
        - !Ref PrivateSubnetAZA
        - !Ref PrivateSubnetAZB
        - !Ref PrivateSubnetAZC
      PrivateDnsEnabled: True
      SecurityGroupIds:
         - !Ref EC2VpcEndpointSG
      PolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Principal: '*'
            Action: '*'
            Resource: '*'

Наслаждайтесь и до следующего раза!

Использованная литература:

Оригинал: «https://dev.to/aws-builders/keep-up-with-the-times-use-aws-privatelink-1a38»