it-swarm.asia

Amazon API Gateway di depan ELB dan ECS Cluster

Saya mencoba meletakkan Amazon API Gateway di depan Application Load Balancer, yang menyeimbangkan lalu lintas ke ECS Cluster saya, tempat semua layanan microser saya digunakan. Motivasi untuk menggunakan API Gateway adalah menggunakan otorizer khusus melalui fungsi lambda.

Diagram sistem

 enter image description here

Dalam kata-kata Amazon ( https://aws.Amazon.com/api-gateway/faqs/ ): "Permintaan proxy untuk operasi backend juga harus dapat diakses secara publik di Internet". Ini memaksa saya untuk membuat ELB menjadi publik (menghadap ke internet) alih-alih internal. Lalu, saya perlu cara untuk memastikan bahwa only API Gateway dapat mengakses ELB di luar VPC.

Gagasan pertama saya adalah menggunakan Sertifikat Klien di API Gatway, tetapi ELB tampaknya tidak mendukungnya.

Setiap ide akan sangat dihargai!

Ini tampaknya menjadi bagian yang hilang besar untuk teknologi gateway API, mengingat cara itu didorong. Tidak dapat menelepon ke server yang menghadap ke internal di VPC sangat membatasi kegunaannya sebagai pintu depan otentikasi untuk akses internet .. FWIW, di Azure, Manajemen API mendukung ini di luar kotak - ia dapat menerima permintaan dari internet dan panggil langsung ke jaringan virtual Anda yang jika tidak dipadamkan . Satu-satunya cara ini tampaknya mungkin di bawah AWS adalah menggunakan Lambdas, yang menambahkan lapisan kompleksitas yang signifikan, esp. jika Anda perlu mendukung berbagai protokol biner.

7
Dylan Nicholson
4
Dylan Nicholson

Saat ini tidak ada untuk menempatkan API Gateway di depan ELB pribadi, jadi Anda benar bahwa itu harus berhadapan dengan internet. Solusi terbaik untuk kasus Anda yang dapat saya pikirkan adalah dengan memasukkan ELB ke mode pass TCP dan mengakhiri sertifikat klien pada host akhir Anda di belakang ELB. 

1

Kami memutuskan untuk menggunakan tajuk untuk memastikan semua lalu lintas masuk melalui API Gateway. Kami menyimpan rahasia di variabel lingkungan aplikasi kami dan memberi tahu Gateway API untuk menyuntikkan itu ketika kami membuat API. Kemudian periksa kunci itu di aplikasi kami.

Inilah yang kami lakukan untuk ini:

Di pengontrol dasar kami, kami memeriksa kunci (kami hanya memiliki API REST di belakang gateway):

string ApiGatewayPassthroughHeader = context.HttpContext.Request.Headers["ApiGatewayPassthroughHeader"];

if (ApiGatewayPassthroughHeader != Environment.GetEnvironmentVariable("ApiGatewayPassthroughHeader"))
{
    throw new error;
}

Dalam file swagger kami (kami menggunakan swagger.json sebagai sumber API kami)

"x-Amazon-apigateway-integration": {
    "type": "http_proxy",
    "uri": "https://${stageVariables.url}/path/to/resource",
    "httpMethod": "post",
    "requestParameters": {
      "integration.request.header.ApiGatewayPassthroughHeader": "${ApiGatewayPassthroughHeader}"
    }
  },

Dalam file penulisan buruh pelabuhan kami (kami menggunakan buruh pelabuhan, tetapi hal yang sama dapat digunakan dalam file pengaturan apa pun)

services:
  example:
      environment:
        - ApiGatewayPassthroughHeader=9708cc2d-2d42-example-8526-4586b1bcc74d

Pada saat membangun kami mengambil rahasia dari file pengaturan kami dan menggantinya di file swagger.json. Dengan cara ini kita bisa memutar kunci dalam file pengaturan kita dan gateway API akan memperbarui untuk menggunakan kunci yang dicari aplikasi.

1
Cale

Mungkin saja jika Anda menggunakan VPC Link dan Network Load Balancer.

Silakan lihat di pos ini: https://adrianhesketh.com/2017/12/15/aws-api-gateway-to-ecs-via-vpc-link/

TL; DR

  1. Buat Network Load Balancer internal yang terhubung ke grup target Anda (Instance dalam VPC)
  2. Di konsol API Gateway, buat Tautan VPC dan tautkan ke NLB di atas
  3. Buat titik akhir API Gateway, pilih "Integrasi VPC Link" dan tentukan URL internal NLB Anda sebagai "URL Endpoint"

Semoga itu bisa membantu!

0
user7455457

Sekarang dimungkinkan untuk menambahkan otorizer langsung ke Application Load Balancer (ALB) di depan ECS.

Ini dapat dikonfigurasi secara langsung dalam aturan pendengar. Lihat posting blog ini untuk detail:

https://aws.Amazon.com/de/blogs/aws/built-in-authentication-in-alb/

0
Erik P