Blog AWS Indonesia

Jaringan Hybrid menggunakan VPC Endpoints (AWS PrivateLink) dan Amazon CloudWatch untuk Layanan Keuangan

Amazon CloudWatch menawarkan layanan terpusat untuk mengumpulkan data pemantauan dan operasional dalam bentuk log, metrik, dan event. Hal ini memberikan tampilan terpadu tentang sumber daya, aplikasi, dan layanan AWS yang berjalan di AWS dan server on-premise. Saat Anda memiliki agen Amazon CloudWatch yang berjalan di lokasi, perilaku default-nya adalah mengekspor metrik yang dikumpulkan ke publik endpoint CloudWatch yang dapat dijangkau melalui internet atau Direct Connect Public VIF. Ini menghadirkan tantangan bagi banyak perusahaan yang terikat oleh kebijakan kepatuhan mereka untuk memiliki konektivitas privat ke layanan AWS. Hal ini sangat penting khususnya bagi pelanggan di industri jasa keuangan yang memegang data-data sensitif. Dengan AWS PrivateLink, Anda dapat mencegah data sensitif Anda melintasi Internet dan menjaga kepatuhan terhadap peraturan seperti HIPAA, EU/US Privacy Shield, dan PCI. Anda dapat memanfaatkan VPC Interface endpoint, yang dibangun di atas AWS PrivateLink, untuk memperluas konektivitas privat hingga ke jaringan on-premise Anda menggunakan Direct Connect Private VIF atau VPN. Lalu lintas Anda tidak terekspos ke internet, menghilangkan potensi ancaman penting.

Postingan blog ini menunjukkan bagaimana Anda dapat menggunakan VPC Endpoint untuk mengekspor metrik dari agen CloudWatch yang berjalan di server on-premise ke Amazon CloudWatch melalui koneksi privat. Kami juga akan mengamankan endpoint menggunakan security-group dan endpoint policy. Mari kita mulai…

Prasyarat

Gambaran Solusi

Arsitektur Jaringan Hybrid VPC Endpoints dan Amazon CloudWatch

Panduan

Untuk menerapkan solusi ini, Anda harus menyelesaikan langkah-langkah berikut yang telah saya berikan panduan langkah demi langkahnya sebagai berikut:

  1. Membuat CloudWatch Interface endpoint dari konsol AWS VPC di region us-east-1
  2. Memverifikasi konektivitas jaringan privat antara AWS dan on-premise menggunakan DX/VPN
  3. Siapkan Route53 resolver inbound endpoint untuk menyelesaikan query DNS dari on-premise
  4. Atur VPC Interface endpoint dengan endpoint policy, security-group, dan Network ACL pada endpoint ENI
  5. Memverifikasi metrik tingkat sistem yang dikirimkan ke CloudWatch menggunakan VPC endpoint

Membuat VPC Interface Endpoint untuk layanan CloudWatch Monitoring

Buka konsol Amazon VPC dan navigasikan ke Endpoints dan pilih Create endpoint.

Pilih AWS services dan cari “com.amazonaws.us-east-1.monitoring”

Pilih VPC tempat Anda ingin membuat endpoint dan secara opsional Anda juga dapat menambahkan tag.

Memilih VPC

Setelah Anda memilih VPC, lanjutkan dengan memilih subnet tempat Anda ingin endpoint ENI tersebut dibuat. Sebagai praktik terbaik, Anda harus selalu memilih beberapa subnet untuk mencapai high availability.

Memilih Subnet

Centang untuk ‘Enable DNS name’. Fitur ini mengaitkan sebuah private hosted zone yang berisi DNS record set dengan VPC yang Anda tentukan. Ini memungkinkan Anda memanfaatkan konektivitas jaringan privat milik Amazon untuk menjangkau layanan tersebut. Anda dapat melakukannya meskipun Anda membuat permintaan melalui nama DNS public endpoint layanan tersebut.

Terakhir, lampirkan security-group untuk ENI endpoint. Anda juga dapat membuat security-group baru untuk membatasi akses berdasarkan kebutuhan Anda. Pada bagian selanjutnya, saya akan menyesuaikan security-group untuk memungkinkan akses dari subnet on-premise.

Security Group

Periksa dan verifikasi entri DNS dan ENI yang dibuat untuk endpoints. Karena saya telah memilih ‘Enable DNS name’ saat membuat endpoint, sistem telah membuat dan mengaitkan sebuah private hosted zone dengan VPC yang ditentukan. Anda dapat mengetahui entri DNS untuk Interface endpoint Anda dengan memilih VPC endpoint di konsol VPC atau menggunakan perintah CLI di bawah ini. Setelah ini, Anda cukup menjalankan nslookup pada entri DNS monitoring.us-east-1.amazonaws.com atau kustom DNS entri untuk endpoint dari instans EC2.

aws ec2 describe-vpc-endpoints --filter Name=vpc-endpoint-id,Values=vpce-123456789abcdef --query 'VpcEndpoints[*].{DNS:DnsEntries[*].DnsName}' --output text

DNS	vpce-0123456789abcdef-nk86lk5o.monitoring.us-east-1.vpce.amazonaws.com
DNS	vpce-0123456789abcdef-nk86lk5o-us-east-1b.monitoring.us-east-1.vpce.amazonaws.com
DNS	vpce-0123456789abcdef-nk86lk5o-us-east-1c.monitoring.us-east-1.vpce.amazonaws.com
DNS	vpce-0123456789abcdef-nk86lk5o-us-east-1d.monitoring.us-east-1.vpce.amazonaws.com
DNS	vpce-0123456789abcdef-nk86lk5o-us-east-1e.monitoring.us-east-1.vpce.amazonaws.com
DNS	vpce-0123456789abcdef-nk86lk5o-us-east-1f.monitoring.us-east-1.vpce.amazonaws.com
DNS	vpce-0123456789abcdef-nk86lk5o-us-east-1a.monitoring.us-east-1.vpce.amazonaws.com
DNS	monitoring.us-east-1.amazonaws.com

[ec2-user@ip-10-100-0-37 ~]$ nslookup monitoring.us-east-1.amazonaws.com
...
Non-authoritative answer:
Name:	monitoring.us-east-1.amazonaws.com
Address: 10.100.4.146
Name:	monitoring.us-east-1.amazonaws.com
Address: 10.100.5.39
Name:	monitoring.us-east-1.amazonaws.com
Address: 10.100.0.101
Name:	monitoring.us-east-1.amazonaws.com
Address: 10.100.1.6
Name:	monitoring.us-east-1.amazonaws.com
Address: 10.100.2.241
Name:	monitoring.us-east-1.amazonaws.com
Address: 10.100.3.194

Perhatikan bahwa nama DNS privat (monitoring.us-east-1.amazonaws.com) sudah tercantum dalam perintah di atas. Anda akan memerlukan ini saat menyiapkan conditional forwarding pada DNS  resolver on-premise Anda. Merupakan suatu praktik terbaik untuk membuat aturan conditional forwarding yang sangat spesifik karena Anda mungkin menginginkan layanan AWS lainnya melalui akses publik.

Jika Anda ingin mengatur CloudWatch VPC endpoint menggunakan CloudFormation untuk tujuan otomatisasi, Anda juga dapat memanfaatkan templat CloudFormation di bawah ini. Templat CloudFormation membuat CloudWatch Monitoring VPC endpoint dan menerapkan security-group pada endpoint ENI. Dengan demikian, hal tersebut membatasi penggunaan hanya untuk subnet jaringan yang Anda tentukan dan menerapkan endpoint policy yang selanjutnya membatasi penggunaan endpoint hanya untuk VPC tertentu saja.

AWSTemplateFormatVersion: '2010-09-09'
Description: 'CloudWatch Monitoring VPCEndpoint'
Metadata:
  'AWS::CloudFormation::Interface':
    ParameterGroups:
    - Label:
        default: 'VPC Parameters'
      Parameters:
      - VPC
      - OnPremiseNet
      - PrivateSubnets

Parameters:
  VPC:
    Description: 'VPC'
    Type: 'AWS::EC2::VPC::Id'

  OnPremiseNet:
    Description: 'Please enter the IP range (CIDR notation) for OnPremise-Net'
    Type: String

  PrivateSubnets:
    Description: 'Select the subnets for Interface Endpoint ENIs'
    Type: 'List'

Resources:
  SecurityGroup:
    Type: 'AWS::EC2::SecurityGroup'
    Properties:
      GroupDescription: !Ref 'AWS::StackName'
      GroupName: !Ref 'AWS::StackName'
      VpcId: !Ref VPC
      SecurityGroupIngress:
        - IpProtocol: tcp
          ToPort: 443
          FromPort: 443
          CidrIp: !Ref 'OnPremiseNet'

  Endpoint:
    Type: 'AWS::EC2::VPCEndpoint'
    Properties:
      PrivateDnsEnabled: true
      SecurityGroupIds: [!Ref SecurityGroup]
      ServiceName: !Sub 'com.amazonaws.${AWS::Region}.monitoring'
      SubnetIds: !Ref PrivateSubnets
      VpcEndpointType: Interface
      VpcId: !Ref VPC
      PolicyDocument: '{
        "Version":"2012-10-17",
        "Statement": [{
          "Sid": "Restrict Usage to PutMetric Action",
          "Effect": "Allow",
          "Principal": "*",
          "Action": ["cloudwatch:PutMetricData"],
          "Resource": "*"
          }]
      }'

Outputs:
  StackName:
    Description: 'Stack name.'
    Value: !Sub '${AWS::StackName}'
  Endpoint:
    Description: 'The VPC endpoint to a service.'
    Value: !Ref Endpoint
    Export:
      Name: !Sub '${AWS::StackName}-Endpoint'
  VPCEndpointDNS:

Konektivitas antara On-Premise dan AWS VPC

Di blog ini kita tidak akan membahas secara rinci tentang cara mengatur Private VIF melalui Direct Connect atau VPN. Jika Anda memerlukan bantuan dengan pengaturan DX dan VPN, silakan ikuti dokumentasi kami tentang membuat VIF melalui DX dan menyiapkan VPN. Setelah konektivitas aktif dan berjalan, pastikan Anda dapat berkomunikasi dengan sumber daya di VPC Anda. Untuk demo ini, saya menguji konektivitas dari router on-premise saya ke instans EC2 yang berjalan di VPC tempat CloudWatch VPC endpoint dibuat.

OnPremise-Router#show ip route 10.100.0.0 longer-prefixes  | i 10.100
S        10.100.0.0/24 is directly connected, Tunnel1
S        10.100.1.0/24 is directly connected, Tunnel1
S        10.100.2.0/24 is directly connected, Tunnel1
S        10.100.3.0/24 is directly connected, Tunnel1
S        10.100.4.0/24 is directly connected, Tunnel1
S        10.100.5.0/24 is directly connected, Tunnel1

OnPremise-Router#ping 10.100.0.37 source 10.200.2.203
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.100.0.37, timeout is 2 seconds:
Packet sent with a source address of 10.200.2.203
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 10/11/12 ms

Menyiapkan Route53 Resolver Inbound Endpoint

Sekarang setelah Anda memiliki penyiapan CloudWatch VPC endpoint di VPC Anda, Anda masih memerlukan cara untuk berkomunikasi dengannya dari jaringan on-premise Anda. Di sinilah kita perlu menyiapkan Route53 inbound resolver sehingga kueri DNS untuk private hosted zone yang diteruskan oleh DNS resolver on-premise dapat dilayani dengan baik. Anda perlu menyiapkan conditional forwarding pada DNS resolver on-premise Anda untuk meneruskan semua kueri tentang amazonaws.com ke alamat IP Route53 inbound endpoint. Di bagian berikut, saya akan menunjukkan cara menyiapkan Route53 endpoint.

  1. Navigasikan ke konsol Route53 dan ke bagian Resolver lalu pilih Inbound endpoints.
  2. Saat Anda membuat resolver endpoint, pilih VPC yang Anda gunakan saat membuat CloudWatch VPC endpoint.
  3. Selama pembuatan resolver endpoint, Anda harus menyediakan 2 AZ/Subnet sehingga Route53 dapat mengalokasikan 1 alamat IP pada setiap subnet untuk high availability.

Karena Anda sudah memiliki pengaturan routing antara VPC dan jaringan on-premise, Anda seharusnya dapat menjangkau IP dari Route53 resolver endpoint. Anda dapat memverifikasi ini dengan menjalankan perintah dig. Jika memerlukan bantuan lebih lanjut, Anda juga dapat mengikuti blog dukungan kami yang menyediakan petunjuk langkah demi langkah tentang menyiapkan Route 53 Inbound resolver dan menguji konfigurasi Anda.

Dig (Domain Information Groper) adalah utilitas baris perintah yang melakukan pencarian DNS dengan menanyakan server nama dan menampilkan hasilnya kepada Anda.

dig @10.100.1.177 monitoring.us-east-1.amazonaws.com
.....
;; QUESTION SECTION:
;monitoring.us-east-1.amazonaws.com. IN	A

;; ANSWER SECTION:
monitoring.us-east-1.amazonaws.com. 60 IN A	10.100.2.241
monitoring.us-east-1.amazonaws.com. 60 IN A	10.100.4.146
monitoring.us-east-1.amazonaws.com. 60 IN A	10.100.0.101
monitoring.us-east-1.amazonaws.com. 60 IN A	10.100.3.194
monitoring.us-east-1.amazonaws.com. 60 IN A	10.100.5.39
monitoring.us-east-1.amazonaws.com. 60 IN A	10.100.1.6

Amankan VPC endpoint Anda

Untuk mengamankan endpoint, gunakan endpoint policy. Saya menggunakan kebijakan di bawah ini untuk membatasi akses ke VPC tempat DX dan VPN berada. Harap diperhatikan: Anda juga dapat membatasi akses ke ID akun AWS. Untuk informasi lebih lanjut tentang endpoint policy, silakan lihat: Mengontrol akses ke layanan dengan VPC endpoints

{
    "Statement": [
        {
            "Sid": "Restrict usage to my VPC",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "CloudWatch:PutMetricData"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:sourceVpc": "vpc-1234567890abcdef"
                }
            }
        }

    ]
}

Untuk lebih membatasi akses ke jaringan on-premise Anda, Anda dapat menggunakan security-group, yang diterapkan ke ENI endpoint. Dengan ini, Anda dapat memastikan bahwa hanya jaringan dan sumber daya yang diizinkan yang dapat mengakses endpoint. Dalam demo ini, saya hanya mengizinkan akses kepada 10.200.2.0/24, yang merupakan subnet on-premise saya.

Security group untuk akses on-premise

Memverifikasi bahwa Metrik Server On-premise Muncul di CloudWatch

Sebelum memeriksa konsol metrik CloudWatch, saya dengan cepat menjalankan tcpdump di salah satu server on-premise saya untuk memverifikasi bahwa agen CloudWatch mengirim data metrik ke CloudWatch VPC endpoint. Dari cuplikan tcpdump, Anda dapat melihat bahwa server mengkueri Route53 resolver endpoint (10.100.1.77) untuk monitoring.us-east-1.amazonaws.com. Route53 resolver merespons kembali dengan ‘A’ record (A 10.100.5.39, A 10.100.3.194, A 10.100.4.146, A 10.100.0.101, A 10.100.2.241, A 10.100.1.6) untuk CloudWatch VPC endpoint. Setelah resolusi DNS selesai, agen CloudWatch meneruskan data metrik ke IP privat CloudWatch VPC endpoint.

22:36:37.070714 IP ip-10-200-2-111.37364 > ip-10-100-1-177.domain: 38463+ AAAA? monitoring.us-east-1.amazonaws.com. (52)
22:36:37.070930 IP ip-10-200-2-111.55929 > ip-10-100-1-177.domain: 11267+ A? monitoring.us-east-1.amazonaws.com. (52)
22:36:37.074819 IP ip-10-100-1-177.domain > ip-10-200-2-111.37364: 38463 0/1/0 (136)
22:36:37.076165 IP ip-10-100-1-177.domain > ip-10-200-2-111.55929: 11267 6/0/0 A 10.100.5.39, A 10.100.3.194, A 10.100.4.146, A 10.100.0.101, A 10.100.2.241, A 10.100.1.6 (148)
22:36:37.076378 IP ip-10-200-2-111.41284 > ip-10-100-5-39.https: Flags [S], seq 83924387, win 26883, options [mss 8961,sackOK,TS val 111389825 ecr 0,nop,wscale 7], length 0
22:36:37.076453 IP ip-10-200-2-111.34390 > ip-10-100-1-177.domain: 54039+ PTR? 39.5.100.10.in-addr.arpa. (42)
22:36:37.078666 IP ip-10-100-1-177.domain > ip-10-200-2-111.34390: 54039 1/0/0 PTR ip-10-100-5-39. (83)
22:36:37.079026 IP ip-10-100-5-39.https > ip-10-200-2-111.41284: Flags [S.], seq 364925350, ack 83924388, win 8190, options [mss 1360,nop,wscale 6,nop,nop,sackOK], length 0
22:36:37.079036 IP ip-10-200-2-111.41284 > ip-10-100-5-39.https: Flags [.], ack 1, win 211, length 0
22:36:37.079268 IP ip-10-200-2-111.41284 > ip-10-100-5-39.https: Flags [P.], seq 1:305, ack 1, win 211, length 304
22:36:37.081659 IP ip-10-100-5-39.https > ip-10-200-2-111.41284: Flags [.], ack 305, win 252, length 0
22:36:37.081864 IP ip-10-100-5-39.https > ip-10-200-2-111.41284: Flags [.], ack 305, win 424, length 0

Akhirnya, kita dapat memeriksa CloudWatch Console untuk metrik server on-premise, di bawah bagian Custom Namespace. Anda dapat melihatnya dengan menavigasi ke konsol CloudWatch -> Metrics -> All Metrics.

Kesimpulan

Postingan blog ini mengilustrasikan bagaimana Anda dapat mengirim metrik CloudWatch secara privat dari jaringan on-premise Anda ke CloudWatch, menggunakan VPC endpoint. Ini menjelaskan bagaimana pelanggan (terutama di industri jasa keuangan) yang memiliki data-data penting dapat mengamankan VPC endpoint mereka dengan menggunakan endpoint policy dan kemudian lebih membatasi akses ke jaringan on-premise menggunakan security-group yang diterapkan pada endpoint ENI. AWS PrivateLink memberi Anda kontrol terperinci atas bagaimana aplikasi Anda terhubung ke layanan AWS tanpa perlu membangun konektivitas melalui internet publik dan tetap mematuhi kebijakan kepatuhan dan keamanan perusahaan Anda. Anda juga dapat memanfaatkan arsitektur ini untuk Layanan AWS lainnya  yang terintegrasi dengan AWS PrivateLink. Secara garis besar solusinya tetap sama.

Anda dapat mempelajari selengkapnya tentang AWS PrivateLink di halaman layanan kami di sini.

Artikel ini merupakan terjemahan dari blog yang dibuat oleh Samir Rane pada 11 November 2020 berjudul Hybrid Networking using VPC Endpoints (AWS PrivateLink) and Amazon CloudWatch for Financial Services

Tedy Tirtawidjaja

Tedy Tirtawidjaja

Tedy is the Senior Solutions Architect at Amazon Web Services (AWS). He works with enterprise customers to build solutions and capabilities that help customers as they move to the cloud. Based in Jakarta, Indonesia, Tedy has over 15 years of experience in IT & Telecommunication business from both principal side as well as end-user enterprise side.