AWS API Gateway, geliştiricilerin büyük ölçekli API'ler oluşturmasına, yayınlamasına ve denetlemesine olanak tanıyan Amazon Web Services (AWS) tarafından sunulan kapsamlı bir hizmettir. Uygulamaya giriş noktası olarak işlev görür ve geliştiricilerin bir dizi kural ve prosedür belirlemesine izin verir. Bu çerçeve, dış kullanıcıların uygulama içindeki belirli verilere veya işlevlere erişimini yönetir.
API Gateway, API'lerinize gelen isteklerin nasıl işleneceğini tanımlamanıza olanak tanır ve belirli yöntemler (örneğin, GET, POST, PUT, DELETE) ve kaynaklarla özel API uç noktaları oluşturabilir. Ayrıca, geliştiricilerin uygulamalarından API'lerinizi çağırmasını kolaylaştırmak için istemci SDK'ları (Yazılım Geliştirme Kitleri) oluşturabilir.
API Gateway Türleri
HTTP API: OIDC ve OAuth2 gibi yerleşik özellikler ve yerel CORS desteği ile düşük gecikmeli ve maliyet etkin REST API'leri oluşturun. Aşağıdakilerle çalışır: Lambda, HTTP arka uçları.
WebSocket API: Sohbet uygulamaları veya panolar gibi gerçek zamanlı kullanım durumları için kalıcı bağlantılar kullanarak bir WebSocket API'si oluşturun. Aşağıdakilerle çalışır: Lambda, HTTP, AWS Hizmetleri.
REST API: İstek ve yanıt üzerinde tam kontrol elde ettiğiniz ve API yönetim yeteneklerine sahip bir REST API geliştirin. Aşağıdakilerle çalışır: Lambda, HTTP, AWS Hizmetleri.
Özel REST API: Sadece bir VPC içinden erişilebilen bir REST API oluşturun.
API Gateway Ana Bileşenleri
Kaynaklar: API Gateway'de kaynaklar, API'nizin yapısını oluşturan bileşenlerdir. API'nizin farklı yollarını veya uç noktalarını temsil eder ve API'nizin desteklediği çeşitli eylemlerle ilişkilidir. Bir kaynak, her yolun (/, veya /users, veya /user/{id}) içindeki her yöntemdir (örneğin, GET, POST, PUT, DELETE).
Aşamalar: API Gateway'deki aşamalar, API'nizin farklı sürümlerini veya ortamlarını temsil eder, örneğin geliştirme, test veya üretim. Aşamaları, API'nizin birden fazla sürümünü aynı anda yönetmek ve dağıtmak için kullanabilirsiniz, bu da yeni özellikleri veya hata düzeltmelerini üretim ortamını etkilemeden test etmenizi sağlar. Aşamalar ayrıca, mevcut aşamaya göre API'nizin davranışını yapılandırmak için kullanılabilecek anahtar-değer çiftleri olan aşama değişkenlerini de destekler. Örneğin, aşama değişkenlerini kullanarak API isteklerini aşamaya bağlı olarak farklı Lambda işlevlerine veya diğer arka uç hizmetlerine yönlendirebilirsiniz.
Aşama, API Gateway uç noktasının URL'sinin başında belirtilir.
Yetkilendiriciler: API Gateway'deki yetkilendiriciler, isteğin devam etmesine izin vermeden önce çağrının kimliğini doğrulayarak API'nize erişimi kontrol etmekten sorumludur. Kendi kimlik doğrulama ve yetkilendirme mantığınızı uygulamanıza olanak tanıyan özel yetkilendiriciler olarak AWS Lambda işlevlerini kullanabilirsiniz. Bir istek geldiğinde, API Gateway isteğin yetkilendirme jetonunu Lambda yetkilendiricisine iletir, bu da jetonu işler ve çağrının hangi eylemleri gerçekleştirmesine izin verildiğini belirleyen bir IAM politikası döner. API Gateway ayrıca, AWS Kimlik ve Erişim Yönetimi (IAM) ve Amazon Cognito gibi yerleşik yetkilendiricileri de destekler.
Kaynak Politikası: API Gateway'deki bir kaynak politikası, API'nize erişim izinlerini tanımlayan bir JSON belgesidir. IAM politikasına benzer, ancak özellikle API Gateway için özelleştirilmiştir. Bir kaynak politikasını, API'nize kimin erişebileceğini, hangi yöntemleri çağırabileceklerini ve hangi IP adreslerinden veya VPC'lerden bağlanabileceklerini kontrol etmek için kullanabilirsiniz. Kaynak politikaları, API'niz için ince ayar erişim kontrolü sağlamak amacıyla yetkilendiricilerle birleştirilebilir.
Kaynak politikası değiştirildikten sonra API'nin tekrar dağıtılması gerekir.
Günlükleme
Varsayılan olarak, CloudWatch Günlüklerikapalıdır, Erişim Günlüğükapalıdır ve X-Ray izleme de kapalıdır.
Sayım
Her iki AWS apisinde kaynakları saymak için (apigateway ve apigatewayv2) ihtiyacınız olan tek izin ve verilebilecek tek okuma izni apigateway:GET'dir, bununla her şeyi sayabilirsiniz.
# Generic infoawsapigatewayget-accountawsapigatewayget-domain-namesawsapigatewayget-usage-plansawsapigatewayget-vpc-linksawsapigatewayget-client-certificates# Enumerate APIsawsapigatewayget-rest-apis# This will also show the resource policy (if any)## Get stagesawsapigatewayget-stages--rest-api-id<id>## Get resourcesawsapigatewayget-resources--rest-api-id<id>## Get API resource action per HTTP verb (check authorizers and api key required)awsapigatewayget-method--http-methodGET--rest-api-id<api-id>--resource-id<resource-id>## Call APIhttps://<api-id>.execute-api.<region>.amazonaws.com/<stage>/<resource>## API authorizersawsapigatewayget-authorizers--rest-api-id<id>## Modelsawsapigatewayget-models--rest-api-id<id>## More infoawsapigatewayget-gateway-responses--rest-api-id<id>awsapigatewayget-request-validators--rest-api-id<id>awsapigatewayget-deployments--rest-api-id<id># Get api keys generatedawsapigatewayget-api-keys--include-valueawsapigatewayget-api-key--api-key<id>--include-value# Get just 1## Example use API keycurl-XGET-H"x-api-key: AJE&Ygenu4[..]"https://e83uuftdi8.execute-api.us-east-1.amazonaws.com/dev/test## Usage plansawsapigatewayget-usage-plans#Get limit use infoawsapigatewayget-usage-plan-keys--usage-plan-id<plan_id>#Get clear text values of api keysawsapigatewayget-usage-plan-key--usage-plan-id<plan_id>--key-id<key_id>###Already consumedawsapigatewayget-usage--usage-plan-id<plan_id>--start-date2023-07-01--end-date2023-07-12
# Generic infoawsapigatewayv2get-domain-namesawsapigatewayv2get-domain-name--domain-name<name>awsapigatewayv2get-vpc-links# Enumerate APIsawsapigatewayv2get-apis# This will also show the resource policy (if any)awsapigatewayv2get-api--api-id<id>## Get all the info from an api at onceawsapigatewayv2export-api--api-id<id>--output-typeYAML--specificationOAS30/tmp/api.yaml## Get stagesawsapigatewayv2get-stages--api-id<id>## Get routesawsapigatewayv2get-routes--api-id<id>awsapigatewayv2get-route--api-id<id>--route-id<route-id>## Get deploymentsawsapigatewayv2get-deployments--api-id<id>awsapigatewayv2get-deployment--api-id<id>--deployment-id<dep-id>## Get integrationsawsapigatewayv2get-integrations--api-id<id>## Get authorizersawsapigatewayv2get-authorizers--api-id<id>awsapigatewayv2get-authorizer--api-id<id>--authorizer-id<uth-id>## Get domain mappingsawsapigatewayv2get-api-mappings--api-id<id>--domain-name<dom-name>awsapigatewayv2get-api-mapping--api-id<id>--api-mapping-id<map-id>--domain-name<dom-name>## Get modelsawsapigatewayv2get-models--api-id<id>## Call APIhttps://<api-id>.execute-api.<region>.amazonaws.com/<stage>/<resource>
API Gateway uç noktalarına erişim için Farklı Yetkilendirmeler
Kaynak Politikası
API uç noktalarını kimin çağırabileceğini tanımlamak için kaynak politikaları kullanmak mümkündür.
Aşağıdaki örnekte belirtilen IP'nin/resource_policy uç noktasını GET ile çağırmasının mümkün olmadığı görülmektedir.
IAM Yetkilendirici
Bir yol (kaynak) içindeki bir metodun çağrılması için IAM kimlik doğrulaması gerektirecek şekilde ayarlanması mümkündür.
Bu ayar yapıldığında, herhangi bir yetkilendirme olmadan uç noktaya ulaşmaya çalıştığınızda {"message":"Missing Authentication Token"} hatasını alırsınız.
Uygulamanın beklediği token'ı oluşturmanın kolay bir yolu curl kullanmaktır.
Not edin ki diğer durumlarda Authorizerkötü kodlanmış olabilir ve Authorization header içine herhangi bir şey göndermek gizli içeriği görmeyeizin verebilir.
Verilen bir token'a dayalı bir lambda kullanarak, kullanıcının API uç noktasını çağırma yetkisine sahip olup olmadığını belirten bir IAM politikasıdöndürebilirsiniz.
Yetkilendiriciyi kullanacak her kaynak yöntemini ayarlayabilirsiniz.
</details>
Bunu şöyle çağırabilirsiniz:
<pre class="language-bash" data-overflow="wrap"><code class="lang-bash"><strong>curl "https://jhhqafgh6f.execute-api.eu-west-1.amazonaws.com/prod/custom_auth" -H 'Authorization: your-secret-token'
</strong></code></pre>
<div data-gb-custom-block data-tag="hint" data-style='warning'>
Lambda koduna bağlı olarak, bu yetkilendirme zayıf olabilir
</div>
Eğer bir **reddetme politikası oluşturulup döndürülürse**, API Gateway tarafından döndürülen hata şudur: `{"Message":"User is not authorized to access this resource with an explicit deny"}`
Bu şekilde **bu yetkilendirmenin** mevcut olduğunu **belirleyebilirsiniz**.
### Gerekli API Anahtarı
API'ye erişmek için **geçerli bir API anahtarı** gerektiren API uç noktaları ayarlamak mümkündür.
<figure><img src="../../../.gitbook/assets/image (88).png" alt=""><figcaption></figcaption></figure>
API Gateway portalında API anahtarları oluşturmak ve bunların ne kadar kullanılabileceğini (saniye başına istek ve ayda istek açısından) ayarlamak mümkündür.
Bir API anahtarının çalışması için, onu bir **Kullanım Planı**'na eklemeniz gerekir, bu kullanım planı **API Aşamasına** eklenmeli ve ilişkili API aşamasının **API anahtarını** gerektiren **uç noktaya** yapılandırılmış bir **metot sınırlaması** olması gerekir:
<figure><img src="../../../.gitbook/assets/image (198).png" alt=""><figcaption></figcaption></figure>
## Kimlik Doğrulaması Olmayan Erişim
<div data-gb-custom-block data-tag="content-ref" data-url='../aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md'>
[aws-api-gateway-unauthenticated-enum.md](../aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md)
</div>
## Privesc
<div data-gb-custom-block data-tag="content-ref" data-url='../aws-privilege-escalation/aws-apigateway-privesc.md'>
[aws-apigateway-privesc.md](../aws-privilege-escalation/aws-apigateway-privesc.md)
</div>
## Post Exploitation
<div data-gb-custom-block data-tag="content-ref" data-url='../aws-post-exploitation/aws-api-gateway-post-exploitation.md'>
[aws-api-gateway-post-exploitation.md](../aws-post-exploitation/aws-api-gateway-post-exploitation.md)
</div>
## Süreklilik
<div data-gb-custom-block data-tag="content-ref" data-url='../aws-persistence/aws-api-gateway-persistence.md'>
[aws-api-gateway-persistence.md](../aws-persistence/aws-api-gateway-persistence.md)
</div>
<div data-gb-custom-block data-tag="hint" data-style='success'>
AWS Hacking'i öğrenin ve pratik yapın:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter**'da **bizi takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
</div>