# GCP - Enum za Artifact Registry

{{#include ../../../banners/hacktricks-training.md}}

## Osnovne informacije

Google Cloud Artifact Registry je potpuno upravljana usluga koja vam omogućava da **upravljate, skladištite i obezbeđujete svoje softverske artefakte**. U suštini, to je repozitorijum za **skladištenje zavisnosti za izgradnju**, kao što su **Docker** slike, **Maven**, npm paketi i drugi tipovi artefakata. **Obično se koristi u CI/CD procesima** za skladištenje i verzionisanje artefakata proizvedenih tokom procesa razvoja softvera.

Ključne karakteristike Artifact Registry uključuju:

1. **Ujedinjeni repozitorijum**: Podržava **više tipova artefakata**, omogućavajući vam da imate jedan repozitorijum za Docker slike, jezičke pakete (kao što su Java Maven, Node.js npm) i druge tipove artefakata, omogućavajući dosledne kontrole pristupa i ujedinjeni pregled svih vaših artefakata.
2. **Potpuno upravljano**: Kao upravljana usluga, brine o osnovnoj infrastrukturi, skaliranju i bezbednosti, smanjujući troškove održavanja za korisnike.
3. **Fino podešavanje kontrole pristupa**: Integrira se sa Google Cloud-ovim upravljanjem identitetom i pristupom (IAM), omogućavajući vam da definišete ko može da pristupi, otpremi ili preuzme artefakte u vašim repozitorijumima.
4. **Geo-replikacija**: Podržava replikaciju artefakata širom više regiona, poboljšavajući brzinu preuzimanja i osiguravajući dostupnost.
5. **Integracija sa Google Cloud uslugama**: Besprekorno funkcioniše sa **drugim GCP uslugama kao što su Cloud Build, Kubernetes Engine i Compute Engine**, čineći ga pogodnim izborom za timove koji već rade unutar Google Cloud ekosistema.
6. **Bezbednost**: Nudi funkcije kao što su **skeniranje ranjivosti i analiza kontejnera** kako bi se osiguralo da su skladišteni artefakti sigurni i bez poznatih bezbednosnih problema.

### Formati i režimi

Kada kreirate novi repozitorijum, moguće je **izabrati format/tip** repozitorijuma među nekoliko kao što su Docker, Maven, npm, Python... i režim koji obično može biti jedan od ova tri:

- **Standardni repozitorijum**: Podrazumevani režim za **skladištenje vaših vlastitih artefakata** (kao što su Docker slike, Maven paketi) direktno u GCP. Siguran je, skalabilan i dobro se integriše unutar Google Cloud ekosistema.
- **Daljinski repozitorijum** (ako je dostupan): Deluje kao proxy za **keširanje artefakata iz spoljašnjih**, javnih repozitorijuma. Pomaže u sprečavanju problema sa promenama zavisnosti na višem nivou i smanjuje latenciju keširanjem često pristupanih artefakata.
- **Virtuelni repozitorijum** (ako je dostupan): Pruža **ujedinjeni interfejs za pristup više (standardnih ili daljinskih) repozitorijuma** kroz jedan krajnji tačku, pojednostavljujući konfiguraciju na klijentskoj strani i upravljanje pristupom za artefakte raspoređene širom različitih repozitorijuma.
- Za virtuelni repozitorijum biće potrebno **izabrati repozitorijume i dati im prioritet** (repo sa najvećim prioritetom će se koristiti).
- Možete **mešati daljinske i standardne** repozitorijume u **virtuelnom**, ako je **prioritet** **daljinskog** **veći** od standardnog, **paketi iz daljinskog (npr. PyPi) će se koristiti**. Ovo može dovesti do **Zbunjenosti zavisnosti.**

Napomena: u **daljinskoj verziji Dockera** moguće je dati korisničko ime i token za pristup Docker Hub-u. **Token se zatim čuva u Secret Manager-u**.

### Enkripcija

Kao što se očekuje, podrazumevano se koristi ključ koji upravlja Google, ali može se naznačiti ključ koji upravlja korisnik (CMEK).

### Politike čišćenja

- **Obriši artefakte:** Artefakti će biti **obrisani prema kriterijumima politike čišćenja**.
- **Suvo pokretanje:** (Podrazumevani) Artefakti **neće biti obrisani**. Politike čišćenja će biti evaluirane, a testni događaji brisanja poslati u Cloud Audit Logging.

### Skeniranje ranjivosti

Moguće je omogućiti **skener ranjivosti** koji će proveravati ranjivosti unutar **slika kontejnera**.

### Enumeracija
```bash
# Get repositories
gcloud artifacts repositories list
gcloud artifacts repositories describe --location <location> <repo-name>
gcloud artifacts versions list --repository=<repo-name> -location <location> --package <package-name>

# Get settings of a repository (example using python but could be other)
gcloud artifacts print-settings python --repository <repo-name> --location <location>

# Get docker images
gcloud artifacts docker images list us-central1-docker.pkg.dev/<proj-name>/<repo-name>

# Get packages (like python and others...)
gcloud artifacts packages list --repository <repo-name> --location <location>

# Get SBOMB artifacts
gcloud artifacts sbom list

# Get vulnerabilities (docker images)
gcloud artifacts vulnerabilities list us-east1-docker.pkg.dev/project123/repository123/someimage@sha256:49765698074d6d7baa82f
gcloud artifacts docker images list-vulnerabilities projects/<proj-name>/locations/<location>/scans/<scan-uuid>
```
### Eskalacija privilegija

{{#ref}}
../gcp-privilege-escalation/gcp-artifact-registry-privesc.md
{{#endref}}

### Neautentifikovani pristup

{{#ref}}
../gcp-unauthenticated-enum-and-access/gcp-artifact-registry-unauthenticated-enum.md
{{#endref}}

### Post-eksploatacija

{{#ref}}
../gcp-post-exploitation/gcp-artifact-registry-post-exploitation.md
{{#endref}}

### Postojanost

{{#ref}}
../gcp-persistence/gcp-artifact-registry-persistence.md
{{#endref}}

{{#include ../../../banners/hacktricks-training.md}}
