GCP - Artifact Registry Privesc

HackTricks рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ

Artifact Registry

Artifact Registry рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ:

artifactregistry.repositories.uploadArtifacts

рдЗрд╕ рдЕрдиреБрдорддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХреЛрдб рдЬреИрд╕реЗ Docker рдЫрд╡рд┐рдпрд╛рдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

# Configure docker to use gcloud to authenticate with Artifact Registry
gcloud auth configure-docker <location>-docker.pkg.dev

# tag the image to upload it
docker tag <local-img-name>:<local-tag> <location>-docker.pkg.dev/<proj-name>/<repo-name>/<img-name>:<tag>

# Upload it
docker push <location>-docker.pkg.dev/<proj-name>/<repo-name>/<img-name>:<tag>

рдпрд╣ рдЬрд╛рдВрдЪрд╛ рдЧрдпрд╛ рдХрд┐ рдПрдХ рдирдпрд╛ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдбреЙрдХрд░ рдЗрдореЗрдЬ рдЙрд╕реА рдирд╛рдо рдФрд░ рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреБрд░рд╛рдирд╛ рдЯреИрдЧ рдЦреЛ рджреЗрдЧрд╛ рдФрд░ рдЕрдЧрд▓реА рдмрд╛рд░ рдЬрдм рдЙрд╕ рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдЗрдореЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЬрд╛рдПрдЧреА рддреЛ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдЗрдореЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛрдЧреАред

рдПрдХ Python рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ

рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ (рдпрджрд┐ рдЖрдк рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕реЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕ рдЪрд░рдг рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ):

  1. рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рд╕рдВрд░рдЪрдирд╛ рд╕реЗрдЯ рдХрд░реЗрдВ:

  • рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдВ, рдЬреИрд╕реЗ, hello_world_libraryред

  • рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдЕрдВрджрд░, рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдВ, рдЬреИрд╕реЗ, hello_worldред

  • рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдЕрдВрджрд░, рдПрдХ __init__.py рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВред рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЦрд╛рд▓реА рд╣реЛ рд╕рдХрддреА рд╣реИ рдпрд╛ рдЖрдкрдХреЗ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХрдХрд░рдг рдХрд░ рд╕рдХрддреА рд╣реИред

mkdir hello_world_library
cd hello_world_library
mkdir hello_world
touch hello_world/__init__.py
  1. рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛрдб рд▓рд┐рдЦреЗрдВ:

  • hello_world рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдЕрдВрджрд░, рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ Python рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ, рдЬреИрд╕реЗ, greet.pyред

  • рдЕрдкрдиреА "Hello, World!" рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВ:

# hello_world/greet.py
def say_hello():
return "Hello, World!"
  1. рдПрдХ setup.py рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ:

  • рдЕрдкрдиреА hello_world_library рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рдЬрдбрд╝ рдореЗрдВ, рдПрдХ setup.py рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВред

  • рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЖрдкрдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд░рдЦрддреА рд╣реИ рдФрд░ Python рдХреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред

# setup.py
from setuptools import setup, find_packages

setup(
name='hello_world',
version='0.1',
packages=find_packages(),
install_requires=[
# рдЖрдкрдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЬрд┐рди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
],
)

рдЕрдм, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ:

  1. рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ:

  • рдЕрдкрдиреА hello_world_library рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рдЬрдбрд╝ рд╕реЗ, рдЪрд▓рд╛рдПрдБ:

python3 setup.py sdist bdist_wheel
  1. twine рдХреЗ рд▓рд┐рдП рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ (рдЬреЛ рдЖрдкрдХреЗ рдкреИрдХреЗрдЬ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ):

  • рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ twine рд╕реНрдерд╛рдкрд┐рдд рд╣реИ (pip install twine)ред

  • рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП gcloud рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

```sh
twine upload --username 'oauth2accesstoken' --password "$(gcloud auth print-access-token)" --repository-url https://<location>-python.pkg.dev/<project-id>/<repo-name>/ dist/*
```
  1. рдмрд┐рд▓реНрдб рдХреЛ рд╕рд╛рдл рдХрд░реЗрдВ

rm -rf dist build hello_world.egg-info

рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдкрд╛рдпрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрдкрд▓реЛрдб рдХреА рдЬрд╛рдП рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдмрдбрд╝реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ (рдпрд╛ рдпрджрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рддреЛ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд .0 рдЬреЛрдбрд╝реЗрдВ -рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрд╛рдпрдерди рдореЗрдВ рдирд╣реАрдВ-), рдпрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╣рдЯрд╛рдирд╛ рдФрд░ рдПрдХ рдирдпрд╛ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ (рдЖрд╡рд╢реНрдпрдХ artifactregistry.versions.delete):**

gcloud artifacts versions delete <version> --repository=<repo-name> --location=<location> --package=<lib-name>

artifactregistry.repositories.downloadArtifacts

рдЗрд╕ рдЕрдиреБрдорддрд┐ рдХреЗ рд╕рд╛рде рдЖрдк рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ Docker рдЫрд╡рд┐ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ:

# Configure docker to use gcloud to authenticate with Artifact Registry
gcloud auth configure-docker <location>-docker.pkg.dev

# Dowload image
docker pull <location>-docker.pkg.dev/<proj-name>/<repo-name>/<img-name>:<tag>

Download a python рд▓рд╛рдЗрдмреНрд░реЗрд░реА:

pip install <lib-name> --index-url "https://oauth2accesstoken:$(gcloud auth print-access-token)@<location>-python.pkg.dev/<project-id>/<repo-name>/simple/" --trusted-host <location>-python.pkg.dev --no-cache-dir
  • рдпрджрд┐ рдПрдХ рджреВрд░рд╕реНрде рдФрд░ рдПрдХ рдорд╛рдирдХ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЛ рдПрдХ рдЖрднрд╛рд╕реА рдореЗрдВ рдорд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдкреИрдХреЗрдЬ рджреЛрдиреЛрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? рдЗрд╕ рдкреГрд╖реНрда рдХреЛ рджреЗрдЦреЗрдВ:

artifactregistry.tags.delete, artifactregistry.versions.delete, artifactregistry.packages.delete, (artifactregistry.repositories.get, artifactregistry.tags.get, artifactregistry.tags.list)

рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕реЗ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдПрдВ, рдЬреИрд╕реЗ рдХрд┐ рдбреЙрдХрд░ рдЫрд╡рд┐рдпрд╛рдБ:

# Delete a docker image
gcloud artifacts docker images delete <location>-docker.pkg.dev/<proj-name>/<repo-name>/<img-name>:<tag>

artifactregistry.repositories.delete

рдПрдХ рдкреВрд░реНрдг рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рд╣рдЯрд╛рдПрдВ (рднрд▓реЗ рд╣реА рдЗрд╕рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рд╣реЛ):

gcloud artifacts repositories delete <repo-name> --location=<location>

artifactregistry.repositories.setIamPolicy

рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдХреЗ рдкрд╛рд╕ рдЗрд╕ рдЕрдиреБрдорддрд┐ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╣рдорд▓реЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рджреЗрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

Artifact Registry рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рдкрд┐рд╡рдЯрд┐рдВрдЧ

  • Cloud Functions

рдЬрдм рдПрдХ Cloud Function рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рддреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ Artifact Registry рдореЗрдВ рдПрдХ рдирдпрд╛ рдбреЙрдХрд░ рдЗрдореЗрдЬ рдкреБрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрдореЗрдЬ рдХреЛ рдПрдХ рдирдП рдХреЗ рд╕рд╛рде рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдФрд░ рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдЗрдореЗрдЬ (рдФрд░ cache рдЗрдореЗрдЬ) рдХреЛ рднреА рд╣рдЯрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛, рдХреНрд▓рд╛рдЙрдб рдлрд╝рдВрдХреНрд╢рди рдХрд╛рдо рдХрд░рддрд╛ рд░рд╣рд╛ред рдЗрд╕рд▓рд┐рдП, рд╢рд╛рдпрдж Race Condition рд╣рдорд▓реЗ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдмрд╛рд▓реНрдЯреА рдХреЗ рд╕рд╛рде рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рд╕рдВрдЧреНрд░рд╣реАрдд рдЗрдореЗрдЬ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдХреНрд▓рд╛рдЙрдб рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдордЭреМрддрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред

  • App Engine

рд╣рд╛рд▓рд╛рдВрдХрд┐ App Engine Artifact Registry рдХреЗ рдЕрдВрджрд░ рдбреЙрдХрд░ рдЗрдореЗрдЬ рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХрд┐ рднрд▓реЗ рд╣реА рдЖрдк рдЗрд╕ рд╕реЗрд╡рд╛ рдХреЗ рдЕрдВрджрд░ рдЗрдореЗрдЬ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ рдФрд░ App Engine рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ (рддрд╛рдХрд┐ рдПрдХ рдирдпрд╛ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдП) рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдмрд╛рд▓реНрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде Race Condition рд╣рдорд▓реЗ рдХреЛ рдХрд░рдиреЗ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреЛрдб рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

Support HackTricks

Last updated