Kubelet Authentication & Authorization

htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahraman olmak için AWS hackleme öğrenin!

HackTricks'i desteklemenin diğer yolları:

Kubelet Kimlik Doğrulama

Dokümantasyondan:

Varsayılan olarak, diğer yapılandırılmış kimlik doğrulama yöntemleri tarafından reddedilmeyen kubelet'in HTTPS uç noktasına yapılan istekler, anonim istekler olarak kabul edilir ve system:anonymous kullanıcı adı ve system:unauthenticated grubu verilir.

3 kimlik doğrulama yöntemi şunlardır:

  • Anonim (varsayılan): Parametreyi --anonymous-auth=true olarak ayarlayın veya yapılandırmayı kullanın:

"authentication": {
"anonymous": {
"enabled": true
},
  • Webhook: Bu, kubectl API taşıyıcı belirteçlerini yetkilendirme olarak etkinleştirecektir (herhangi bir geçerli belirteç geçerli olacaktır). Aşağıdaki adımları izleyerek bunu etkinleştirin:

  • API sunucusunda authentication.k8s.io/v1beta1 API grubunun etkin olduğundan emin olun

  • kubelet'i --authentication-token-webhook ve --kubeconfig bayraklarıyla başlatın veya aşağıdaki ayarı kullanın:

"authentication": {
"webhook": {
"cacheTTL": "2m0s",
"enabled": true
},

Kubelet, yapılandırılmış API sunucusuna TokenReview API'sini çağırarak taşıyıcı belirteçlerden kullanıcı bilgilerini belirler.

  • X509 istemci sertifikaları: X509 istemci sertifikaları aracılığıyla kimlik doğrulamasına izin verir.

  • Daha fazla ayrıntı için apiserver kimlik doğrulama belgelerine bakın.

  • Kubelet'i --client-ca-file bayrağıyla başlatın ve istemci sertifikalarını doğrulamak için bir CA paketi sağlayın. Veya yapılandırmayla:

"authentication": {
"x509": {
"clientCAFile": "/etc/kubernetes/pki/ca.crt"
}
}

Kubelet Yetkilendirme

Başarılı bir şekilde kimlik doğrulanan herhangi bir istek (anonim bir istek dahil) ardından yetkilendirilir. Varsayılan yetkilendirme modu AlwaysAllow'dur ve tüm isteklere izin verir.

Ancak, diğer olası değer webhook (genellikle orada bulabileceğiniz değerdir). Bu mod, bir eyleme izin vermek veya izin vermemek için kimlik doğrulanmış kullanıcının izinlerini kontrol eder.

Unutmayın ki, anonim kimlik doğrulama etkin olsa bile, anonim erişimin herhangi bir eylem gerçekleştirmek için herhangi bir izni olmayabilir.

Webhook aracılığıyla yetkilendirme, --authorization-mode=Webhook parametresi kullanılarak veya yapılandırma dosyası aracılığıyla yapılandırılabilir:

"authorization": {
"mode": "Webhook",
"webhook": {
"cacheAuthorizedTTL": "5m0s",
"cacheUnauthorizedTTL": "30s"
}
},

kubelet, her isteği yetkilendirip yetkilendirmediğini belirlemek için yapılandırılmış API sunucusunda SubjectAccessReview API'sini çağırır.

Kubelet, apiserver ile aynı istek öznitelikleri yaklaşımını kullanarak API isteklerini yetkilendirir:

  • Eylem

  • Kubelet API'sine yönelik kaynak, her zaman nodes ve alt kaynak, gelen isteğin yolundan belirlenir:

Örneğin, aşağıdaki istek, izin olmadan kubelet'in pod bilgilerine erişmeye çalıştı:

curl -k --header "Authorization: Bearer ${TOKEN}" 'https://172.31.28.172:10250/pods'
Forbidden (user=system:node:ip-172-31-28-172.ec2.internal, verb=get, resource=nodes, subresource=proxy)
  • Yasaklandı hatası aldık, bu yüzden istek Kimlik Doğrulama kontrolünü geçti. Aksi takdirde, sadece bir Yetkisiz mesajı alırdık.

  • Kullanıcı adını (bu durumda belirteçten) görebiliriz.

  • Kaynağın düğümler olduğunu ve alt kaynağın proxy olduğunu kontrol edin (bu önceki bilgilerle uyumlu).

Referanslar

htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahraman olmak için AWS hackleme öğrenin!

HackTricks'i desteklemenin diğer yolları:

Last updated