Puncte:0

Accesarea serviciului de metadate EC2 din instanța CodeBuild

drapel vn

Rulez un container docker din AWS CodeBuild în interiorul VPC-ului meu. Pe gazdă, nu am nicio problemă să rulez aws sts get-caller-identity fără acreditări. De exemplu.:

aws sts get-caller-identity
{
    „UserId”: „[exprimat]”,
    „Cont”: „[exprimat]”,
    „Arn”: „arn:aws:sts::[redacted]:assumed-role/[redacted]”
}

Totuși, în interiorul containerului docker, primesc o eroare când încerc să îmi obțin identitatea:

% aws sts get-caller-identity
Serviciul de metadate EC2 nu a putut fi accesat.

Nu se pot localiza acreditările. Puteți configura acreditările rulând „aws configure”.

Presupun că acest lucru se datorează faptului că nu pot ajunge la serviciul de metadate EC2 pentru a obține cheile de rol, dar m-am gândit că ar trebui să „funcționeze”, deoarece containerul ar trebui să aibă acces la aceeași rețea ca și gazda.

Așa că am dat înapoi și am aruncat o altă privire la gazdă - se pare că nu pot accesa serviciul de metadate http://169.254.169.254:

# curl -kv http://169.254.169.254/latest/meta-data/public-hostname
* Încercați 169.254.169.254:80...
* TCP_NODELAY setat
* Eroare de conectare imediată pentru 169.254.169.254: Argument nevalid
* Închiderea conexiunii 0
curl: (7) Nu s-a putut conecta la server

Cum este aws sts lucrezi la gazdă? Am crezut că AWS CLI avea nevoie de acces la acel serviciu de metadate dacă nu erau furnizate acreditările. Cum îl pot face să funcționeze în interiorul containerului (nu vreau să trec jetoane cu viață lungă în variabilele de mediu)?

(editat cu detalii suplimentare găsite din explorarea direct pe SessionManager în instanța CodeBuild)

Tim avatar
drapel gp
Tim
CodeBuild se construiește în containere, nu pe EC2, deși cred că în cele din urmă containerele sunt pe EC2. Cred că nu există nicio modalitate de a obține metadatele instanței. Același lucru se întâmplă și pe RDS / Oracle, nu puteți accesa rolul instanței. O soluție este să transmiteți acreditările într-un parametru.
DrTeeth avatar
drapel vn
Problema este că, de fapt, aș avea nevoie de acreditări - inclusiv gestionarea lor, rotirea lor, trecerea lor ca variabile env etc. Rolurile de exemplu este că pot spune doar „Acest proiect CodeBuild ar trebui să aibă aceste permisiuni” și am terminat. . Și aceasta funcționează pe instanța CodeBuild, doar că nu în interiorul containerului docker generat în acea instanță - și nu sunt sigur cum se întâmplă asta - nu pare să urmărească modul în care este documentat AWS CLI. Dacă așa stau lucrurile, cum pot obține acreditările de la rol pentru a le transmite containerului?
Puncte:2
drapel vn

Cel mai bun pe care l-am găsit pentru asta până acum...

Mulțumesc pentru comentariul de la @Tim, CodeBuild rulează pe ECS. Când face asta, extrage acreditările din acreditările containerului. Acestea sunt aparent extrase de la o altă adresă IP, care poate fi accesată prin intermediul

169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

Puteți extrage acreditările de rol din acel apel și apoi le puteți transmite în containerul Docker.

Tim avatar
drapel gp
Tim
Interesant. Mă întreb dacă RDS este similar. Dacă ar fi, asta ne-ar fi spus mult timp.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.