diff --git a/.github/labeler.yml b/.github/labeler.yml
index 4985c78f22..9a56691628 100644
--- a/.github/labeler.yml
+++ b/.github/labeler.yml
@@ -42,6 +42,11 @@ provider/mongodbatlas:
- any-glob-to-any-file: "prowler/providers/mongodbatlas/**"
- any-glob-to-any-file: "tests/providers/mongodbatlas/**"
+provider/oci:
+ - changed-files:
+ - any-glob-to-any-file: "prowler/providers/oraclecloud/**"
+ - any-glob-to-any-file: "tests/providers/oraclecloud/**"
+
github_actions:
- changed-files:
- any-glob-to-any-file: ".github/workflows/*"
diff --git a/.github/workflows/build-documentation-on-pr.yml b/.github/workflows/build-documentation-on-pr.yml
deleted file mode 100644
index 068197e805..0000000000
--- a/.github/workflows/build-documentation-on-pr.yml
+++ /dev/null
@@ -1,36 +0,0 @@
-name: Prowler - Pull Request Documentation Link
-
-on:
- pull_request:
- branches:
- - 'master'
- - 'v3'
- paths:
- - 'docs/**'
- - '.github/workflows/build-documentation-on-pr.yml'
-
-env:
- PR_NUMBER: ${{ github.event.pull_request.number }}
-
-jobs:
- documentation-link:
- name: Documentation Link
- runs-on: ubuntu-latest
- steps:
- - name: Find existing documentation comment
- uses: peter-evans/find-comment@b30e6a3c0ed37e7c023ccd3f1db5c6c0b0c23aad # v4.0.0
- id: find-comment
- with:
- issue-number: ${{ env.PR_NUMBER }}
- comment-author: 'github-actions[bot]'
- body-includes: ''
-
- - name: Create or update PR comment with the Prowler Documentation URI
- uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0
- with:
- comment-id: ${{ steps.find-comment.outputs.comment-id }}
- issue-number: ${{ env.PR_NUMBER }}
- body: |
-
- You can check the documentation for this PR here -> [Prowler Documentation](https://prowler-prowler-docs--${{ env.PR_NUMBER }}.com.readthedocs.build/projects/prowler-open-source/en/${{ env.PR_NUMBER }}/)
- edit-mode: replace
diff --git a/.github/workflows/mcp-container-build-push.yml b/.github/workflows/mcp-container-build-push.yml
new file mode 100644
index 0000000000..fa4f5be578
--- /dev/null
+++ b/.github/workflows/mcp-container-build-push.yml
@@ -0,0 +1,113 @@
+name: 'MCP: Container Build and Push'
+
+on:
+ push:
+ branches:
+ - "master"
+ paths:
+ - "mcp_server/**"
+ - ".github/workflows/mcp-container-build-push.yml"
+
+ # Uncomment to test this workflow on PRs
+ # pull_request:
+ # branches:
+ # - "master"
+ # paths:
+ # - "mcp_server/**"
+ # - ".github/workflows/mcp-container-build-push.yml"
+
+ release:
+ types: [published]
+
+permissions:
+ contents: read
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+env:
+ # Tags
+ LATEST_TAG: latest
+ RELEASE_TAG: ${{ github.event.release.tag_name }}
+ STABLE_TAG: stable
+ WORKING_DIRECTORY: ./mcp_server
+
+ # Container registries
+ PROWLERCLOUD_DOCKERHUB_REPOSITORY: prowlercloud
+ PROWLERCLOUD_DOCKERHUB_IMAGE: prowler-mcp
+
+jobs:
+ setup:
+ if: github.repository == 'prowler-cloud/prowler'
+ runs-on: ubuntu-latest
+ outputs:
+ short-sha: ${{ steps.set-short-sha.outputs.short-sha }}
+ steps:
+ - name: Calculate short SHA
+ id: set-short-sha
+ run: echo "short-sha=${GITHUB_SHA::7}" >> $GITHUB_OUTPUT
+
+ container-build-push:
+ needs: setup
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+
+ - name: Login to DockerHub
+ uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
+ with:
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
+
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
+
+ - name: Build and push container (latest)
+ if: github.event_name == 'push'
+ uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0
+ with:
+ context: ${{ env.WORKING_DIRECTORY }}
+ push: true
+ tags: |
+ ${{ env.PROWLERCLOUD_DOCKERHUB_REPOSITORY }}/${{ env.PROWLERCLOUD_DOCKERHUB_IMAGE }}:${{ env.LATEST_TAG }}
+ ${{ env.PROWLERCLOUD_DOCKERHUB_REPOSITORY }}/${{ env.PROWLERCLOUD_DOCKERHUB_IMAGE }}:${{ needs.setup.outputs.short-sha }}
+ labels: |
+ org.opencontainers.image.title=Prowler MCP Server
+ org.opencontainers.image.description=Model Context Protocol server for Prowler
+ org.opencontainers.image.vendor=ProwlerPro, Inc.
+ org.opencontainers.image.source=https://github.com/${{ github.repository }}
+ org.opencontainers.image.revision=${{ github.sha }}
+ org.opencontainers.image.created=${{ github.event.head_commit.timestamp }}
+ cache-from: type=gha
+ cache-to: type=gha,mode=max
+
+ - name: Build and push container (release)
+ if: github.event_name == 'release'
+ uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0
+ with:
+ context: ${{ env.WORKING_DIRECTORY }}
+ push: true
+ tags: |
+ ${{ env.PROWLERCLOUD_DOCKERHUB_REPOSITORY }}/${{ env.PROWLERCLOUD_DOCKERHUB_IMAGE }}:${{ env.RELEASE_TAG }}
+ ${{ env.PROWLERCLOUD_DOCKERHUB_REPOSITORY }}/${{ env.PROWLERCLOUD_DOCKERHUB_IMAGE }}:${{ env.STABLE_TAG }}
+ labels: |
+ org.opencontainers.image.title=Prowler MCP Server
+ org.opencontainers.image.description=Model Context Protocol server for Prowler
+ org.opencontainers.image.vendor=ProwlerPro, Inc.
+ org.opencontainers.image.version=${{ env.RELEASE_TAG }}
+ org.opencontainers.image.source=https://github.com/${{ github.repository }}
+ org.opencontainers.image.revision=${{ github.sha }}
+ org.opencontainers.image.created=${{ github.event.release.published_at }}
+ cache-from: type=gha
+ cache-to: type=gha,mode=max
+
+ - name: Trigger deployment
+ if: github.event_name == 'push'
+ uses: peter-evans/repository-dispatch@5fc4efd1a4797ddb68ffd0714a238564e4cc0e6f # v4.0.0
+ with:
+ token: ${{ secrets.PROWLER_BOT_ACCESS_TOKEN }}
+ repository: ${{ secrets.CLOUD_DISPATCH }}
+ event-type: mcp-prowler-deployment
+ client-payload: '{"sha": "${{ github.sha }}", "short_sha": "${{ needs.setup.outputs.short-sha }}"}'
diff --git a/.github/workflows/mcp-server-build-push-containers.yml b/.github/workflows/mcp-server-build-push-containers.yml
deleted file mode 100644
index ec10caddab..0000000000
--- a/.github/workflows/mcp-server-build-push-containers.yml
+++ /dev/null
@@ -1,90 +0,0 @@
-name: MCP Server - Build and Push containers
-
-on:
- push:
- branches:
- - "master"
- paths:
- - "mcp_server/**"
- - ".github/workflows/mcp-server-build-push-containers.yml"
-
- # Uncomment the below code to test this action on PRs
- # pull_request:
- # branches:
- # - "master"
- # paths:
- # - "mcp_server/**"
- # - ".github/workflows/mcp-server-build-push-containers.yml"
-
- release:
- types: [published]
-
-env:
- # Tags
- LATEST_TAG: latest
-
- WORKING_DIRECTORY: ./mcp_server
-
- # Container Registries
- PROWLERCLOUD_DOCKERHUB_REPOSITORY: prowlercloud
- PROWLERCLOUD_DOCKERHUB_IMAGE: prowler-mcp
-
-jobs:
- repository-check:
- name: Repository check
- runs-on: ubuntu-latest
- outputs:
- is_repo: ${{ steps.repository_check.outputs.is_repo }}
- steps:
- - name: Repository check
- id: repository_check
- working-directory: /tmp
- run: |
- if [[ ${{ github.repository }} == "prowler-cloud/prowler" ]]
- then
- echo "is_repo=true" >> "${GITHUB_OUTPUT}"
- else
- echo "This action only runs for prowler-cloud/prowler"
- echo "is_repo=false" >> "${GITHUB_OUTPUT}"
- fi
-
- container-build-push:
- needs: repository-check
- if: needs.repository-check.outputs.is_repo == 'true'
- runs-on: ubuntu-latest
- defaults:
- run:
- working-directory: ${{ env.WORKING_DIRECTORY }}
-
- steps:
- - name: Checkout
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
-
- - name: Set short git commit SHA
- id: vars
- run: |
- shortSha=$(git rev-parse --short ${{ github.sha }})
- echo "SHORT_SHA=${shortSha}" >> $GITHUB_ENV
-
- - name: Login to DockerHub
- uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
- with:
- username: ${{ secrets.DOCKERHUB_USERNAME }}
- password: ${{ secrets.DOCKERHUB_TOKEN }}
-
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
-
- - name: Build and push container image (latest)
- # Comment the following line for testing
- if: github.event_name == 'push'
- uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0
- with:
- context: ${{ env.WORKING_DIRECTORY }}
- # Set push: false for testing
- push: true
- tags: |
- ${{ env.PROWLERCLOUD_DOCKERHUB_REPOSITORY }}/${{ env.PROWLERCLOUD_DOCKERHUB_IMAGE }}:${{ env.LATEST_TAG }}
- ${{ env.PROWLERCLOUD_DOCKERHUB_REPOSITORY }}/${{ env.PROWLERCLOUD_DOCKERHUB_IMAGE }}:${{ env.SHORT_SHA }}
- cache-from: type=gha
- cache-to: type=gha,mode=max
diff --git a/.github/workflows/prowler-release-preparation.yml b/.github/workflows/prowler-release-preparation.yml
index 6fc27ea0d1..7ecd937554 100644
--- a/.github/workflows/prowler-release-preparation.yml
+++ b/.github/workflows/prowler-release-preparation.yml
@@ -76,10 +76,12 @@ jobs:
UI_VERSION=$(extract_latest_version "ui/CHANGELOG.md")
API_VERSION=$(extract_latest_version "api/CHANGELOG.md")
SDK_VERSION=$(extract_latest_version "prowler/CHANGELOG.md")
+ MCP_VERSION=$(extract_latest_version "mcp_server/CHANGELOG.md")
echo "UI_VERSION=${UI_VERSION}" >> "${GITHUB_ENV}"
echo "API_VERSION=${API_VERSION}" >> "${GITHUB_ENV}"
echo "SDK_VERSION=${SDK_VERSION}" >> "${GITHUB_ENV}"
+ echo "MCP_VERSION=${MCP_VERSION}" >> "${GITHUB_ENV}"
if [ -n "$UI_VERSION" ]; then
echo "Read UI version from changelog: $UI_VERSION"
@@ -99,11 +101,18 @@ jobs:
echo "Warning: No SDK version found in prowler/CHANGELOG.md"
fi
+ if [ -n "$MCP_VERSION" ]; then
+ echo "Read MCP version from changelog: $MCP_VERSION"
+ else
+ echo "Warning: No MCP version found in mcp_server/CHANGELOG.md"
+ fi
+
echo "Prowler version: $PROWLER_VERSION"
echo "Branch name: $BRANCH_NAME"
echo "UI version: $UI_VERSION"
echo "API version: $API_VERSION"
echo "SDK version: $SDK_VERSION"
+ echo "MCP version: $MCP_VERSION"
echo "Is minor release: $([ $PATCH_VERSION -eq 0 ] && echo 'true' || echo 'false')"
else
echo "Invalid version syntax: '$PROWLER_VERSION' (must be N.N.N)" >&2
@@ -183,7 +192,26 @@ jobs:
touch "prowler_changelog.md"
fi
- # Combine changelogs in order: UI, API, SDK
+ # MCP has changes if the changelog references this Prowler version
+ # Check if the changelog contains "(Prowler X.Y.Z)" or "(Prowler UNRELEASED)"
+ if [ -f "mcp_server/CHANGELOG.md" ]; then
+ MCP_PROWLER_REF=$(grep -m 1 "^## \[.*\] (Prowler" mcp_server/CHANGELOG.md | sed -E 's/.*\(Prowler ([^)]+)\).*/\1/' | tr -d '[:space:]')
+ if [ "$MCP_PROWLER_REF" = "$PROWLER_VERSION" ] || [ "$MCP_PROWLER_REF" = "UNRELEASED" ]; then
+ echo "HAS_MCP_CHANGES=true" >> $GITHUB_ENV
+ echo "✓ MCP changes detected - Prowler reference: $MCP_PROWLER_REF (version: $MCP_VERSION)"
+ extract_changelog "mcp_server/CHANGELOG.md" "$MCP_VERSION" "mcp_changelog.md"
+ else
+ echo "HAS_MCP_CHANGES=false" >> $GITHUB_ENV
+ echo "ℹ No MCP changes for this release (Prowler reference: $MCP_PROWLER_REF, input: $PROWLER_VERSION)"
+ touch "mcp_changelog.md"
+ fi
+ else
+ echo "HAS_MCP_CHANGES=false" >> $GITHUB_ENV
+ echo "ℹ No MCP changelog found"
+ touch "mcp_changelog.md"
+ fi
+
+ # Combine changelogs in order: UI, API, SDK, MCP
> combined_changelog.md
if [ "$HAS_UI_CHANGES" = "true" ] && [ -s "ui_changelog.md" ]; then
@@ -207,6 +235,13 @@ jobs:
echo "" >> combined_changelog.md
fi
+ if [ "$HAS_MCP_CHANGES" = "true" ] && [ -s "mcp_changelog.md" ]; then
+ echo "## MCP" >> combined_changelog.md
+ echo "" >> combined_changelog.md
+ cat mcp_changelog.md >> combined_changelog.md
+ echo "" >> combined_changelog.md
+ fi
+
echo "Combined changelog preview:"
cat combined_changelog.md
@@ -367,4 +402,4 @@ jobs:
- name: Clean up temporary files
run: |
- rm -f prowler_changelog.md api_changelog.md ui_changelog.md combined_changelog.md
+ rm -f prowler_changelog.md api_changelog.md ui_changelog.md mcp_changelog.md combined_changelog.md
diff --git a/.github/workflows/pull-request-check-changelog.yml b/.github/workflows/pull-request-check-changelog.yml
index 47dda976d4..3b96e6d499 100644
--- a/.github/workflows/pull-request-check-changelog.yml
+++ b/.github/workflows/pull-request-check-changelog.yml
@@ -13,7 +13,7 @@ jobs:
contents: read
pull-requests: write
env:
- MONITORED_FOLDERS: "api ui prowler dashboard"
+ MONITORED_FOLDERS: "api ui prowler mcp_server"
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
diff --git a/.github/workflows/sdk-pull-request.yml b/.github/workflows/sdk-pull-request.yml
index bfb8017001..3c20e89c9c 100644
--- a/.github/workflows/sdk-pull-request.yml
+++ b/.github/workflows/sdk-pull-request.yml
@@ -249,6 +249,21 @@ jobs:
run: |
poetry run pytest -n auto --cov=./prowler/providers/mongodbatlas --cov-report=xml:mongodb_atlas_coverage.xml tests/providers/mongodbatlas
+ # Test OCI
+ - name: OCI - Check if any file has changed
+ id: oci-changed-files
+ uses: tj-actions/changed-files@24d32ffd492484c1d75e0c0b894501ddb9d30d62 # v47.0.0
+ with:
+ files: |
+ ./prowler/providers/oraclecloud/**
+ ./tests/providers/oraclecloud/**
+ ./poetry.lock
+
+ - name: OCI - Test
+ if: steps.oci-changed-files.outputs.any_changed == 'true'
+ run: |
+ poetry run pytest -n auto --cov=./prowler/providers/oraclecloud --cov-report=xml:oci_coverage.xml tests/providers/oraclecloud
+
# Common Tests
- name: Lib - Test
if: steps.are-non-ignored-files-changed.outputs.any_changed == 'true'
@@ -268,4 +283,4 @@ jobs:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
with:
flags: prowler
- files: ./aws_coverage.xml,./azure_coverage.xml,./gcp_coverage.xml,./kubernetes_coverage.xml,./github_coverage.xml,./nhn_coverage.xml,./m365_coverage.xml,./lib_coverage.xml,./config_coverage.xml
+ files: ./aws_coverage.xml,./azure_coverage.xml,./gcp_coverage.xml,./kubernetes_coverage.xml,./github_coverage.xml,./nhn_coverage.xml,./m365_coverage.xml,./oci_coverage.xml,./lib_coverage.xml,./config_coverage.xml
diff --git a/README.md b/README.md
index 4e4babea04..f1097816c6 100644
--- a/README.md
+++ b/README.md
@@ -82,12 +82,13 @@ prowler dashboard
| Provider | Checks | Services | [Compliance Frameworks](https://docs.prowler.com/projects/prowler-open-source/en/latest/tutorials/compliance/) | [Categories](https://docs.prowler.com/projects/prowler-open-source/en/latest/tutorials/misc/#categories) | Support | Stage | Interface |
|---|---|---|---|---|---|---|---|
-| AWS | 576 | 82 | 36 | 10 | Official | Stable | UI, API, CLI |
-| GCP | 79 | 13 | 10 | 3 | Official | Stable | UI, API, CLI |
-| Azure | 162 | 19 | 11 | 4 | Official | Stable | UI, API, CLI |
+| AWS | 576 | 82 | 38 | 10 | Official | Stable | UI, API, CLI |
+| GCP | 79 | 13 | 11 | 3 | Official | Stable | UI, API, CLI |
+| Azure | 162 | 19 | 12 | 4 | Official | Stable | UI, API, CLI |
| Kubernetes | 83 | 7 | 5 | 7 | Official | Stable | UI, API, CLI |
| GitHub | 17 | 2 | 1 | 0 | Official | Stable | UI, API, CLI |
| M365 | 70 | 7 | 3 | 2 | Official | Stable | UI, API, CLI |
+| OCI | 51 | 13 | 1 | 10 | Official | Stable | CLI |
| IaC | [See `trivy` docs.](https://trivy.dev/latest/docs/coverage/iac/) | N/A | N/A | N/A | Official | Beta | CLI |
| MongoDB Atlas | 10 | 3 | 0 | 0 | Official | Beta | CLI |
| LLM | [See `promptfoo` docs.](https://www.promptfoo.dev/docs/red-team/plugins/) | N/A | N/A | N/A | Official | Beta | CLI |
diff --git a/api/CHANGELOG.md b/api/CHANGELOG.md
index 8fe04dfeba..13749d8b9e 100644
--- a/api/CHANGELOG.md
+++ b/api/CHANGELOG.md
@@ -7,11 +7,13 @@ All notable changes to the **Prowler API** are documented in this file.
### Added
- Default JWT keys are generated and stored if they are missing from configuration [(#8655)](https://github.com/prowler-cloud/prowler/pull/8655)
- `compliance_name` for each compliance [(#7920)](https://github.com/prowler-cloud/prowler/pull/7920)
+- Support C5 compliance framework for the AWS provider [(#8830)](https://github.com/prowler-cloud/prowler/pull/8830)
- Support for M365 Certificate authentication [(#8538)](https://github.com/prowler-cloud/prowler/pull/8538)
- API Key support [(#8805)](https://github.com/prowler-cloud/prowler/pull/8805)
- SAML role mapping protection for single-admin tenants to prevent accidental lockout [(#8882)](https://github.com/prowler-cloud/prowler/pull/8882)
- Support for `passed_findings` and `total_findings` fields in compliance requirement overview for accurate Prowler ThreatScore calculation [(#8582)](https://github.com/prowler-cloud/prowler/pull/8582)
- Database read replica support [(#8869)](https://github.com/prowler-cloud/prowler/pull/8869)
+- Support Common Cloud Controls for AWS, Azure and GCP [(#8000)](https://github.com/prowler-cloud/prowler/pull/8000)
### Changed
- Now the MANAGE_ACCOUNT permission is required to modify or read user permissions instead of MANAGE_USERS [(#8281)](https://github.com/prowler-cloud/prowler/pull/8281)
diff --git a/api/poetry.lock b/api/poetry.lock
index c9bd9c6be3..61929f3bdc 100644
--- a/api/poetry.lock
+++ b/api/poetry.lock
@@ -1,4 +1,4 @@
-# This file is automatically @generated by Poetry 2.1.4 and should not be changed by hand.
+# This file is automatically @generated by Poetry 2.2.0 and should not be changed by hand.
[[package]]
name = "about-time"
@@ -273,14 +273,14 @@ tests-mypy = ["mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" a
[[package]]
name = "authlib"
-version = "1.6.4"
+version = "1.6.5"
description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients."
optional = false
python-versions = ">=3.9"
groups = ["dev"]
files = [
- {file = "authlib-1.6.4-py2.py3-none-any.whl", hash = "sha256:39313d2a2caac3ecf6d8f95fbebdfd30ae6ea6ae6a6db794d976405fdd9aa796"},
- {file = "authlib-1.6.4.tar.gz", hash = "sha256:104b0442a43061dc8bc23b133d1d06a2b0a9c2e3e33f34c4338929e816287649"},
+ {file = "authlib-1.6.5-py2.py3-none-any.whl", hash = "sha256:3e0e0507807f842b02175507bdee8957a1d5707fd4afb17c32fb43fee90b6e3a"},
+ {file = "authlib-1.6.5.tar.gz", hash = "sha256:6aaf9c79b7cc96c900f0b284061691c5d4e61221640a948fe690b556a6d6d10b"},
]
[package.dependencies]
diff --git a/api/src/backend/api/migrations/0048_api_key.py b/api/src/backend/api/migrations/0048_api_key.py
index abcbe212ef..32b7fe144d 100644
--- a/api/src/backend/api/migrations/0048_api_key.py
+++ b/api/src/backend/api/migrations/0048_api_key.py
@@ -44,7 +44,7 @@ class Migration(migrations.Migration):
help_text="If the API key is revoked, entities cannot use it anymore. (This cannot be undone.)",
),
),
- ("created", models.DateTimeField(auto_now=True)),
+ ("created", models.DateTimeField(auto_now_add=True, editable=False)),
(
"whitelisted_ips",
models.JSONField(
diff --git a/api/src/backend/api/models.py b/api/src/backend/api/models.py
index c3cd30d932..a83bb4c585 100644
--- a/api/src/backend/api/models.py
+++ b/api/src/backend/api/models.py
@@ -221,6 +221,7 @@ class Membership(models.Model):
class TenantAPIKey(AbstractAPIKey, RowLevelSecurityProtectedModel):
id = models.UUIDField(primary_key=True, default=uuid4, editable=False)
name = models.CharField(max_length=100, validators=[MinLengthValidator(3)])
+ created = models.DateTimeField(auto_now_add=True, editable=False)
prefix = models.CharField(
max_length=11,
unique=True,
diff --git a/api/src/backend/api/specs/v1.yaml b/api/src/backend/api/specs/v1.yaml
index cd5e9d4af1..3f0005726b 100644
--- a/api/src/backend/api/specs/v1.yaml
+++ b/api/src/backend/api/specs/v1.yaml
@@ -12010,20 +12010,22 @@ components:
type: string
description: The Azure application (client) ID for authentication
in Azure AD.
- client_secret:
- type: string
- description: The client secret associated with the application
- (client) ID, providing secure access.
tenant_id:
type: string
description: The Azure tenant ID, representing the directory
where the application is registered.
+ client_secret:
+ type: string
+ description: The client secret associated with the application
+ (client) ID, providing secure access.
user:
type: email
- description: 'Deprecated: User microsoft email address.'
+ description: User microsoft email address.
+ deprecated: true
password:
type: string
- description: 'Deprecated: User password.'
+ description: User password.
+ deprecated: true
required:
- client_id
- client_secret
@@ -12045,18 +12047,10 @@ components:
type: string
description: The certificate content in base64 format for
certificate-based authentication.
- user:
- type: email
- description: User microsoft email address.
- password:
- type: string
- description: User password.
required:
- client_id
- tenant_id
- certificate_content
- - user
- - password
- type: object
title: GCP Static Credentials
properties:
@@ -13903,20 +13897,22 @@ components:
type: string
description: The Azure application (client) ID for authentication
in Azure AD.
- client_secret:
- type: string
- description: The client secret associated with the application
- (client) ID, providing secure access.
tenant_id:
type: string
description: The Azure tenant ID, representing the directory where
the application is registered.
+ client_secret:
+ type: string
+ description: The client secret associated with the application
+ (client) ID, providing secure access.
user:
type: email
- description: 'Deprecated: User microsoft email address.'
+ description: User microsoft email address.
+ deprecated: true
password:
type: string
- description: 'Deprecated: User password.'
+ description: User password.
+ deprecated: true
required:
- client_id
- client_secret
@@ -13938,18 +13934,10 @@ components:
type: string
description: The certificate content in base64 format for certificate-based
authentication.
- user:
- type: email
- description: User microsoft email address.
- password:
- type: string
- description: User password.
required:
- client_id
- tenant_id
- certificate_content
- - user
- - password
- type: object
title: GCP Static Credentials
properties:
@@ -14178,20 +14166,22 @@ components:
type: string
description: The Azure application (client) ID for authentication
in Azure AD.
- client_secret:
- type: string
- description: The client secret associated with the application
- (client) ID, providing secure access.
tenant_id:
type: string
description: The Azure tenant ID, representing the directory
where the application is registered.
+ client_secret:
+ type: string
+ description: The client secret associated with the application
+ (client) ID, providing secure access.
user:
type: email
- description: 'Deprecated: User microsoft email address.'
+ description: User microsoft email address.
+ deprecated: true
password:
type: string
- description: 'Deprecated: User password.'
+ description: User password.
+ deprecated: true
required:
- client_id
- client_secret
@@ -14213,18 +14203,10 @@ components:
type: string
description: The certificate content in base64 format for
certificate-based authentication.
- user:
- type: email
- description: User microsoft email address.
- password:
- type: string
- description: User password.
required:
- client_id
- tenant_id
- certificate_content
- - user
- - password
- type: object
title: GCP Static Credentials
properties:
@@ -14469,20 +14451,22 @@ components:
type: string
description: The Azure application (client) ID for authentication
in Azure AD.
- client_secret:
- type: string
- description: The client secret associated with the application
- (client) ID, providing secure access.
tenant_id:
type: string
description: The Azure tenant ID, representing the directory where
the application is registered.
+ client_secret:
+ type: string
+ description: The client secret associated with the application
+ (client) ID, providing secure access.
user:
type: email
- description: 'Deprecated: User microsoft email address.'
+ description: User microsoft email address.
+ deprecated: true
password:
type: string
- description: 'Deprecated: User password.'
+ description: User password.
+ deprecated: true
required:
- client_id
- client_secret
@@ -14504,18 +14488,10 @@ components:
type: string
description: The certificate content in base64 format for certificate-based
authentication.
- user:
- type: email
- description: User microsoft email address.
- password:
- type: string
- description: User password.
required:
- client_id
- tenant_id
- certificate_content
- - user
- - password
- type: object
title: GCP Static Credentials
properties:
diff --git a/api/src/backend/api/tests/test_views.py b/api/src/backend/api/tests/test_views.py
index 11dc1c8b33..1b1783cc5a 100644
--- a/api/src/backend/api/tests/test_views.py
+++ b/api/src/backend/api/tests/test_views.py
@@ -7948,6 +7948,27 @@ class TestTenantApiKeyViewSet:
api_key.refresh_from_db()
assert api_key.revoked is True
+ def test_api_keys_revoke_preserves_created_field(
+ self, authenticated_client, api_keys_fixture
+ ):
+ """Test that revoking an API key preserves the created timestamp."""
+ api_key = api_keys_fixture[0] # Not revoked
+ assert api_key.revoked is False
+
+ # Record the original created timestamp
+ original_created = api_key.created
+
+ response = authenticated_client.delete(
+ reverse("api-key-revoke", kwargs={"pk": api_key.id})
+ )
+ assert response.status_code == status.HTTP_200_OK
+
+ # Verify in database
+ api_key.refresh_from_db()
+ assert api_key.revoked is True
+ # Verify created field has not changed
+ assert api_key.created == original_created
+
def test_api_keys_revoke_already_revoked(
self, authenticated_client, api_keys_fixture
):
diff --git a/api/src/backend/api/v1/serializer_utils/providers.py b/api/src/backend/api/v1/serializer_utils/providers.py
index 522df89ee6..6dfaca794c 100644
--- a/api/src/backend/api/v1/serializer_utils/providers.py
+++ b/api/src/backend/api/v1/serializer_utils/providers.py
@@ -105,23 +105,25 @@ from rest_framework_json_api import serializers
"type": "string",
"description": "The Azure application (client) ID for authentication in Azure AD.",
},
- "client_secret": {
- "type": "string",
- "description": "The client secret associated with the application (client) ID, providing "
- "secure access.",
- },
"tenant_id": {
"type": "string",
"description": "The Azure tenant ID, representing the directory where the application is "
"registered.",
},
+ "client_secret": {
+ "type": "string",
+ "description": "The client secret associated with the application (client) ID, providing "
+ "secure access.",
+ },
"user": {
"type": "email",
- "description": "Deprecated: User microsoft email address.",
+ "description": "User microsoft email address.",
+ "deprecated": True,
},
"password": {
"type": "string",
- "description": "Deprecated: User password.",
+ "description": "User password.",
+ "deprecated": True,
},
},
"required": [
@@ -149,21 +151,11 @@ from rest_framework_json_api import serializers
"type": "string",
"description": "The certificate content in base64 format for certificate-based authentication.",
},
- "user": {
- "type": "email",
- "description": "User microsoft email address.",
- },
- "password": {
- "type": "string",
- "description": "User password.",
- },
},
"required": [
"client_id",
"tenant_id",
"certificate_content",
- "user",
- "password",
],
},
{
diff --git a/api/src/backend/tasks/jobs/export.py b/api/src/backend/tasks/jobs/export.py
index 441b7a95d4..782e06e2b9 100644
--- a/api/src/backend/tasks/jobs/export.py
+++ b/api/src/backend/tasks/jobs/export.py
@@ -20,6 +20,10 @@ from prowler.lib.outputs.asff.asff import ASFF
from prowler.lib.outputs.compliance.aws_well_architected.aws_well_architected import (
AWSWellArchitected,
)
+from prowler.lib.outputs.compliance.ccc.ccc_aws import CCC_AWS
+from prowler.lib.outputs.compliance.ccc.ccc_azure import CCC_Azure
+from prowler.lib.outputs.compliance.ccc.ccc_gcp import CCC_GCP
+from prowler.lib.outputs.compliance.c5.c5_aws import AWSC5
from prowler.lib.outputs.compliance.cis.cis_aws import AWSCIS
from prowler.lib.outputs.compliance.cis.cis_azure import AzureCIS
from prowler.lib.outputs.compliance.cis.cis_gcp import GCPCIS
@@ -73,12 +77,15 @@ COMPLIANCE_CLASS_MAP = {
(lambda name: name.startswith("iso27001_"), AWSISO27001),
(lambda name: name.startswith("kisa"), AWSKISAISMSP),
(lambda name: name == "prowler_threatscore_aws", ProwlerThreatScoreAWS),
+ (lambda name: name == "ccc_aws", CCC_AWS),
+ (lambda name: name.startswith("c5_"), AWSC5),
],
"azure": [
(lambda name: name.startswith("cis_"), AzureCIS),
(lambda name: name == "mitre_attack_azure", AzureMitreAttack),
(lambda name: name.startswith("ens_"), AzureENS),
(lambda name: name.startswith("iso27001_"), AzureISO27001),
+ (lambda name: name == "ccc_azure", CCC_Azure),
(lambda name: name == "prowler_threatscore_azure", ProwlerThreatScoreAzure),
],
"gcp": [
@@ -87,6 +94,7 @@ COMPLIANCE_CLASS_MAP = {
(lambda name: name.startswith("ens_"), GCPENS),
(lambda name: name.startswith("iso27001_"), GCPISO27001),
(lambda name: name == "prowler_threatscore_gcp", ProwlerThreatScoreGCP),
+ (lambda name: name == "ccc_gcp", CCC_GCP),
],
"kubernetes": [
(lambda name: name.startswith("cis_"), KubernetesCIS),
diff --git a/dashboard/compliance/c5_aws.py b/dashboard/compliance/c5_aws.py
new file mode 100644
index 0000000000..8baac9a9a5
--- /dev/null
+++ b/dashboard/compliance/c5_aws.py
@@ -0,0 +1,43 @@
+import warnings
+
+from dashboard.common_methods import get_section_containers_3_levels
+
+warnings.filterwarnings("ignore")
+
+
+def get_table(data):
+ data["REQUIREMENTS_DESCRIPTION"] = (
+ data["REQUIREMENTS_ID"] + " - " + data["REQUIREMENTS_DESCRIPTION"]
+ )
+
+ data["REQUIREMENTS_DESCRIPTION"] = data["REQUIREMENTS_DESCRIPTION"].apply(
+ lambda x: x[:150] + "..." if len(str(x)) > 150 else x
+ )
+
+ data["REQUIREMENTS_ATTRIBUTES_SECTION"] = data[
+ "REQUIREMENTS_ATTRIBUTES_SECTION"
+ ].apply(lambda x: x[:80] + "..." if len(str(x)) > 80 else x)
+
+ data["REQUIREMENTS_ATTRIBUTES_SUBSECTION"] = data[
+ "REQUIREMENTS_ATTRIBUTES_SUBSECTION"
+ ].apply(lambda x: x[:150] + "..." if len(str(x)) > 150 else x)
+
+ aux = data[
+ [
+ "REQUIREMENTS_DESCRIPTION",
+ "REQUIREMENTS_ATTRIBUTES_SECTION",
+ "REQUIREMENTS_ATTRIBUTES_SUBSECTION",
+ "CHECKID",
+ "STATUS",
+ "REGION",
+ "ACCOUNTID",
+ "RESOURCEID",
+ ]
+ ]
+
+ return get_section_containers_3_levels(
+ aux,
+ "REQUIREMENTS_ATTRIBUTES_SECTION",
+ "REQUIREMENTS_ATTRIBUTES_SUBSECTION",
+ "REQUIREMENTS_DESCRIPTION",
+ )
diff --git a/dashboard/compliance/ccc_aws.py b/dashboard/compliance/ccc_aws.py
new file mode 100644
index 0000000000..5344dada84
--- /dev/null
+++ b/dashboard/compliance/ccc_aws.py
@@ -0,0 +1,36 @@
+import warnings
+
+from dashboard.common_methods import get_section_containers_3_levels
+
+warnings.filterwarnings("ignore")
+
+
+def get_table(data):
+
+ data["REQUIREMENTS_ID"] = (
+ data["REQUIREMENTS_ID"] + " - " + data["REQUIREMENTS_DESCRIPTION"]
+ )
+
+ data["REQUIREMENTS_ID"] = data["REQUIREMENTS_ID"].apply(
+ lambda x: x[:150] + "..." if len(str(x)) > 150 else x
+ )
+
+ aux = data[
+ [
+ "REQUIREMENTS_ID",
+ "REQUIREMENTS_ATTRIBUTES_SECTION",
+ "REQUIREMENTS_ATTRIBUTES_SUBSECTION",
+ "CHECKID",
+ "STATUS",
+ "REGION",
+ "ACCOUNTID",
+ "RESOURCEID",
+ ]
+ ]
+
+ return get_section_containers_3_levels(
+ aux,
+ "REQUIREMENTS_ATTRIBUTES_SECTION",
+ "REQUIREMENTS_ATTRIBUTES_SUBSECTION",
+ "REQUIREMENTS_ID",
+ )
diff --git a/dashboard/compliance/ccc_azure.py b/dashboard/compliance/ccc_azure.py
new file mode 100644
index 0000000000..5344dada84
--- /dev/null
+++ b/dashboard/compliance/ccc_azure.py
@@ -0,0 +1,36 @@
+import warnings
+
+from dashboard.common_methods import get_section_containers_3_levels
+
+warnings.filterwarnings("ignore")
+
+
+def get_table(data):
+
+ data["REQUIREMENTS_ID"] = (
+ data["REQUIREMENTS_ID"] + " - " + data["REQUIREMENTS_DESCRIPTION"]
+ )
+
+ data["REQUIREMENTS_ID"] = data["REQUIREMENTS_ID"].apply(
+ lambda x: x[:150] + "..." if len(str(x)) > 150 else x
+ )
+
+ aux = data[
+ [
+ "REQUIREMENTS_ID",
+ "REQUIREMENTS_ATTRIBUTES_SECTION",
+ "REQUIREMENTS_ATTRIBUTES_SUBSECTION",
+ "CHECKID",
+ "STATUS",
+ "REGION",
+ "ACCOUNTID",
+ "RESOURCEID",
+ ]
+ ]
+
+ return get_section_containers_3_levels(
+ aux,
+ "REQUIREMENTS_ATTRIBUTES_SECTION",
+ "REQUIREMENTS_ATTRIBUTES_SUBSECTION",
+ "REQUIREMENTS_ID",
+ )
diff --git a/dashboard/compliance/ccc_gcp.py b/dashboard/compliance/ccc_gcp.py
new file mode 100644
index 0000000000..5344dada84
--- /dev/null
+++ b/dashboard/compliance/ccc_gcp.py
@@ -0,0 +1,36 @@
+import warnings
+
+from dashboard.common_methods import get_section_containers_3_levels
+
+warnings.filterwarnings("ignore")
+
+
+def get_table(data):
+
+ data["REQUIREMENTS_ID"] = (
+ data["REQUIREMENTS_ID"] + " - " + data["REQUIREMENTS_DESCRIPTION"]
+ )
+
+ data["REQUIREMENTS_ID"] = data["REQUIREMENTS_ID"].apply(
+ lambda x: x[:150] + "..." if len(str(x)) > 150 else x
+ )
+
+ aux = data[
+ [
+ "REQUIREMENTS_ID",
+ "REQUIREMENTS_ATTRIBUTES_SECTION",
+ "REQUIREMENTS_ATTRIBUTES_SUBSECTION",
+ "CHECKID",
+ "STATUS",
+ "REGION",
+ "ACCOUNTID",
+ "RESOURCEID",
+ ]
+ ]
+
+ return get_section_containers_3_levels(
+ aux,
+ "REQUIREMENTS_ATTRIBUTES_SECTION",
+ "REQUIREMENTS_ATTRIBUTES_SUBSECTION",
+ "REQUIREMENTS_ID",
+ )
diff --git a/dashboard/compliance/cis_3_0_oci.py b/dashboard/compliance/cis_3_0_oci.py
new file mode 100644
index 0000000000..286a6cd12f
--- /dev/null
+++ b/dashboard/compliance/cis_3_0_oci.py
@@ -0,0 +1,41 @@
+import warnings
+
+from dashboard.common_methods import get_section_containers_cis
+
+warnings.filterwarnings("ignore")
+
+
+def get_table(data):
+ """
+ Generate CIS OCI Foundations Benchmark v3.0 compliance table.
+
+ Args:
+ data: DataFrame containing compliance check results with columns:
+ - REQUIREMENTS_ID: CIS requirement ID (e.g., "1.1", "2.1")
+ - REQUIREMENTS_DESCRIPTION: Description of the requirement
+ - REQUIREMENTS_ATTRIBUTES_SECTION: CIS section name
+ - CHECKID: Prowler check identifier
+ - STATUS: Check status (PASS/FAIL)
+ - REGION: OCI region
+ - TENANCYID: OCI tenancy OCID
+ - RESOURCEID: Resource OCID or identifier
+
+ Returns:
+ Section containers organized by CIS sections for dashboard display
+ """
+ aux = data[
+ [
+ "REQUIREMENTS_ID",
+ "REQUIREMENTS_DESCRIPTION",
+ "REQUIREMENTS_ATTRIBUTES_SECTION",
+ "CHECKID",
+ "STATUS",
+ "REGION",
+ "TENANCYID",
+ "RESOURCEID",
+ ]
+ ].copy()
+
+ return get_section_containers_cis(
+ aux, "REQUIREMENTS_ID", "REQUIREMENTS_ATTRIBUTES_SECTION"
+ )
diff --git a/docs/.mintlifyignore b/docs/.mintlifyignore
new file mode 100644
index 0000000000..2681ed7d5c
--- /dev/null
+++ b/docs/.mintlifyignore
@@ -0,0 +1,4 @@
+.idea/
+.git/
+.claude/
+AGENTS.md
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 0000000000..79917aeed1
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,45 @@
+# Prowler Documentation
+
+This repository contains the Prowler Open Source documentation powered by [Mintlify](https://mintlify.com).
+
+## Documentation Structure
+
+- **Getting Started**: Overview, installation, and basic usage guides
+- **User Guide**: Comprehensive guides for Prowler App, CLI, providers, and compliance
+- **Developer Guide**: Technical documentation for developers contributing to Prowler
+
+## Local Development
+
+Install the [Mintlify CLI](https://www.npmjs.com/package/mint) to preview documentation changes locally:
+
+```bash
+npm i -g mint
+```
+
+Run the following command at the root of your documentation (where `mint.json` is located):
+
+```bash
+mint dev
+```
+
+View your local preview at `http://localhost:3000`.
+
+## Publishing Changes
+
+Changes pushed to the main branch are automatically deployed to production through Mintlify's GitHub integration.
+
+## Documentation Guidelines
+
+When contributing to the documentation, please follow the Prowler documentation style guide located in the `.claude` directory.
+
+## Troubleshooting
+
+- If your dev environment isn't running: Run `mint update` to ensure you have the most recent version of the CLI.
+- If a page loads as a 404: Make sure you are running in a folder with a valid `mint.json` file and that the page path is correctly listed in the navigation.
+
+## Resources
+
+- [Prowler GitHub Repository](https://github.com/prowler-cloud/prowler)
+- [Prowler Documentation](https://docs.prowler.com/)
+- [Mintlify Documentation](https://mintlify.com/docs)
+- [Mintlify Community](https://mintlify.com/community)
diff --git a/docs/basic-usage/prowler-app.md b/docs/basic-usage/prowler-app.md
deleted file mode 100644
index 0bea33007b..0000000000
--- a/docs/basic-usage/prowler-app.md
+++ /dev/null
@@ -1,61 +0,0 @@
-## Access Prowler App
-
-After [installation](../installation/prowler-app.md), navigate to [http://localhost:3000](http://localhost:3000) and sign up with email and password.
-
-
-
-
-???+ note "User creation and default tenant behavior"
-
- When creating a new user, the behavior depends on whether an invitation is provided:
-
- - **Without an invitation**:
-
- - A new tenant is automatically created.
- - The new user is assigned to this tenant.
- - A set of **RBAC admin permissions** is generated and assigned to the user for the newly-created tenant.
-
- - **With an invitation**: The user is added to the specified tenant with the permissions defined in the invitation.
-
- This mechanism ensures that the first user in a newly created tenant has administrative permissions within that tenant.
-
-## Log In
-
-Access Prowler App by logging in with **email and password**.
-
-
-
-## Add Cloud Provider
-
-Configure a cloud provider for scanning:
-
-1. Navigate to `Settings > Cloud Providers` and click `Add Account`.
-2. Select the cloud provider.
-3. Enter the provider's identifier (Optional: Add an alias):
- - **AWS**: Account ID
- - **GCP**: Project ID
- - **Azure**: Subscription ID
- - **Kubernetes**: Cluster ID
- - **M365**: Domain ID
-4. Follow the guided instructions to add and authenticate your credentials.
-
-## Start a Scan
-
-Once credentials are successfully added and validated, Prowler initiates a scan of your cloud environment.
-
-Click `Go to Scans` to monitor progress.
-
-## View Results
-
-Review findings during scan execution in the following sections:
-
-- **Overview** – Provides a high-level summary of your scans.
-
-
-- **Compliance** – Displays compliance insights based on security frameworks.
-
-
-> For detailed usage instructions, refer to the [Prowler App Guide](../tutorials/prowler-app.md).
-
-???+ note
- Prowler will automatically scan all configured providers every **24 hours**, ensuring your cloud environment stays continuously monitored.
diff --git a/docs/contact.md b/docs/contact.mdx
similarity index 93%
rename from docs/contact.md
rename to docs/contact.mdx
index 94c8adf0bb..3f898b9049 100644
--- a/docs/contact.md
+++ b/docs/contact.mdx
@@ -1,4 +1,6 @@
-# Contact Us
+---
+title: 'Contact Us'
+---
For technical support or any type of inquiries, you are very welcome to:
diff --git a/docs/developer-guide/aws-details.md b/docs/developer-guide/aws-details.mdx
similarity index 86%
rename from docs/developer-guide/aws-details.md
rename to docs/developer-guide/aws-details.mdx
index 9fa182d689..70f94f4006 100644
--- a/docs/developer-guide/aws-details.md
+++ b/docs/developer-guide/aws-details.mdx
@@ -1,12 +1,14 @@
-# AWS Provider
+---
+title: 'AWS Provider'
+---
In this page you can find all the details about [Amazon Web Services (AWS)](https://aws.amazon.com/) provider implementation in Prowler.
-By default, Prowler will audit just one account and organization settings per scan. To configure it, follow the [AWS getting started guide](../tutorials/aws/getting-started-aws.md).
+By default, Prowler will audit just one account and organization settings per scan. To configure it, follow the [AWS getting started guide](/user-guide/providers/aws/getting-started-aws).
## AWS Provider Classes Architecture
-The AWS provider implementation follows the general [Provider structure](./provider.md). This section focuses on the AWS-specific implementation, highlighting how the generic provider concepts are realized for AWS in Prowler. For a full overview of the provider pattern, base classes, and extension guidelines, see [Provider documentation](./provider.md). In next subsection you can find a list of the main classes of the AWS provider.
+The AWS provider implementation follows the general [Provider structure](/developer-guide/provider). This section focuses on the AWS-specific implementation, highlighting how the generic provider concepts are realized for AWS in Prowler. For a full overview of the provider pattern, base classes, and extension guidelines, see [Provider documentation](/developer-guide/provider). In next subsection you can find a list of the main classes of the AWS provider.
### `AwsProvider` (Main Class)
@@ -33,7 +35,7 @@ The AWS provider implementation follows the general [Provider structure](./provi
### `AWSService` (Service Base Class)
- **Location:** [`prowler/providers/aws/lib/service/service.py`](https://github.com/prowler-cloud/prowler/blob/master/prowler/providers/aws/lib/service/service.py)
-- **Purpose:** Abstract base class that all AWS service-specific classes inherit from. This implements the generic service pattern (described in [service page](./services.md#service-base-class)) specifically for AWS.
+- **Purpose:** Abstract base class that all AWS service-specific classes inherit from. This implements the generic service pattern (described in [service page](/developer-guide/services#service-base-class)) specifically for AWS.
- **Key AWS Responsibilities:**
- Receives an `AwsProvider` instance to access session, identity, and configuration.
- Manages clients for all services by regions.
@@ -52,12 +54,12 @@ The AWS provider implementation follows the general [Provider structure](./provi
## Specific Patterns in AWS Services
-The generic service pattern is described in [service page](./services.md#service-structure-and-initialisation). You can find all the right now implemented services in the following locations:
+The generic service pattern is described in [service page](/developer-guide/services#service-structure-and-initialisation). You can find all the right now implemented services in the following locations:
- Directly in the code, in location [`prowler/providers/aws/services/`](https://github.com/prowler-cloud/prowler/tree/master/prowler/providers/aws/services)
- In the [Prowler Hub](https://hub.prowler.com/). For a more human-readable view.
-The best reference to understand how to implement a new service is following the [service implementation documentation](./services.md#adding-a-new-service) and taking other services already implemented as reference. In next subsection you can find a list of common patterns that are used accross all AWS services.
+The best reference to understand how to implement a new service is following the [service implementation documentation](/developer-guide/services#adding-a-new-service) and taking other services already implemented as reference. In next subsection you can find a list of common patterns that are used accross all AWS services.
### AWS Service Common Patterns
@@ -74,12 +76,12 @@ The best reference to understand how to implement a new service is following the
## Specific Patterns in AWS Checks
-The AWS checks pattern is described in [checks page](./checks.md). You can find all the right now implemented checks:
+The AWS checks pattern is described in [checks page](/developer-guide/checks). You can find all the right now implemented checks:
- Directly in the code, within each service folder, each check has its own folder named after the name of the check. (e.g. [`prowler/providers/aws/services/s3/s3_bucket_acl_prohibited/`](https://github.com/prowler-cloud/prowler/tree/master/prowler/providers/aws/services/s3/s3_bucket_acl_prohibited))
- In the [Prowler Hub](https://hub.prowler.com/). For a more human-readable view.
-The best reference to understand how to implement a new check is following the [check creation documentation](./checks.md#creating-a-check) and taking other similar checks as reference.
+The best reference to understand how to implement a new check is following the [check creation documentation](/developer-guide/checks#creating-a-check) and taking other similar checks as reference.
### Check Report Class
diff --git a/docs/developer-guide/azure-details.md b/docs/developer-guide/azure-details.mdx
similarity index 84%
rename from docs/developer-guide/azure-details.md
rename to docs/developer-guide/azure-details.mdx
index d1eb6b73be..d298a13bf4 100644
--- a/docs/developer-guide/azure-details.md
+++ b/docs/developer-guide/azure-details.mdx
@@ -1,12 +1,14 @@
-# Azure Provider
+---
+title: 'Azure Provider'
+---
In this page you can find all the details about [Microsoft Azure](https://azure.microsoft.com/) provider implementation in Prowler.
-By default, Prowler will audit all the subscriptions that it is able to list in the Microsoft Entra tenant, and tenant Entra ID service. To configure it, follow the [Azure getting started guide](../tutorials/azure/getting-started-azure.md).
+By default, Prowler will audit all the subscriptions that it is able to list in the Microsoft Entra tenant, and tenant Entra ID service. To configure it, follow the [Azure getting started guide](/user-guide/providers/azure/getting-started-azure).
## Azure Provider Classes Architecture
-The Azure provider implementation follows the general [Provider structure](./provider.md). This section focuses on the Azure-specific implementation, highlighting how the generic provider concepts are realized for Azure in Prowler. For a full overview of the provider pattern, base classes, and extension guidelines, see [Provider documentation](./provider.md). In next subsection you can find a list of the main classes of the Azure provider.
+The Azure provider implementation follows the general [Provider structure](/developer-guide/provider). This section focuses on the Azure-specific implementation, highlighting how the generic provider concepts are realized for Azure in Prowler. For a full overview of the provider pattern, base classes, and extension guidelines, see [Provider documentation](/developer-guide/provider). In next subsection you can find a list of the main classes of the Azure provider.
### `AzureProvider` (Main Class)
@@ -32,7 +34,7 @@ The Azure provider implementation follows the general [Provider structure](./pro
### `AzureService` (Service Base Class)
- **Location:** [`prowler/providers/azure/lib/service/service.py`](https://github.com/prowler-cloud/prowler/blob/master/prowler/providers/azure/lib/service/service.py)
-- **Purpose:** Abstract base class that all Azure service-specific classes inherit from. This implements the generic service pattern (described in [service page](./services.md#service-base-class)) specifically for Azure.
+- **Purpose:** Abstract base class that all Azure service-specific classes inherit from. This implements the generic service pattern (described in [service page](/developer-guide/services#service-base-class)) specifically for Azure.
- **Key Azure Responsibilities:**
- Receives an `AzureProvider` instance to access session, identity, and configuration.
- Manages clients for all services by subscription.
@@ -50,12 +52,12 @@ The Azure provider implementation follows the general [Provider structure](./pro
## Specific Patterns in Azure Services
-The generic service pattern is described in [service page](./services.md#service-structure-and-initialisation). You can find all the currently implemented services in the following locations:
+The generic service pattern is described in [service page](/developer-guide/services#service-structure-and-initialisation). You can find all the currently implemented services in the following locations:
- Directly in the code, in location [`prowler/providers/azure/services/`](https://github.com/prowler-cloud/prowler/tree/master/prowler/providers/azure/services)
- In the [Prowler Hub](https://hub.prowler.com/) for a more human-readable view.
-The best reference to understand how to implement a new service is following the [service implementation documentation](./services.md#adding-a-new-service) and taking other services already implemented as reference. In next subsection you can find a list of common patterns that are used accross all Azure services.
+The best reference to understand how to implement a new service is following the [service implementation documentation](/developer-guide/services#adding-a-new-service) and taking other services already implemented as reference. In next subsection you can find a list of common patterns that are used accross all Azure services.
### Azure Service Common Patterns
@@ -68,12 +70,12 @@ The best reference to understand how to implement a new service is following the
## Specific Patterns in Azure Checks
-The Azure checks pattern is described in [checks page](./checks.md). You can find all the currently implemented checks:
+The Azure checks pattern is described in [checks page](/developer-guide/checks). You can find all the currently implemented checks:
- Directly in the code, within each service folder, each check has its own folder named after the name of the check. (e.g. [`prowler/providers/azure/services/storage/storage_blob_public_access_level_is_disabled/`](https://github.com/prowler-cloud/prowler/tree/master/prowler/providers/azure/services/storage/storage_blob_public_access_level_is_disabled))
- In the [Prowler Hub](https://hub.prowler.com/) for a more human-readable view.
-The best reference to understand how to implement a new check is the [Azure check implementation documentation](./checks.md#creating-a-check) and taking other similar checks as reference.
+The best reference to understand how to implement a new check is the [Azure check implementation documentation](/developer-guide/checks#creating-a-check) and taking other similar checks as reference.
### Check Report Class
diff --git a/docs/developer-guide/check-metadata-guidelines.md b/docs/developer-guide/check-metadata-guidelines.mdx
similarity index 99%
rename from docs/developer-guide/check-metadata-guidelines.md
rename to docs/developer-guide/check-metadata-guidelines.mdx
index 84994c2855..2b6524bcc6 100644
--- a/docs/developer-guide/check-metadata-guidelines.md
+++ b/docs/developer-guide/check-metadata-guidelines.mdx
@@ -1,8 +1,10 @@
-# Check Metadata Guidelines
+---
+title: 'Check Metadata Guidelines'
+---
## Introduction
-This guide provides comprehensive guidelines for creating check metadata in Prowler. For basic information on check metadata structure, refer to the [check metadata](./checks.md#metadata-structure-for-prowler-checks) section.
+This guide provides comprehensive guidelines for creating check metadata in Prowler. For basic information on check metadata structure, refer to the [check metadata](/developer-guide/checks#metadata-structure-for-prowler-checks) section.
## Check Title Guidelines
diff --git a/docs/developer-guide/checks.md b/docs/developer-guide/checks.mdx
similarity index 93%
rename from docs/developer-guide/checks.md
rename to docs/developer-guide/checks.mdx
index 90e8cc7fd0..deeb7b50a5 100644
--- a/docs/developer-guide/checks.md
+++ b/docs/developer-guide/checks.mdx
@@ -1,4 +1,6 @@
-# Prowler Checks
+---
+title: 'Prowler Checks'
+---
This guide explains how to create new checks in Prowler.
@@ -12,7 +14,7 @@ The most common high level steps to create a new check are:
1. Prerequisites:
- Verify the check does not already exist by searching [Prowler Hub](https://hub.prowler.com) or checking `prowler/providers//services///`.
- - Ensure required provider and service exist. If not, follow the [Provider](./provider.md) and [Service](./services.md) documentation to create them.
+ - Ensure required provider and service exist. If not, follow the [Provider](/developer-guide/provider) and [Service](/developer-guide/services) documentation to create them.
- Confirm the service has implemented all required methods and attributes for the check (in most cases, you will need to add or modify some methods in the service to get the data you need for the check).
2. Navigate to the service directory. The path should be as follows: `prowler/providers//services/`.
3. Create a check-specific folder. The path should follow this pattern: `prowler/providers//services//`. Adhere to the [Naming Format for Checks](#naming-format-for-checks).
@@ -20,7 +22,7 @@ The most common high level steps to create a new check are:
5. Run the check locally to ensure it works as expected. For checking you can use the CLI in the next way:
- To ensure the check has been detected by Prowler: `poetry run python prowler-cli.py --list-checks | grep `.
- To run the check, to find possible issues: `poetry run python prowler-cli.py --log-level ERROR --verbose --check `.
-6. Create comprehensive tests for the check that cover multiple scenarios including both PASS (compliant) and FAIL (non-compliant) cases. For detailed information about test structure and implementation guidelines, refer to the [Testing](./unit-testing.md) documentation.
+6. Create comprehensive tests for the check that cover multiple scenarios including both PASS (compliant) and FAIL (non-compliant) cases. For detailed information about test structure and implementation guidelines, refer to the [Testing](/developer-guide/unit-testing) documentation.
7. If the check and its corresponding tests are working as expected, you can submit a PR to Prowler.
### Naming Format for Checks
@@ -39,8 +41,8 @@ The name components are:
Each check in Prowler follows a straightforward structure. Within the newly created folder, three files must be added to implement the check logic:
- `__init__.py` (empty file) – Ensures Python treats the check folder as a package.
-- `.py` (code file) – Contains the check logic, following the prescribed format. Please refer to the [prowler's check code structure](./checks.md#prowlers-check-code-structure) for more information.
-- `.metadata.json` (metadata file) – Defines the check's metadata for contextual information. Please refer to the [check metadata](./checks.md#metadata-structure-for-prowler-checks) for more information.
+- `.py` (code file) – Contains the check logic, following the prescribed format. Please refer to the [prowler's check code structure](/developer-guide/checks#prowlers-check-code-structure) for more information.
+- `.metadata.json` (metadata file) – Defines the check's metadata for contextual information. Please refer to the [check metadata](/developer-guide/checks#metadata-structure-for-prowler-checks) for more information.
## Prowler's Check Code Structure
@@ -50,9 +52,10 @@ Below the code for a generic check is presented. It is strongly recommended to c
Report fields are the most dependent on the provider, consult the `CheckReport` class for more information on what can be included in the report [here](https://github.com/prowler-cloud/prowler/blob/master/prowler/lib/check/models.py).
-???+ note
- Legacy providers (AWS, Azure, GCP, Kubernetes) follow the `Check_Report_` naming convention. This is not recommended for current instances. Newer providers adopt the `CheckReport` naming convention. Learn more at [Prowler Code](https://github.com/prowler-cloud/prowler/tree/master/prowler/lib/check/models.py).
+
+Legacy providers (AWS, Azure, GCP, Kubernetes) follow the `Check_Report_` naming convention. This is not recommended for current instances. Newer providers adopt the `CheckReport` naming convention. Learn more at [Prowler Code](https://github.com/prowler-cloud/prowler/tree/master/prowler/lib/check/models.py).
+
```python title="Generic Check Class"
# Required Imports
# Import the base Check class and the provider-specific CheckReport class
@@ -213,7 +216,7 @@ Each check **must** populate the report with an unique identifier for the audite
### Configurable Checks in Prowler
-See [Configurable Checks](./configurable-checks.md) for detailed information on making checks configurable using the `audit_config` object and configuration file.
+See [Configurable Checks](/developer-guide/configurable-checks) for detailed information on making checks configurable using the `audit_config` object and configuration file.
## Metadata Structure for Prowler Checks
@@ -273,16 +276,17 @@ The `CheckTitle` field must be plain text, clearly and succinctly define **the b
**Always write the `CheckTitle` to describe the *PASS* case**, the desired secure or compliant state of the resource(s). This helps ensure that findings are easy to interpret and that the title always reflects the best practice being met.
-For detailed guidelines on writing effective check titles, including how to determine singular vs. plural scope and common mistakes to avoid, see [Check Title Guidelines](./check-metadata-guidelines.md#check-title-guidelines).
+For detailed guidelines on writing effective check titles, including how to determine singular vs. plural scope and common mistakes to avoid, see [Check Title Guidelines](/developer-guide/check-metadata-guidelines#check-title-guidelines).
#### CheckType
-???+ warning
- This field is only applicable to the AWS provider.
+
+This field is only applicable to the AWS provider.
+
It follows the [AWS Security Hub Types](https://docs.aws.amazon.com/securityhub/latest/userguide/asff-required-attributes.html#Types) format using the pattern `namespace/category/classifier`.
-For the complete AWS Security Hub selection guidelines, see [Check Type Guidelines](./check-metadata-guidelines.md#check-type-guidelines-aws-only).
+For the complete AWS Security Hub selection guidelines, see [Check Type Guidelines](/developer-guide/check-metadata-guidelines#check-type-guidelines-aws-only).
#### ServiceName
@@ -314,13 +318,13 @@ The type of resource being audited. This field helps categorize and organize fin
A concise, natural language explanation that **clearly describes what the finding means**, focusing on clarity and context rather than technical implementation details. Use simple paragraphs with line breaks if needed, but avoid sections, code blocks, or complex formatting. This field is limited to maximum 400 characters.
-For detailed writing guidelines and common mistakes to avoid, see [Description Guidelines](./check-metadata-guidelines.md#description-guidelines).
+For detailed writing guidelines and common mistakes to avoid, see [Description Guidelines](/developer-guide/check-metadata-guidelines#description-guidelines).
#### Risk
A clear, natural language explanation of **why this finding poses a cybersecurity risk**. Focus on how it may impact confidentiality, integrity, or availability. If those do not apply, describe any relevant operational or financial risks. Use simple paragraphs with line breaks if needed, but avoid sections, code blocks, or complex formatting. Limit your explanation to 400 characters.
-For detailed writing guidelines and common mistakes to avoid, see [Risk Guidelines](./check-metadata-guidelines.md#risk-guidelines).
+For detailed writing guidelines and common mistakes to avoid, see [Risk Guidelines](/developer-guide/check-metadata-guidelines#risk-guidelines).
#### RelatedUrl
@@ -328,9 +332,10 @@ For detailed writing guidelines and common mistakes to avoid, see [Risk Guidelin
#### AdditionalURLs
-???+ warning
- URLs must be valid and not repeated.
+
+URLs must be valid and not repeated.
+
A list of official documentation URLs for further reading. These should be authoritative sources that provide additional context, best practices, or detailed information about the security control being checked. Prefer official provider documentation, security standards, or well-established security resources. Avoid third-party blogs or unofficial sources unless they are highly reputable and directly relevant.
#### Remediation
@@ -345,17 +350,17 @@ Provides both code examples and best practice recommendations for addressing the
- **Terraform**: HashiCorp Configuration Language (HCL) code with an example of a compliant configuration.
- **Other**: Manual steps through web interfaces or other tools to make the finding compliant.
- For detailed guidelines on writing remediation code, see [Remediation Code Guidelines](./check-metadata-guidelines.md#remediation-code-guidelines).
+ For detailed guidelines on writing remediation code, see [Remediation Code Guidelines](/developer-guide/check-metadata-guidelines#remediation-code-guidelines).
- **Recommendation**
- - **Text**: Generic best practice guidance in natural language using Markdown format (maximum 400 characters). For writing guidelines, see [Recommendation Guidelines](./check-metadata-guidelines.md#recommendation-guidelines).
+ - **Text**: Generic best practice guidance in natural language using Markdown format (maximum 400 characters). For writing guidelines, see [Recommendation Guidelines](/developer-guide/check-metadata-guidelines#recommendation-guidelines).
- **Url**: [Prowler Hub URL](https://hub.prowler.com/) of the check. This URL is always composed by `https://hub.prowler.com/check/`.
#### Categories
One or more functional groupings used for execution filtering (e.g., `internet-exposed`). You can define new categories just by adding to this field.
-For the complete list of available categories, see [Categories Guidelines](./check-metadata-guidelines.md#categories-guidelines).
+For the complete list of available categories, see [Categories Guidelines](/developer-guide/check-metadata-guidelines#categories-guidelines).
#### DependsOn
diff --git a/docs/developer-guide/configurable-checks.md b/docs/developer-guide/configurable-checks.mdx
similarity index 94%
rename from docs/developer-guide/configurable-checks.md
rename to docs/developer-guide/configurable-checks.mdx
index aad072ddd5..76b339601d 100644
--- a/docs/developer-guide/configurable-checks.md
+++ b/docs/developer-guide/configurable-checks.mdx
@@ -1,4 +1,6 @@
-# Configurable Checks in Prowler
+---
+title: 'Configurable Checks in Prowler'
+---
Prowler empowers users to extend and adapt cloud security coverage by making checks configurable through the use of the `audit_config` object. This approach enables customization of checks to meet specific requirements through a configuration file.
@@ -41,6 +43,6 @@ When adding a new configurable check to Prowler, update the following files:
- **Test Fixtures:** If tests depend on this configuration, add the variable to `tests/config/fixtures/config.yaml`.
- **Documentation:** Document the new variable in the list of configurable checks in `docs/tutorials/configuration_file.md`.
-For a complete list of checks that already support configuration, see the [Configuration File Tutorial](../tutorials/configuration_file.md).
+For a complete list of checks that already support configuration, see the [Configuration File Tutorial](/user-guide/cli/tutorials/configuration_file).
This approach ensures that checks are easily configurable, making Prowler highly adaptable to different environments and requirements.
diff --git a/docs/developer-guide/debugging.md b/docs/developer-guide/debugging.mdx
similarity index 98%
rename from docs/developer-guide/debugging.md
rename to docs/developer-guide/debugging.mdx
index a323ec0187..647b23c614 100644
--- a/docs/developer-guide/debugging.md
+++ b/docs/developer-guide/debugging.mdx
@@ -1,4 +1,6 @@
-# Debugging in Prowler
+---
+title: 'Debugging in Prowler'
+---
Debugging in Prowler simplifies the development process, allowing developers to efficiently inspect and resolve unexpected issues during execution.
diff --git a/docs/developer-guide/documentation.md b/docs/developer-guide/documentation.md
deleted file mode 100644
index 50ac0956e7..0000000000
--- a/docs/developer-guide/documentation.md
+++ /dev/null
@@ -1,28 +0,0 @@
-## Contributing to Documentation
-
-Prowler documentation is built using `mkdocs`, allowing contributors to easily add or enhance documentation.
-
-### Installation and Setup
-
-Install all necessary dependencies using: `poetry install --with docs`.
-
-1. Install `mkdocs` using your preferred package manager.
-
-2. Running the Documentation Locally
-Navigate to the `prowler` repository folder.
-Start the local documentation server by running: `mkdocs serve`.
-Open `http://localhost:8000` in your browser to view live updates.
-
-3. Making Documentation Changes
-Make all needed changes to docs or add new documents. Edit existing Markdown (.md) files inside `prowler/docs`.
-To add new sections or files, update the `mkdocs.yaml` file located in the root directory of Prowler’s repository.
-
-4. Submitting Changes
-
-Once documentation updates are complete:
-
-Submit a pull request for review.
-
-The Prowler team will assess and merge contributions.
-
-Your efforts help improve Prowler documentation—thank you for contributing!
diff --git a/docs/developer-guide/documentation.mdx b/docs/developer-guide/documentation.mdx
new file mode 100644
index 0000000000..a7a4e97d4e
--- /dev/null
+++ b/docs/developer-guide/documentation.mdx
@@ -0,0 +1,42 @@
+---
+title: 'Contributing to Documentation'
+---
+
+Prowler documentation is built using [Mintlify](https://www.mintlify.com/docs), allowing contributors to easily add or enhance documentation.
+
+## Installation and Setup
+
+
+
+ ```bash
+ npm i -g mint
+ ```
+ For detailed instructions, check the [Mintlify documentation](https://www.mintlify.com/docs/installation).
+
+
+
+ Start the local development server to preview changes in real-time.
+
+ ```bash
+ mint dev
+ ```
+
+ A local preview of your documentation will be available at http://localhost:3000
+
+
+
+ Edit existing Markdown (.mdx) files inside the `docs` directory or add new documents.
+
+ For reference about formatting, check the [Mintlify documentation](https://www.mintlify.com/docs/create/text).
+
+ To add new sections or files, update the [`docs/docs.json`](https://github.com/prowler-cloud/prowler/blob/master/docs/docs.json) file to include them in the navigation.
+
+
+
+ Once documentation updates are complete, submit a pull request for review.
+
+ The Prowler team will assess and merge contributions.
+
+
+
+Your efforts help improve Prowler documentation—thank you for contributing!
diff --git a/docs/developer-guide/gcp-details.md b/docs/developer-guide/gcp-details.mdx
similarity index 88%
rename from docs/developer-guide/gcp-details.md
rename to docs/developer-guide/gcp-details.mdx
index dc13958a05..6011b784c9 100644
--- a/docs/developer-guide/gcp-details.md
+++ b/docs/developer-guide/gcp-details.mdx
@@ -1,12 +1,14 @@
-# Google Cloud Provider
+---
+title: 'Google Cloud Provider'
+---
This page details the [Google Cloud Platform (GCP)](https://cloud.google.com/) provider implementation in Prowler.
-By default, Prowler will audit all the GCP projects that the authenticated identity can access. To configure it, follow the [GCP getting started guide](../tutorials/gcp/getting-started-gcp.md).
+By default, Prowler will audit all the GCP projects that the authenticated identity can access. To configure it, follow the [GCP getting started guide](/user-guide/providers/gcp/getting-started-gcp).
## GCP Provider Classes Architecture
-The GCP provider implementation follows the general [Provider structure](./provider.md). This section focuses on the GCP-specific implementation, highlighting how the generic provider concepts are realized for GCP in Prowler. For a full overview of the provider pattern, base classes, and extension guidelines, see [Provider documentation](./provider.md).
+The GCP provider implementation follows the general [Provider structure](/developer-guide/provider). This section focuses on the GCP-specific implementation, highlighting how the generic provider concepts are realized for GCP in Prowler. For a full overview of the provider pattern, base classes, and extension guidelines, see [Provider documentation](/developer-guide/provider).
### Main Class
@@ -32,7 +34,7 @@ The GCP provider implementation follows the general [Provider structure](./provi
### `GCPService` (Service Base Class)
- **Location:** [`prowler/providers/gcp/lib/service/service.py`](https://github.com/prowler-cloud/prowler/blob/master/prowler/providers/gcp/lib/service/service.py)
-- **Purpose:** Abstract base class that all GCP service-specific classes inherit from. This implements the generic service pattern (described in [service page](./services.md#service-base-class)) specifically for GCP.
+- **Purpose:** Abstract base class that all GCP service-specific classes inherit from. This implements the generic service pattern (described in [service page](/developer-guide/services#service-base-class)) specifically for GCP.
- **Key GCP Responsibilities:**
- Receives a `GcpProvider` instance to access session, identity, and configuration.
- Manages clients for all services by project.
@@ -95,12 +97,12 @@ def _get_instances(self):
## Specific Patterns in GCP Services
-The generic service pattern is described in [service page](./services.md#service-structure-and-initialisation). You can find all the currently implemented services in the following locations:
+The generic service pattern is described in [service page](/developer-guide/services#service-structure-and-initialisation). You can find all the currently implemented services in the following locations:
- Directly in the code, in location [`prowler/providers/gcp/services/`](https://github.com/prowler-cloud/prowler/tree/master/prowler/providers/gcp/services)
- In the [Prowler Hub](https://hub.prowler.com/) for a more human-readable view.
-The best reference to understand how to implement a new service is following the [service implementation documentation](./services.md#adding-a-new-service) and taking other services already implemented as reference. In next subsection you can find a list of common patterns that are used accross all GCP services.
+The best reference to understand how to implement a new service is following the [service implementation documentation](/developer-guide/services#adding-a-new-service) and taking other services already implemented as reference. In next subsection you can find a list of common patterns that are used accross all GCP services.
### GCP Service Common Patterns
@@ -117,12 +119,12 @@ The best reference to understand how to implement a new service is following the
## Specific Patterns in GCP Checks
-The GCP checks pattern is described in [checks page](./checks.md). You can find all the currently implemented checks:
+The GCP checks pattern is described in [checks page](/developer-guide/checks). You can find all the currently implemented checks:
- Directly in the code, within each service folder, each check has its own folder named after the name of the check. (e.g. [`prowler/providers/gcp/services/iam/iam_sa_user_managed_key_unused/`](https://github.com/prowler-cloud/prowler/tree/master/prowler/providers/gcp/services/iam/iam_sa_user_managed_key_unused))
- In the [Prowler Hub](https://hub.prowler.com/) for a more human-readable view.
-The best reference to understand how to implement a new check is following the [GCP check implementation documentation](./checks.md#creating-a-check) and taking other similar checks as reference.
+The best reference to understand how to implement a new check is following the [GCP check implementation documentation](/developer-guide/checks#creating-a-check) and taking other similar checks as reference.
### Check Report Class
diff --git a/docs/developer-guide/github-details.md b/docs/developer-guide/github-details.mdx
similarity index 86%
rename from docs/developer-guide/github-details.md
rename to docs/developer-guide/github-details.mdx
index 97a1cffac3..1b5546cd16 100644
--- a/docs/developer-guide/github-details.md
+++ b/docs/developer-guide/github-details.mdx
@@ -1,12 +1,14 @@
-# GitHub Provider
+---
+title: 'GitHub Provider'
+---
This page details the [GitHub](https://github.com/) provider implementation in Prowler.
-By default, Prowler will audit the GitHub account - scanning all repositories, organizations, and applications that your configured credentials can access. To configure it, follow the [GitHub getting started guide](../tutorials/github/getting-started-github.md).
+By default, Prowler will audit the GitHub account - scanning all repositories, organizations, and applications that your configured credentials can access. To configure it, follow the [GitHub getting started guide](/user-guide/providers/github/getting-started-github).
## GitHub Provider Classes Architecture
-The GitHub provider implementation follows the general [Provider structure](./provider.md). This section focuses on the GitHub-specific implementation, highlighting how the generic provider concepts are realized for GitHub in Prowler. For a full overview of the provider pattern, base classes, and extension guidelines, see [Provider documentation](./provider.md).
+The GitHub provider implementation follows the general [Provider structure](/developer-guide/provider). This section focuses on the GitHub-specific implementation, highlighting how the generic provider concepts are realized for GitHub in Prowler. For a full overview of the provider pattern, base classes, and extension guidelines, see [Provider documentation](/developer-guide/provider).
### `GithubProvider` (Main Class)
@@ -48,12 +50,12 @@ The GitHub provider implementation follows the general [Provider structure](./pr
## Specific Patterns in GitHub Services
-The generic service pattern is described in [service page](./services.md#service-structure-and-initialisation). You can find all the currently implemented services in the following locations:
+The generic service pattern is described in [service page](/developer-guide/services#service-structure-and-initialisation). You can find all the currently implemented services in the following locations:
- Directly in the code, in location [`prowler/providers/github/services/`](https://github.com/prowler-cloud/prowler/tree/master/prowler/providers/github/services)
- In the [Prowler Hub](https://hub.prowler.com/) for a more human-readable view.
-The best reference to understand how to implement a new service is following the [service implementation documentation](./services.md#adding-a-new-service) and by taking other already implemented services as reference.
+The best reference to understand how to implement a new service is following the [service implementation documentation](/developer-guide/services#adding-a-new-service) and by taking other already implemented services as reference.
### GitHub Service Common Patterns
@@ -66,12 +68,12 @@ The best reference to understand how to implement a new service is following the
## Specific Patterns in GitHub Checks
-The GitHub checks pattern is described in [checks page](./checks.md). You can find all the currently implemented checks in:
+The GitHub checks pattern is described in [checks page](/developer-guide/checks). You can find all the currently implemented checks in:
- Directly in the code, within each service folder, each check has its own folder named after the name of the check. (e.g. [`prowler/providers/github/services/repository/repository_secret_scanning_enabled/`](https://github.com/prowler-cloud/prowler/tree/master/prowler/providers/github/services/repository/repository_secret_scanning_enabled))
- In the [Prowler Hub](https://hub.prowler.com/) for a more human-readable view.
-The best reference to understand how to implement a new check is the [GitHub check implementation documentation](./checks.md#creating-a-check) and by taking other checks as reference.
+The best reference to understand how to implement a new check is the [GitHub check implementation documentation](/developer-guide/checks#creating-a-check) and by taking other checks as reference.
### Check Report Class
diff --git a/docs/developer-guide/integration-testing.md b/docs/developer-guide/integration-testing.md
deleted file mode 100644
index 0d03319c5e..0000000000
--- a/docs/developer-guide/integration-testing.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Integration Tests
-
-Coming soon ...
\ No newline at end of file
diff --git a/docs/developer-guide/integration-testing.mdx b/docs/developer-guide/integration-testing.mdx
new file mode 100644
index 0000000000..e8f0f804f8
--- /dev/null
+++ b/docs/developer-guide/integration-testing.mdx
@@ -0,0 +1,5 @@
+---
+title: 'Integration Tests'
+---
+
+Coming soon ...
diff --git a/docs/developer-guide/integrations.md b/docs/developer-guide/integrations.mdx
similarity index 99%
rename from docs/developer-guide/integrations.md
rename to docs/developer-guide/integrations.mdx
index e3f6789a8e..cb4b242d8c 100644
--- a/docs/developer-guide/integrations.md
+++ b/docs/developer-guide/integrations.mdx
@@ -1,4 +1,6 @@
-# Creating a New Integration
+---
+title: 'Creating a New Integration'
+---
## Introduction
@@ -151,7 +153,7 @@ Refer to the [Prowler Developer Guide](https://docs.prowler.com/projects/prowler
# More properties and methods
```
-
+
* Test Connection Method:
* Validating Credentials or Tokens
diff --git a/docs/developer-guide/introduction.md b/docs/developer-guide/introduction.mdx
similarity index 87%
rename from docs/developer-guide/introduction.md
rename to docs/developer-guide/introduction.mdx
index abc83fb682..5361d4460a 100644
--- a/docs/developer-guide/introduction.md
+++ b/docs/developer-guide/introduction.mdx
@@ -1,4 +1,6 @@
-# Introduction to developing in Prowler
+---
+title: 'Introduction to developing in Prowler'
+---
Extending Prowler
@@ -48,11 +50,12 @@ poetry install --with dev
eval $(poetry env activate)
```
-???+ important
- Starting from Poetry v2.0.0, `poetry shell` has been deprecated in favor of `poetry env activate`.
- If your poetry version is below 2.0.0 you must keep using `poetry shell` to activate your environment.
- In case you have any doubts, consult the [Poetry environment activation guide](https://python-poetry.org/docs/managing-environments/#activating-the-environment).
+
+Starting from Poetry v2.0.0, `poetry shell` has been deprecated in favor of `poetry env activate`.
+If your poetry version is below 2.0.0 you must keep using `poetry shell` to activate your environment.
+In case you have any doubts, consult the [Poetry environment activation guide](https://python-poetry.org/docs/managing-environments/#activating-the-environment).
+
## Contributing to Prowler
### Ways to Contribute
@@ -64,24 +67,24 @@ Here are some ideas for collaborating with Prowler:
2. **Expand Prowler's Capabilities**: Prowler is constantly evolving, and you can be a part of its growth. Whether you are adding checks, supporting new services, or introducing integrations, your contributions help improve the tool for everyone. Here is how you can get involved:
- **Adding New Checks**
- Want to improve Prowler's detection capabilities for your favorite cloud provider? You can contribute by writing new checks. To get started, follow the [create a new check guide](./checks.md).
+ Want to improve Prowler's detection capabilities for your favorite cloud provider? You can contribute by writing new checks. To get started, follow the [create a new check guide](/developer-guide/checks).
- **Adding New Services**
- One key service for your favorite cloud provider is missing? Add it to Prowler! To add a new service, check out the [create a new service guide](./services.md). Do not forget to include relevant checks to validate functionality.
+ One key service for your favorite cloud provider is missing? Add it to Prowler! To add a new service, check out the [create a new service guide](/developer-guide/services). Do not forget to include relevant checks to validate functionality.
- **Adding New Providers**
- If you would like to extend Prowler to work with a new cloud provider, follow the [create a new provider guide](./provider.md). This typically involves setting up new services and checks to ensure compatibility.
+ If you would like to extend Prowler to work with a new cloud provider, follow the [create a new provider guide](/developer-guide/provider). This typically involves setting up new services and checks to ensure compatibility.
- **Adding New Output Formats**
- Want to tailor how results are displayed or exported? You can add custom output formats by following the [create a new output format guide](./outputs.md).
+ Want to tailor how results are displayed or exported? You can add custom output formats by following the [create a new output format guide](/developer-guide/outputs).
- **Adding New Integrations**
- Prowler can work with other tools and platforms through integrations. If you would like to add one, see the [create a new integration guide](./integrations.md).
+ Prowler can work with other tools and platforms through integrations. If you would like to add one, see the [create a new integration guide](/developer-guide/integrations).
- **Proposing or Implementing Features**
Got an idea to make Prowler better? Whether it is a brand-new feature or an enhancement to an existing one, you are welcome to propose it or help implement community-requested improvements.
-3. **Improve Documentation**: Help make Prowler more accessible by enhancing our documentation, fixing typos, or adding examples/tutorials. See the tutorial of how we write our documentation [here](./documentation.md).
+3. **Improve Documentation**: Help make Prowler more accessible by enhancing our documentation, fixing typos, or adding examples/tutorials. See the tutorial of how we write our documentation [here](/developer-guide/documentation).
4. **Bug Fixes**: If you find any issues or bugs, you can report them in the [GitHub Issues](https://github.com/prowler-cloud/prowler/issues) page and if you want you can also fix them.
@@ -105,9 +108,10 @@ pre-commit installed at .git/hooks/pre-commit
Before merging pull requests, several automated checks and utilities ensure code security and updated dependencies:
-???+ note
- These should have been already installed if `poetry install --with dev` was already run.
+
+These should have been already installed if `poetry install --with dev` was already run.
+
- [`bandit`](https://pypi.org/project/bandit/) for code security review.
- [`safety`](https://pypi.org/project/safety/) and [`dependabot`](https://github.com/features/security) for dependencies.
- [`hadolint`](https://github.com/hadolint/hadolint) and [`dockle`](https://github.com/goodwithtech/dockle) for container security.
@@ -123,9 +127,10 @@ All dependencies are listed in the `pyproject.toml` file.
For proper code documentation, refer to the following and follow the code documentation practices presented there: [Google Python Style Guide - Comments and Docstrings](https://github.com/google/styleguide/blob/gh-pages/pyguide.md#38-comments-and-docstrings).
-???+ note
- If you encounter issues when committing to the Prowler repository, use the `--no-verify` flag with the `git commit` command.
+
+If you encounter issues when committing to the Prowler repository, use the `--no-verify` flag with the `git commit` command.
+
### Repository Folder Structure
Understanding the layout of the Prowler codebase will help you quickly find where to add new features, checks, or integrations. The following is a high-level overview from the root of the repository:
@@ -173,4 +178,4 @@ To test Prowler from a specific branch (for example, to try out changes from a p
pipx install "git+https://github.com/prowler-cloud/prowler.git@branch-name"
```
-Replace `branch-name` with the name of the branch you want to test. This will install Prowler in an isolated environment, allowing you to try out the changes safely.
\ No newline at end of file
+Replace `branch-name` with the name of the branch you want to test. This will install Prowler in an isolated environment, allowing you to try out the changes safely.
diff --git a/docs/developer-guide/kubernetes-details.md b/docs/developer-guide/kubernetes-details.mdx
similarity index 83%
rename from docs/developer-guide/kubernetes-details.md
rename to docs/developer-guide/kubernetes-details.mdx
index be4b72f383..fa0c9291f6 100644
--- a/docs/developer-guide/kubernetes-details.md
+++ b/docs/developer-guide/kubernetes-details.mdx
@@ -1,12 +1,14 @@
-# Kubernetes Provider
+---
+title: 'Kubernetes Provider'
+---
This page details the [Kubernetes](https://kubernetes.io/) provider implementation in Prowler.
-By default, Prowler will audit all namespaces in the Kubernetes cluster accessible by the configured context. To configure it, see the [In-Cluster Execution](../tutorials/kubernetes/in-cluster.md) or [Non In-Cluster Execution](../tutorials/kubernetes/outside-cluster.md) guides.
+By default, Prowler will audit all namespaces in the Kubernetes cluster accessible by the configured context. To configure it, see the [In-Cluster Execution](/user-guide/providers/kubernetes/in-cluster) or [Non In-Cluster Execution](/user-guide/providers/kubernetes/outside-cluster) guides.
## Kubernetes Provider Classes Architecture
-The Kubernetes provider implementation follows the general [Provider structure](./provider.md). This section focuses on the Kubernetes-specific implementation, highlighting how the generic provider concepts are realized for Kubernetes in Prowler. For a full overview of the provider pattern, base classes, and extension guidelines, see [Provider documentation](./provider.md).
+The Kubernetes provider implementation follows the general [Provider structure](/developer-guide/provider). This section focuses on the Kubernetes-specific implementation, highlighting how the generic provider concepts are realized for Kubernetes in Prowler. For a full overview of the provider pattern, base classes, and extension guidelines, see [Provider documentation](/developer-guide/provider).
### `KubernetesProvider` (Main Class)
@@ -31,7 +33,7 @@ The Kubernetes provider implementation follows the general [Provider structure](
### `KubernetesService` (Service Base Class)
- **Location:** [`prowler/providers/kubernetes/lib/service/service.py`](https://github.com/prowler-cloud/prowler/blob/master/prowler/providers/kubernetes/lib/service/service.py)
-- **Purpose:** Abstract base class that all Kubernetes service-specific classes inherit from. This implements the generic service pattern (described in [service page](./services.md#service-base-class)) specifically for Kubernetes.
+- **Purpose:** Abstract base class that all Kubernetes service-specific classes inherit from. This implements the generic service pattern (described in [service page](/developer-guide/services#service-base-class)) specifically for Kubernetes.
- **Key Kubernetes Responsibilities:**
- Receives a `KubernetesProvider` instance to access session, identity, and configuration.
- Manages the Kubernetes API client and context.
@@ -50,12 +52,12 @@ The Kubernetes provider implementation follows the general [Provider structure](
## Specific Patterns in Kubernetes Services
-The generic service pattern is described in [service page](./services.md#service-structure-and-initialisation). You can find all the currently implemented services in the following locations:
+The generic service pattern is described in [service page](/developer-guide/services#service-structure-and-initialisation). You can find all the currently implemented services in the following locations:
- Directly in the code, in location [`prowler/providers/kubernetes/services/`](https://github.com/prowler-cloud/prowler/tree/master/prowler/providers/kubernetes/services)
- In the [Prowler Hub](https://hub.prowler.com/) for a more human-readable view.
-The best reference to understand how to implement a new service is following the [service implementation documentation](./services.md#adding-a-new-service) and taking other already implemented services as reference.
+The best reference to understand how to implement a new service is following the [service implementation documentation](/developer-guide/services#adding-a-new-service) and taking other already implemented services as reference.
### Kubernetes Service Common Patterns
@@ -69,12 +71,12 @@ The best reference to understand how to implement a new service is following the
## Specific Patterns in Kubernetes Checks
-The Kubernetes checks pattern is described in [checks page](./checks.md). You can find all the currently implemented checks in:
+The Kubernetes checks pattern is described in [checks page](/developer-guide/checks). You can find all the currently implemented checks in:
- Directly in the code, within each service folder, each check has its own folder named after the name of the check. (e.g. [`prowler/providers/kubernetes/services/rbac/rbac_minimize_wildcard_use_roles/`](https://github.com/prowler-cloud/prowler/tree/master/prowler/providers/kubernetes/services/rbac/rbac_minimize_wildcard_use_roles))
- In the [Prowler Hub](https://hub.prowler.com/) for a more human-readable view.
-The best reference to understand how to implement a new check is following the [Kubernetes check implementation documentation](./checks.md#creating-a-check) and taking other checks as reference.
+The best reference to understand how to implement a new check is following the [Kubernetes check implementation documentation](/developer-guide/checks#creating-a-check) and taking other checks as reference.
### Check Report Class
diff --git a/docs/developer-guide/lighthouse.md b/docs/developer-guide/lighthouse.mdx
similarity index 89%
rename from docs/developer-guide/lighthouse.md
rename to docs/developer-guide/lighthouse.mdx
index e01067844f..25afd51728 100644
--- a/docs/developer-guide/lighthouse.md
+++ b/docs/developer-guide/lighthouse.mdx
@@ -1,4 +1,6 @@
-# Extending Prowler Lighthouse AI
+---
+title: 'Extending Prowler Lighthouse AI'
+---
This guide helps developers customize and extend Prowler Lighthouse AI by adding or modifying AI agents.
@@ -15,9 +17,10 @@ AI agents fall into two main categories:
Prowler Lighthouse AI is an autonomous agent - selecting the right tool(s) based on the users query.
-???+ note
- To learn more about AI agents, read [Anthropic's blog post on building effective agents](https://www.anthropic.com/engineering/building-effective-agents).
+
+To learn more about AI agents, read [Anthropic's blog post on building effective agents](https://www.anthropic.com/engineering/building-effective-agents).
+
### LLM Dependency
The autonomous nature of agents depends on the underlying LLM. Autonomous agents using identical system prompts and tools but powered by different LLM providers might approach user queries differently. Agent with one LLM might solve a problem efficiently, while with another it might take a different route or fail entirely.
@@ -30,7 +33,7 @@ Prowler Lighthouse AI uses a multi-agent architecture orchestrated by the [Langg
### Architecture Components
-
+
Prowler Lighthouse AI integrates with the NextJS application:
@@ -67,9 +70,10 @@ Modifying the supervisor prompt allows you to:
- Modify task delegation to specialized agents
- Set up guardrails (query types to answer or decline)
-???+ note
- The supervisor agent should not have its own tools. This design keeps the system modular and maintainable.
+
+The supervisor agent should not have its own tools. This design keeps the system modular and maintainable.
+
### How to Create New Specialized Agents
The supervisor agent and all specialized agents are defined in the `route.ts` file. The supervisor agent uses [langgraph-supervisor](https://www.npmjs.com/package/@langchain/langgraph-supervisor), while other agents use the prebuilt [create-react-agent](https://langchain-ai.github.io/langgraphjs/how-tos/create-react-agent/).
@@ -77,14 +81,16 @@ The supervisor agent and all specialized agents are defined in the `route.ts` fi
To add new capabilities or all Lighthouse AI to interact with other APIs, create additional specialized agents:
1. First determine what the new agent would do. Create a detailed prompt defining the agent's purpose and capabilities. You can see an example from [here](https://github.com/prowler-cloud/prowler/blob/master/ui/lib/lighthouse/prompts.ts#L359-L385).
-???+ note
- Ensure that the new agent's capabilities don't collide with existing agents. For example, if there's already a *findings_agent* that talks to findings APIs don't create a new agent to do the same.
+
+Ensure that the new agent's capabilities don't collide with existing agents. For example, if there's already a *findings_agent* that talks to findings APIs don't create a new agent to do the same.
+
2. Create necessary tools for the agents to access specific data or perform actions. A tool is a specialized function that extends the capabilities of LLM by allowing it to access external data or APIs. A tool is triggered by LLM based on the description of the tool and the user's query.
For example, the description of `getScanTool` is "Fetches detailed information about a specific scan by its ID." If the description doesn't convey what the tool is capable of doing, LLM will not invoke the function. If the description of `getScanTool` was set to something random or not set at all, LLM will not answer queries like "Give me the critical issues from the scan ID xxxxxxxxxxxxxxx"
-???+ note
- Ensure that one tool is added to one agent only. Adding tools is optional. There can be agents with no tools at all.
+
+Ensure that one tool is added to one agent only. Adding tools is optional. There can be agents with no tools at all.
+
3. Use the `createReactAgent` function to define a new agent. For example, the rolesAgent name is "roles_agent" and has access to call tools "*getRolesTool*" and "*getRoleTool*"
```js
const rolesAgent = createReactAgent({
diff --git a/docs/developer-guide/llm-details.md b/docs/developer-guide/llm-details.mdx
similarity index 92%
rename from docs/developer-guide/llm-details.md
rename to docs/developer-guide/llm-details.mdx
index 0c49422ada..3647552c0f 100644
--- a/docs/developer-guide/llm-details.md
+++ b/docs/developer-guide/llm-details.mdx
@@ -1,12 +1,14 @@
-# LLM Provider
+---
+title: 'LLM Provider'
+---
This page details the [Large Language Model (LLM)](https://en.wikipedia.org/wiki/Large_language_model) provider implementation in Prowler.
-The LLM provider enables security testing of language models using red team techniques. By default, Prowler uses the built-in LLM configuration that targets OpenAI models with comprehensive security test suites. To configure it, follow the [LLM getting started guide](../tutorials/llm/getting-started-llm.md).
+The LLM provider enables security testing of language models using red team techniques. By default, Prowler uses the built-in LLM configuration that targets OpenAI models with comprehensive security test suites. To configure it, follow the [LLM getting started guide](/user-guide/providers/llm/getting-started-llm).
## LLM Provider Classes Architecture
-The LLM provider implementation follows the general [Provider structure](./provider.md). This section focuses on the LLM-specific implementation, highlighting how the generic provider concepts are realized for LLM security testing in Prowler. For a full overview of the provider pattern, base classes, and extension guidelines, see [Provider documentation](./provider.md).
+The LLM provider implementation follows the general [Provider structure](/developer-guide/provider). This section focuses on the LLM-specific implementation, highlighting how the generic provider concepts are realized for LLM security testing in Prowler. For a full overview of the provider pattern, base classes, and extension guidelines, see [Provider documentation](/developer-guide/provider).
### Main Class
diff --git a/docs/developer-guide/m365-details.md b/docs/developer-guide/m365-details.mdx
similarity index 86%
rename from docs/developer-guide/m365-details.md
rename to docs/developer-guide/m365-details.mdx
index 65fcd3f622..185e1e022b 100644
--- a/docs/developer-guide/m365-details.md
+++ b/docs/developer-guide/m365-details.mdx
@@ -1,8 +1,10 @@
-# Microsoft 365 (M365) Provider
+---
+title: 'Microsoft 365 (M365) Provider'
+---
This page details the [Microsoft 365 (M365)](https://www.microsoft.com/en-us/microsoft-365) provider implementation in Prowler.
-By default, Prowler will audit the Microsoft Entra ID tenant and its supported services. To configure it, follow the [M365 getting started guide](../tutorials/microsoft365/getting-started-m365.md).
+By default, Prowler will audit the Microsoft Entra ID tenant and its supported services. To configure it, follow the [M365 getting started guide](/user-guide/providers/microsoft365/getting-started-m365).
---
@@ -15,14 +17,14 @@ By default, Prowler will audit the Microsoft Entra ID tenant and its supported s
- **Required modules:**
- [ExchangeOnlineManagement](https://www.powershellgallery.com/packages/ExchangeOnlineManagement/3.6.0) (≥ 3.6.0)
- [MicrosoftTeams](https://www.powershellgallery.com/packages/MicrosoftTeams/6.6.0) (≥ 6.6.0)
-- If you use Prowler Cloud or the official containers, PowerShell is pre-installed. For local or pip installations, you must install PowerShell and the modules yourself. See [Authentication: Supported PowerShell Versions](../tutorials/microsoft365/authentication.md#supported-powershell-versions) and [Needed PowerShell Modules](../tutorials/microsoft365/authentication.md#required-powershell-modules).
-- For more details and troubleshooting, see [Use of PowerShell in M365](../tutorials/microsoft365/use-of-powershell.md).
+- If you use Prowler Cloud or the official containers, PowerShell is pre-installed. For local or pip installations, you must install PowerShell and the modules yourself. See [Authentication: Supported PowerShell Versions](/user-guide/providers/microsoft365/authentication#supported-powershell-versions) and [Needed PowerShell Modules](/user-guide/providers/microsoft365/authentication#required-powershell-modules).
+- For more details and troubleshooting, see [Use of PowerShell in M365](/user-guide/providers/microsoft365/use-of-powershell).
---
## M365 Provider Classes Architecture
-The M365 provider implementation follows the general [Provider structure](./provider.md). This section focuses on the M365-specific implementation, highlighting how the generic provider concepts are realized for M365 in Prowler. For a full overview of the provider pattern, base classes, and extension guidelines, see [Provider documentation](./provider.md).
+The M365 provider implementation follows the general [Provider structure](/developer-guide/provider). This section focuses on the M365-specific implementation, highlighting how the generic provider concepts are realized for M365 in Prowler. For a full overview of the provider pattern, base classes, and extension guidelines, see [Provider documentation](/developer-guide/provider).
### `M365Provider` (Main Class)
@@ -73,12 +75,12 @@ The M365 provider implementation follows the general [Provider structure](./prov
## Specific Patterns in M365 Services
-The generic service pattern is described in [service page](./services.md#service-structure-and-initialisation). You can find all the currently implemented services in the following locations:
+The generic service pattern is described in [service page](/developer-guide/services#service-structure-and-initialisation). You can find all the currently implemented services in the following locations:
- Directly in the code, in location [`prowler/providers/m365/services/`](https://github.com/prowler-cloud/prowler/tree/master/prowler/providers/m365/services)
- In the [Prowler Hub](https://hub.prowler.com/) for a more human-readable view.
-The best reference to understand how to implement a new service is by following the [service implementation documentation](./services.md#adding-a-new-service) and by taking other already implemented services as reference.
+The best reference to understand how to implement a new service is by following the [service implementation documentation](/developer-guide/services#adding-a-new-service) and by taking other already implemented services as reference.
### M365 Service Common Patterns
@@ -92,12 +94,12 @@ The best reference to understand how to implement a new service is by following
## Specific Patterns in M365 Checks
-The M365 checks pattern is described in [checks page](./checks.md). You can find all the currently implemented checks in:
+The M365 checks pattern is described in [checks page](/developer-guide/checks). You can find all the currently implemented checks in:
- Directly in the code, within each service folder, each check has its own folder named after the name of the check. (e.g. [`prowler/providers/m365/services/entra/entra_users_mfa_enabled/`](https://github.com/prowler-cloud/prowler/tree/master/prowler/providers/m365/services/entra/entra_users_mfa_enabled))
- In the [Prowler Hub](https://hub.prowler.com/) for a more human-readable view.
-The best reference to understand how to implement a new check is following the [M365 check implementation documentation](./checks.md#creating-a-check) and by taking other checks as reference.
+The best reference to understand how to implement a new check is following the [M365 check implementation documentation](/developer-guide/checks#creating-a-check) and by taking other checks as reference.
### Check Report Class
diff --git a/docs/developer-guide/outputs.md b/docs/developer-guide/outputs.mdx
similarity index 99%
rename from docs/developer-guide/outputs.md
rename to docs/developer-guide/outputs.mdx
index 60a9f6c498..15b785b799 100644
--- a/docs/developer-guide/outputs.md
+++ b/docs/developer-guide/outputs.mdx
@@ -1,4 +1,6 @@
-# Create a Custom Output Format
+---
+title: 'Create a Custom Output Format'
+---
## Introduction
diff --git a/docs/developer-guide/provider.md b/docs/developer-guide/provider.mdx
similarity index 89%
rename from docs/developer-guide/provider.md
rename to docs/developer-guide/provider.mdx
index a258ff333d..e0b7c62284 100644
--- a/docs/developer-guide/provider.md
+++ b/docs/developer-guide/provider.mdx
@@ -1,4 +1,6 @@
-# Prowler Providers
+---
+title: 'Prowler Providers'
+---
## Introduction
@@ -14,9 +16,10 @@ A provider is any platform or service that offers resources, data, or functional
For providers supported by Prowler, refer to [Prowler Hub](https://hub.prowler.com/).
-???+ important
- There are some custom providers added by the community, like [NHN Cloud](https://www.nhncloud.com/), that are not maintained by the Prowler team, but can be used in the Prowler CLI. They can be checked directly at the [Prowler GitHub repository](https://github.com/prowler-cloud/prowler/tree/master/prowler/providers).
+
+There are some custom providers added by the community, like [NHN Cloud](https://www.nhncloud.com/), that are not maintained by the Prowler team, but can be used in the Prowler CLI. They can be checked directly at the [Prowler GitHub repository](https://github.com/prowler-cloud/prowler/tree/master/prowler/providers).
+
## Adding a New Provider
To integrate an unsupported Prowler provider and implement its security checks, create a dedicated folder for all related files (e.g., services, checks)."
@@ -31,7 +34,7 @@ Within this folder the following folders are also to be created:
- `arguments/arguments.py` – Handles provider-specific argument parsing.
- `mutelist/mutelist.py` – Manages the mutelist functionality for the provider.
-- `services` – Stores all [services](./services.md) that the provider offers and want to be audited by [Prowler checks](./checks.md).
+- `services` – Stores all [services](/developer-guide/services) that the provider offers and want to be audited by [Prowler checks](/developer-guide/checks).
- `__init__.py` (empty) – Ensures Python recognizes this folder as a package.
@@ -41,9 +44,10 @@ Within this folder the following folders are also to be created:
By adhering to this structure, Prowler can effectively support services and security checks for additional providers.
-???+ important
- If your new provider requires a Python library (such as an official SDK or API client) to connect to its services, make sure to add it as a dependency in the `pyproject.toml` file. This ensures that all contributors and users have the necessary packages installed when working with your provider.
+
+If your new provider requires a Python library (such as an official SDK or API client) to connect to its services, make sure to add it as a dependency in the `pyproject.toml` file. This ensures that all contributors and users have the necessary packages installed when working with your provider.
+
## Provider Structure in Prowler
Prowler's provider architecture is designed to facilitate security audits through a generic service tailored to each provider. This is accomplished by passing the necessary parameters to the constructor, which initializes all required session values.
diff --git a/docs/developer-guide/renaming-checks.md b/docs/developer-guide/renaming-checks.mdx
similarity index 99%
rename from docs/developer-guide/renaming-checks.md
rename to docs/developer-guide/renaming-checks.mdx
index fb19070e22..7a593542f4 100644
--- a/docs/developer-guide/renaming-checks.md
+++ b/docs/developer-guide/renaming-checks.mdx
@@ -1,4 +1,6 @@
-# Renaming Checks in Prowler
+---
+title: 'Renaming Checks in Prowler'
+---
To rename a check in Prowler, follow these steps when aligning with Check ID structure, fixing typos, or updating check logic that requires a new name.
diff --git a/docs/developer-guide/security-compliance-framework.md b/docs/developer-guide/security-compliance-framework.mdx
similarity index 97%
rename from docs/developer-guide/security-compliance-framework.md
rename to docs/developer-guide/security-compliance-framework.mdx
index 95b7677605..bb01af8271 100644
--- a/docs/developer-guide/security-compliance-framework.md
+++ b/docs/developer-guide/security-compliance-framework.mdx
@@ -1,4 +1,6 @@
-# Creating a New Security Compliance Framework in Prowler
+---
+title: 'Creating a New Security Compliance Framework in Prowler'
+---
## Introduction
diff --git a/docs/developer-guide/services.md b/docs/developer-guide/services.mdx
similarity index 89%
rename from docs/developer-guide/services.md
rename to docs/developer-guide/services.mdx
index 7615404cd9..8f7382f0e9 100644
--- a/docs/developer-guide/services.md
+++ b/docs/developer-guide/services.mdx
@@ -1,15 +1,18 @@
-# Prowler Services
+---
+title: 'Prowler Services'
+---
-Here you can find how to create a new service, or to complement an existing one, for a [Prowler Provider](./provider.md).
+Here you can find how to create a new service, or to complement an existing one, for a [Prowler Provider](/developer-guide/provider).
-???+note
- First ensure that the provider you want to add the service is already created. It can be checked [here](https://github.com/prowler-cloud/prowler/tree/master/prowler/providers). If the provider is not present, please refer to the [Provider](./provider.md) documentation to create it from scratch.
+
+First ensure that the provider you want to add the service is already created. It can be checked [here](https://github.com/prowler-cloud/prowler/tree/master/prowler/providers). If the provider is not present, please refer to the [Provider](/developer-guide/provider) documentation to create it from scratch.
+
## Introduction
-In Prowler, a **service** represents a specific solution or resource offered by one of the supported [Prowler Providers](./provider.md), for example, [EC2](https://aws.amazon.com/ec2/) in AWS, or [Microsoft Exchange](https://www.microsoft.com/en-us/microsoft-365/exchange/exchange-online) in M365. Services are the building blocks that allow Prowler interact directly with the various resources exposed by each provider.
+In Prowler, a **service** represents a specific solution or resource offered by one of the supported [Prowler Providers](/developer-guide/provider), for example, [EC2](https://aws.amazon.com/ec2/) in AWS, or [Microsoft Exchange](https://www.microsoft.com/en-us/microsoft-365/exchange/exchange-online) in M365. Services are the building blocks that allow Prowler interact directly with the various resources exposed by each provider.
-Each service is implemented as a class that encapsulates all the logic, data models, and API interactions required to gather and store information about that service's resources. All of this data is used by the [Prowler checks](./checks.md) to generate the security findings.
+Each service is implemented as a class that encapsulates all the logic, data models, and API interactions required to gather and store information about that service's resources. All of this data is used by the [Prowler checks](/developer-guide/checks) to generate the security findings.
## Adding a New Service
@@ -159,9 +162,10 @@ class (ServiceParentClass):
)
```
-???+note
- To prevent false findings, when Prowler fails to retrieve items due to Access Denied or similar errors, the affected item's value is set to `None`.
+
+To prevent false findings, when Prowler fails to retrieve items due to Access Denied or similar errors, the affected item's value is set to `None`.
+
#### Resource Models
Resource models define structured classes used within services to store and process data extracted from API calls. They are defined in the same file as the service class, but outside of the class, usually at the bottom of the file.
@@ -231,11 +235,11 @@ Before implementing a new service, verify that Prowler's existing permissions fo
Provider-Specific Permissions Documentation:
-- [AWS](../tutorials/aws/authentication.md#required-permissions)
-- [Azure](../tutorials/azure/authentication.md#required-permissions)
-- [GCP](../tutorials/gcp/authentication.md#required-permissions)
-- [M365](../tutorials/microsoft365/authentication.md#required-permissions)
-- [GitHub](../tutorials/github/authentication.md)
+- [AWS](/user-guide/providers/aws/authentication#required-permissions)
+- [Azure](/user-guide/providers/azure/authentication#required-permissions)
+- [GCP](/user-guide/providers/gcp/authentication#required-permissions)
+- [M365](/user-guide/providers/microsoft365/authentication#required-permissions)
+- [GitHub](/user-guide/providers/github/authentication)
## Best Practices
diff --git a/docs/developer-guide/unit-testing.md b/docs/developer-guide/unit-testing.mdx
similarity index 96%
rename from docs/developer-guide/unit-testing.md
rename to docs/developer-guide/unit-testing.mdx
index ab4e4e3bf7..8713988440 100644
--- a/docs/developer-guide/unit-testing.md
+++ b/docs/developer-guide/unit-testing.mdx
@@ -1,4 +1,6 @@
-# Unit Tests for Prowler Checks
+---
+title: 'Unit Tests for Prowler Checks'
+---
Unit tests for Prowler checks vary based on the provider being evaluated.
@@ -39,7 +41,7 @@ To execute the Prowler test suite, install the necessary dependencies listed in
### Prerequisites
-If you have not installed Prowler yet, refer to the [developer guide introduction](./introduction.md#getting-the-code-and-installing-all-dependencies).
+If you have not installed Prowler yet, refer to the [developer guide introduction](/developer-guide/introduction#getting-the-code-and-installing-all-dependencies).
### Executing Tests
@@ -57,16 +59,18 @@ Other Commands for Running Tests
- Running tests for a provider check:
`pytest -n auto -vvv -s -x tests/providers//services//`
-???+ note
- Refer to the [pytest documentation](https://docs.pytest.org/en/7.1.x/getting-started.html) for more details.
+
+Refer to the [pytest documentation](https://docs.pytest.org/en/7.1.x/getting-started.html) for more details.
+
## AWS Testing Approaches
For AWS provider, different testing approaches apply based on API coverage based on several criteria.
-???+ note
- Prowler leverages and contributes to the[Moto](https://github.com/getmoto/moto) library for mocking AWS infrastructure in tests.
+
+Prowler leverages and contributes to the[Moto](https://github.com/getmoto/moto) library for mocking AWS infrastructure in tests.
+
- AWS API Calls Covered by [Moto](https://github.com/getmoto/moto):
- Service Tests: `@mock_aws`
- Checks Tests: `@mock_aws`
@@ -205,12 +209,14 @@ class Test_iam_password_policy_uppercase:
If the IAM service required for testing is not supported by the Moto library, use [MagicMock](https://docs.python.org/3/library/unittest.mock.html#unittest.mock.MagicMock) to inject objects into the service client.
-???+ warning
- As stated above, direct service instantiation must be avoided to prevent actual AWS API calls.
+
+As stated above, direct service instantiation must be avoided to prevent actual AWS API calls.
-???+ note
- The example below demonstrates the IAM GetAccountPasswordPolicy API, which is covered by Moto, but is used for instructional purposes only.
+
+
+The example below demonstrates the IAM GetAccountPasswordPolicy API, which is covered by Moto, but is used for instructional purposes only.
+
#### Mocking Service Objects Using MagicMock
The following code demonstrates how to use MagicMock to create service objects.
@@ -377,13 +383,15 @@ class Test_iam_password_policy_uppercase:
# Refer to the previous section for the check test, as the implementation remains unchanged.
```
-???+ note
- This example does not use Moto to simplify the setup.
- However, if additional `moto` decorators are applied alongside the patch, Moto will automatically intercept the call to `orig(self, operation_name, kwarg)`.
+
+This example does not use Moto to simplify the setup.
+However, if additional `moto` decorators are applied alongside the patch, Moto will automatically intercept the call to `orig(self, operation_name, kwarg)`.
-???+ note
- The source of the above implementation can be found here:[Patch Other Services with Moto](https://docs.getmoto.org/en/latest/docs/services/patching\_other\_services.html)
+
+
+The source of the above implementation can be found here:[Patch Other Services with Moto](https://docs.getmoto.org/en/latest/docs/services/patching\_other\_services.html)
+
#### Mocking Several Services
Since the provider is being mocked, multiple attributes can be configured to customize its behavior:
@@ -488,7 +496,7 @@ will cause that the service will be initialised twice:
Later, when importing `_client.py` at `.py`, Python uses the mocked instance since the patch was applied at the correct reference point.
-In the [next section](./unit-testing.md#mocking-the-service-and-the-service-client-at-the-service-client-level) we will explore an improved approach to mock objects.
+In the [next section](/developer-guide/unit-testing#mocking-the-service-and-the-service-client-at-the-service-client-level) we will explore an improved approach to mock objects.
##### Mocking the Service and the Service Client at the Service Client Level
@@ -642,9 +650,10 @@ class Test_compute_project_os_login_enabled:
The testing of Google Cloud Services follows the same principles as the one of Google Cloud checks. While all API calls must be mocked, attribute setup for API calls in this scenario is defined in the fixtures file, specifically within the [fixtures file](https://github.com/prowler-cloud/prowler/blob/master/tests/providers/gcp/gcp_fixtures.py) in the `mock_api_client` function.
-???+ important
- Every method within a service must be tested to ensure full coverage and accurate validation.
+
+Every method within a service must be tested to ensure full coverage and accurate validation.
+
The following example presents a real testing class, but includes additional comments for educational purposes, explaining key concepts and implementation details.
```python title="BigQuery Service Test"
@@ -907,9 +916,12 @@ class Test_app_ensure_http_is_redirected_to_https:
The testing of Azure Services follows the same principles as the one of Google Cloud checks. All API calls are still mocked, but for methods that initialize attributes via an API call, use the [patch](https://docs.python.org/3/library/unittest.mock.html#unittest.mock.patch) decorator at the beginning of the class to ensure proper mocking.
-???+ important "Remember"
- Every method within a service must be tested to ensure full coverage and accurate validation.
+
+**Remember**
+Every method within a service must be tested to ensure full coverage and accurate validation.
+
+
The following example presents a real testing class, but includes additional comments for educational purposes, explaining key concepts and implementation details.
```python title="AppInsights Service Test"
diff --git a/docs/docs.json b/docs/docs.json
new file mode 100644
index 0000000000..e72c276586
--- /dev/null
+++ b/docs/docs.json
@@ -0,0 +1,436 @@
+{
+ "$schema": "https://mintlify.com/docs.json",
+ "theme": "mint",
+ "name": "Prowler Documentation",
+ "colors": {
+ "primary": "#000000",
+ "light": "#10B981",
+ "dark": "#10B981"
+ },
+ "favicon": "/favicon.ico",
+ "logo": {
+ "dark": "/images/prowler-logo-white.png",
+ "light": "/images/prowler-logo-black.png"
+ },
+ "navigation": {
+ "tabs": [
+ {
+ "tab": "Getting Started",
+ "groups": [
+ {
+ "group": "Welcome",
+ "pages": [
+ "introduction"
+ ]
+ },
+ {
+ "group": "Prowler Cloud",
+ "pages": [
+ "getting-started/products/prowler-cloud",
+ "getting-started/products/prowler-cloud-pricing",
+ "getting-started/products/prowler-cloud-aws-marketplace",
+ "getting-started/goto/prowler-cloud",
+ "getting-started/goto/prowler-api-reference"
+ ]
+ },
+ {
+ "group": "Prowler CLI",
+ "pages": [
+ "getting-started/products/prowler-cli",
+ "getting-started/installation/prowler-cli",
+ "getting-started/basic-usage/prowler-cli"
+ ]
+ },
+ {
+ "group": "Prowler App",
+ "pages": [
+ "getting-started/products/prowler-app",
+ "getting-started/installation/prowler-app",
+ "getting-started/basic-usage/prowler-app"
+ ]
+ },
+ {
+ "group": "Prowler Lighthouse AI",
+ "pages": [
+ "user-guide/tutorials/prowler-app-lighthouse"
+ ]
+ },
+ {
+ "group": "Prowler MCP Server",
+ "pages": [
+ "getting-started/products/prowler-mcp",
+ "getting-started/installation/prowler-mcp",
+ "getting-started/basic-usage/prowler-mcp",
+ "getting-started/basic-usage/prowler-mcp-tools"
+ ]
+ },
+ {
+ "group": "Prowler Hub",
+ "pages": [
+ "getting-started/products/prowler-hub",
+ "getting-started/goto/prowler-hub"
+ ]
+ },
+ {
+ "group": "Prowler vs. Others",
+ "pages": [
+ "getting-started/comparison/index",
+ "getting-started/comparison/awssecurityhub",
+ "getting-started/comparison/gcp",
+ "getting-started/comparison/microsoftdefender",
+ "getting-started/comparison/microsoftsentinel"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "Guides",
+ "groups": [
+ {
+ "group": "Prowler Cloud/App",
+ "pages": [
+ "user-guide/tutorials/prowler-app",
+ {
+ "group": "Authentication",
+ "pages": [
+ "user-guide/tutorials/prowler-app-social-login",
+ "user-guide/tutorials/prowler-app-sso"
+ ]
+ },
+ "user-guide/tutorials/prowler-app-rbac",
+ "user-guide/providers/prowler-app-api-keys",
+ "user-guide/tutorials/prowler-app-mute-findings",
+ {
+ "group": "Integrations",
+ "expanded": true,
+ "pages": [
+ "user-guide/tutorials/prowler-app-s3-integration",
+ "user-guide/tutorials/prowler-app-security-hub-integration",
+ "user-guide/tutorials/prowler-app-jira-integration"
+ ]
+ },
+ "user-guide/tutorials/prowler-app-lighthouse",
+ {
+ "group": "Tutorials",
+ "pages": [
+ "user-guide/tutorials/prowler-app-sso-entra",
+ "user-guide/tutorials/bulk-provider-provisioning"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "CLI",
+ "pages": [
+ "user-guide/cli/tutorials/misc",
+ "user-guide/cli/tutorials/reporting",
+ "user-guide/cli/tutorials/compliance",
+ "user-guide/cli/tutorials/dashboard",
+ "user-guide/cli/tutorials/configuration_file",
+ "user-guide/cli/tutorials/logging",
+ "user-guide/cli/tutorials/mutelist",
+ {
+ "group": "Integrations",
+ "pages": [
+ "user-guide/providers/aws/securityhub",
+ "user-guide/cli/tutorials/integrations",
+ "user-guide/providers/aws/s3"
+ ]
+ },
+ "user-guide/cli/tutorials/fixer",
+ "user-guide/cli/tutorials/check-aliases",
+ "user-guide/cli/tutorials/custom-checks-metadata",
+ "user-guide/cli/tutorials/pentesting",
+ "user-guide/cli/tutorials/scan-unused-services",
+ "user-guide/cli/tutorials/quick-inventory",
+ {
+ "group": "Tutorials",
+ "pages": [
+ "user-guide/cli/tutorials/parallel-execution"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "Providers",
+ "pages": [
+ {
+ "group": "AWS",
+ "pages": [
+ "user-guide/providers/aws/getting-started-aws",
+ "user-guide/providers/aws/authentication",
+ "user-guide/providers/aws/role-assumption",
+ "user-guide/providers/aws/organizations",
+ "user-guide/providers/aws/regions-and-partitions",
+ "user-guide/providers/aws/tag-based-scan",
+ "user-guide/providers/aws/resource-arn-based-scan",
+ "user-guide/providers/aws/boto3-configuration",
+ "user-guide/providers/aws/threat-detection",
+ "user-guide/providers/aws/cloudshell",
+ "user-guide/providers/aws/multiaccount"
+ ]
+ },
+ {
+ "group": "Azure",
+ "pages": [
+ "user-guide/providers/azure/getting-started-azure",
+ "user-guide/providers/azure/authentication",
+ "user-guide/providers/azure/use-non-default-cloud",
+ "user-guide/providers/azure/subscriptions",
+ "user-guide/providers/azure/create-prowler-service-principal"
+ ]
+ },
+ {
+ "group": "Google Cloud",
+ "pages": [
+ "user-guide/providers/gcp/getting-started-gcp",
+ "user-guide/providers/gcp/authentication",
+ "user-guide/providers/gcp/projects",
+ "user-guide/providers/gcp/organization",
+ "user-guide/providers/gcp/retry-configuration"
+ ]
+ },
+ {
+ "group": "Kubernetes",
+ "pages": [
+ "user-guide/providers/kubernetes/in-cluster",
+ "user-guide/providers/kubernetes/outside-cluster",
+ "user-guide/providers/kubernetes/misc"
+ ]
+ },
+ {
+ "group": "Microsoft 365",
+ "pages": [
+ "user-guide/providers/microsoft365/getting-started-m365",
+ "user-guide/providers/microsoft365/authentication",
+ "user-guide/providers/microsoft365/use-of-powershell"
+ ]
+ },
+ {
+ "group": "GitHub",
+ "pages": [
+ "user-guide/providers/github/getting-started-github",
+ "user-guide/providers/github/authentication"
+ ]
+ },
+ {
+ "group": "IaC",
+ "pages": [
+ "user-guide/providers/iac/getting-started-iac",
+ "user-guide/providers/iac/authentication"
+ ]
+ },
+ {
+ "group": "MongoDB Atlas",
+ "pages": [
+ "user-guide/providers/mongodbatlas/getting-started-mongodbatlas",
+ "user-guide/providers/mongodbatlas/authentication"
+ ]
+ },
+ {
+ "group": "LLM",
+ "pages": [
+ "user-guide/providers/llm/getting-started-llm"
+ ]
+ },
+ {
+ "group": "Oracle Cloud Infrastructure",
+ "pages": [
+ "user-guide/providers/oci/getting-started-oci",
+ "user-guide/providers/oci/authentication"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "Compliance",
+ "pages": [
+ "user-guide/compliance/tutorials/threatscore"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "Developer Guide",
+ "groups": [
+ {
+ "group": "Concepts",
+ "pages": [
+ "developer-guide/introduction",
+ "developer-guide/provider",
+ "developer-guide/services",
+ "developer-guide/checks",
+ "developer-guide/outputs",
+ "developer-guide/integrations",
+ "developer-guide/security-compliance-framework",
+ "developer-guide/lighthouse"
+ ]
+ },
+ {
+ "group": "Providers",
+ "pages": [
+ "developer-guide/aws-details",
+ "developer-guide/azure-details",
+ "developer-guide/gcp-details",
+ "developer-guide/kubernetes-details",
+ "developer-guide/m365-details",
+ "developer-guide/github-details",
+ "developer-guide/llm-details"
+ ]
+ },
+ {
+ "group": "Miscellaneous",
+ "pages": [
+ "developer-guide/documentation",
+ {
+ "group": "Testing",
+ "pages": [
+ "developer-guide/unit-testing",
+ "developer-guide/integration-testing"
+ ]
+ },
+ "developer-guide/debugging",
+ "developer-guide/configurable-checks",
+ "developer-guide/renaming-checks",
+ "developer-guide/check-metadata-guidelines"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "Security",
+ "pages": [
+ "security"
+ ]
+ },
+ {
+ "tab": "Contact Us",
+ "pages": [
+ "contact"
+ ]
+ },
+ {
+ "tab": "Troubleshooting",
+ "pages": [
+ "troubleshooting"
+ ]
+ },
+ {
+ "tab": "About Us",
+ "icon": "/favicon.ico",
+ "href": "https://prowler.com/about#team"
+ },
+ {
+ "tab": "Changelog",
+ "icon": "github",
+ "href": "https://github.com/prowler-cloud/prowler/releases"
+ },
+ {
+ "tab": "Public Roadmap",
+ "href": "https://roadmap.prowler.com/"
+ }
+ ],
+ "global": {
+ "anchors": [
+ {
+ "anchor": "GitHub",
+ "href": "https://github.com/prowler-cloud/prowler",
+ "icon": "github"
+ },
+ {
+ "anchor": "Slack",
+ "href": "https://goto.prowler.com/slack",
+ "icon": "slack"
+ },
+ {
+ "anchor": "YouTube",
+ "href": "https://www.youtube.com/@prowlercloud",
+ "icon": "youtube"
+ }
+ ]
+ }
+ },
+ "navbar": {
+ "links": [
+ {
+ "label": "Prowler Hub",
+ "href": "https://hub.prowler.com"
+ },
+ {
+ "label": "Prowler Cloud",
+ "href": "https://cloud.prowler.com",
+ "style": "primary"
+ }
+ ]
+ },
+ "analytics": {
+ "ga4": {
+ "measurementId": "G-KBKV70W5Y2"
+ }
+ },
+ "feedback": {
+ "thumbsRating": true,
+ "suggestEdit": true,
+ "raiseIssue": true
+ },
+ "footer": {
+ "socials": {
+ "x-twitter": "https://x.com/prowlercloud",
+ "github": "https://github.com/prowler-cloud/prowler",
+ "linkedin": "https://www.linkedin.com/company/prowler-security",
+ "youtube": "https://www.youtube.com/@prowlercloud",
+ "slack": "https://goto.prowler.com/slack",
+ "website": "https://prowler.com"
+ }
+ },
+ "redirects": [
+ {
+ "source": "/projects/prowler-open-source/en/latest/tutorials/prowler-app-lighthouse",
+ "destination": "/user-guide/tutorials/prowler-app-lighthouse"
+ },
+ {
+ "source": "/projects/prowler-open-source/en/latest/developer-guide/introduction",
+ "destination": "/developer-guide/introduction"
+ },
+ {
+ "source": "/projects/prowler-open-source/en/latest/tutorials/aws/getting-started-aws",
+ "destination": "/user-guide/providers/aws/getting-started-aws"
+ },
+ {
+ "source": "/projects/prowler-open-source/en/latest/tutorials/azure/getting-started-azure",
+ "destination": "/user-guide/providers/azure/getting-started-azure"
+ },
+ {
+ "source": "/projects/prowler-open-source/en/latest/tutorials/gcp/getting-started-gcp",
+ "destination": "/user-guide/providers/gcp/getting-started-gcp"
+ },
+ {
+ "source": "/projects/prowler-open-source/en/latest/tutorials/prowler-app",
+ "destination": "/user-guide/tutorials/prowler-app#step-4-4%3A-kubernetes-credentials%3A"
+ },
+ {
+ "source": "/projects/prowler-open-source/en/latest/tutorials/prowler-app/#step-3-add-a-provider",
+ "destination": "/user-guide/tutorials/prowler-app#step-3-add-a-provider"
+ },
+ {
+ "source": "/projects/prowler-open-source/en/latest/tutorials/microsoft365/getting-started-m365",
+ "destination": "/user-guide/providers/microsoft365/getting-started-m365"
+ },
+ {
+ "source": "/projects/prowler-open-source/en/latest/tutorials/github/getting-started-github",
+ "destination": "/user-guide/providers/github/getting-started-github"
+ },
+ {
+ "source": "/projects/prowler-open-source/en/latest/tutorials/prowler-app-sso",
+ "destination": "/user-guide/tutorials/prowler-app-sso"
+ },
+ {
+ "source": "/projects/prowler-open-source/en/latest",
+ "destination": "/introduction"
+ },
+ {
+ "source": "/projects/prowler-saas/en/latest/:slug*",
+ "destination": "https://docs.prowler.pro/en/latest/:slug*"
+ }
+ ]
+}
diff --git a/docs/getting-started/basic-usage/prowler-app.mdx b/docs/getting-started/basic-usage/prowler-app.mdx
new file mode 100644
index 0000000000..26d7d8ee2e
--- /dev/null
+++ b/docs/getting-started/basic-usage/prowler-app.mdx
@@ -0,0 +1,70 @@
+---
+title: 'Basic Usage'
+---
+
+## Access Prowler App
+
+After [installation](/getting-started/installation/prowler-app), navigate to [http://localhost:3000](http://localhost:3000) and sign up with email and password.
+
+
+
+
+
+**User creation and default tenant behavior**
+
+
+When creating a new user, the behavior depends on whether an invitation is provided:
+
+- **Without an invitation**:
+
+ - A new tenant is automatically created.
+ - The new user is assigned to this tenant.
+ - A set of **RBAC admin permissions** is generated and assigned to the user for the newly-created tenant.
+
+- **With an invitation**: The user is added to the specified tenant with the permissions defined in the invitation.
+
+This mechanism ensures that the first user in a newly created tenant has administrative permissions within that tenant.
+
+
+## Log In
+
+Access Prowler App by logging in with **email and password**.
+
+
+
+## Add Cloud Provider
+
+Configure a cloud provider for scanning:
+
+1. Navigate to `Settings > Cloud Providers` and click `Add Account`.
+2. Select the cloud provider.
+3. Enter the provider's identifier (Optional: Add an alias):
+ - **AWS**: Account ID
+ - **GCP**: Project ID
+ - **Azure**: Subscription ID
+ - **Kubernetes**: Cluster ID
+ - **M365**: Domain ID
+4. Follow the guided instructions to add and authenticate your credentials.
+
+## Start a Scan
+
+Once credentials are successfully added and validated, Prowler initiates a scan of your cloud environment.
+
+Click `Go to Scans` to monitor progress.
+
+## View Results
+
+Review findings during scan execution in the following sections:
+
+- **Overview** – Provides a high-level summary of your scans.
+
+
+- **Compliance** – Displays compliance insights based on security frameworks.
+
+
+> For detailed usage instructions, refer to the [Prowler App Guide](/user-guide/tutorials/prowler-app).
+
+
+Prowler will automatically scan all configured providers every **24 hours**, ensuring your cloud environment stays continuously monitored.
+
+
diff --git a/docs/basic-usage/prowler-cli.md b/docs/getting-started/basic-usage/prowler-cli.mdx
similarity index 74%
rename from docs/basic-usage/prowler-cli.md
rename to docs/getting-started/basic-usage/prowler-cli.mdx
index a06397d02b..95e7a77b51 100644
--- a/docs/basic-usage/prowler-cli.md
+++ b/docs/getting-started/basic-usage/prowler-cli.mdx
@@ -1,18 +1,24 @@
+---
+title: 'Basic Usage'
+---
+
## Running Prowler
Running Prowler requires specifying the provider (e.g `aws`, `gcp`, `azure`, `kubernetes`, `m365`, `github`, `iac` or `mongodbatlas`):
-???+ note
- If no provider is specified, AWS is used by default for backward compatibility with Prowler v2.
+
+If no provider is specified, AWS is used by default for backward compatibility with Prowler v2.
+
```console
prowler
```
-
+
-???+ note
- Running the `prowler` command without options will uses environment variable credentials. Refer to the Authentication section of each provider for credential configuration details.
+
+Running the `prowler` command without options will uses environment variable credentials. Refer to the Authentication section of each provider for credential configuration details.
+
## Verbose Output
If you prefer the former verbose output, use: `--verbose`. This allows seeing more info while Prowler is running, minimal output is displayed unless verbosity is enabled.
@@ -26,7 +32,7 @@ prowler -M csv json-asff json-ocsf html
```
The HTML report is saved in the output directory, alongside other reports. It will look like this:
-
+
## Listing Available Checks and Services
@@ -58,7 +64,7 @@ prowler kubernetes --excluded-services controllermanager
```
## Additional Options
-Explore more advanced time-saving execution methods in the [Miscellaneous](../tutorials/misc.md) section.
+Explore more advanced time-saving execution methods in the [Miscellaneous](/user-guide/cli/tutorials/misc) section.
Access the help menu and view all available options with `-h`/`--help`:
@@ -74,10 +80,11 @@ Use a custom AWS profile with `-p`/`--profile` and/or specific AWS regions with
prowler aws --profile custom-profile -f us-east-1 eu-south-2
```
-???+ note
- By default, `prowler` will scan all AWS regions.
+
+By default, `prowler` will scan all AWS regions.
-See more details about AWS Authentication in the [Authentication Section](../tutorials/aws/authentication.md) section.
+
+See more details about AWS Authentication in the [Authentication Section](/user-guide/providers/aws/authentication) section.
## Azure
@@ -97,7 +104,7 @@ prowler azure --browser-auth --tenant-id "XXXXXXXX"
prowler azure --managed-identity-auth
```
-See more details about Azure Authentication in the [Authentication Section](../tutorials/azure/authentication.md)
+See more details about Azure Authentication in the [Authentication Section](/user-guide/providers/azure/authentication)
By default, Prowler scans all accessible subscriptions. Scan specific subscriptions using the following flag (using az cli auth as example):
@@ -154,9 +161,10 @@ Prowler enables security scanning of Kubernetes clusters, supporting both **in-c
```console
prowler kubernetes --kubeconfig-file path
```
- ???+ note
+
If no `--kubeconfig-file` is provided, Prowler will use the default KubeConfig file location (`~/.kube/config`).
+
- **In-Cluster Execution**
To run Prowler inside the cluster, apply the provided YAML configuration to deploy a job in a new namespace:
@@ -170,9 +178,10 @@ Prowler enables security scanning of Kubernetes clusters, supporting both **in-c
kubectl logs prowler-XXXXX --namespace prowler-ns
```
- ???+ note
+
By default, Prowler scans all namespaces in the active Kubernetes context. Use the `--context`flag to specify the context to be scanned and `--namespaces` to restrict scanning to specific namespaces.
+
## Microsoft 365
Microsoft 365 requires specifying the auth method:
@@ -190,7 +199,7 @@ prowler m365 --browser-auth --tenant-id "XXXXXXXX"
```
-See more details about M365 Authentication in the [Authentication Section](../tutorials/microsoft365/authentication.md) section.
+See more details about M365 Authentication in the [Authentication Section](/user-guide/providers/microsoft365/authentication) section.
## GitHub
@@ -211,13 +220,14 @@ Prowler enables security scanning of your **GitHub account**, including **Reposi
prowler github --github-app-id app_id --github-app-key app_key
```
- ???+ note
+
If no login method is explicitly provided, Prowler will automatically attempt to authenticate using environment variables in the following order of precedence:
1. `GITHUB_PERSONAL_ACCESS_TOKEN`
2. `OAUTH_APP_TOKEN`
3. `GITHUB_APP_ID` and `GITHUB_APP_KEY`
+
## Infrastructure as Code (IaC)
Prowler's Infrastructure as Code (IaC) provider enables you to scan local or remote infrastructure code for security and compliance issues using [Trivy](https://trivy.dev/). This provider supports a wide range of IaC frameworks, allowing you to assess your code before deployment.
@@ -244,14 +254,15 @@ prowler iac --scan-path ./my-iac-directory --frameworks terraform kubernetes
prowler iac --scan-path ./my-iac-directory --exclude-path ./my-iac-directory/test,./my-iac-directory/examples
```
-???+ note
- - `--scan-path` and `--scan-repository-url` are mutually exclusive; only one can be specified at a time.
- - For remote repository scans, authentication can be provided via CLI flags or environment variables (`GITHUB_OAUTH_APP_TOKEN`, `GITHUB_USERNAME`, `GITHUB_PERSONAL_ACCESS_TOKEN`). CLI flags take precedence.
- - The IaC provider does not require cloud authentication for local scans.
- - It is ideal for CI/CD pipelines and local development environments.
- - For more details on supported scanners, see the [Trivy documentation](https://trivy.dev/latest/docs/scanner/vulnerability/)
+
+- `--scan-path` and `--scan-repository-url` are mutually exclusive; only one can be specified at a time.
+- For remote repository scans, authentication can be provided via CLI flags or environment variables (`GITHUB_OAUTH_APP_TOKEN`, `GITHUB_USERNAME`, `GITHUB_PERSONAL_ACCESS_TOKEN`). CLI flags take precedence.
+- The IaC provider does not require cloud authentication for local scans.
+- It is ideal for CI/CD pipelines and local development environments.
+- For more details on supported scanners, see the [Trivy documentation](https://trivy.dev/latest/docs/scanner/vulnerability/)
-See more details about IaC scanning in the [IaC Tutorial](../tutorials/iac/getting-started-iac.md) section.
+
+See more details about IaC scanning in the [IaC Tutorial](/user-guide/providers/iac/getting-started-iac) section.
## MongoDB Atlas
@@ -276,4 +287,30 @@ You can filter scans to specific organizations or projects:
prowler mongodbatlas --atlas-project-id
```
-See more details about MongoDB Atlas Authentication in [MongoDB Atlas Authentication](../tutorials/mongodbatlas/authentication.md)
+See more details about MongoDB Atlas Authentication in [MongoDB Atlas Authentication](/user-guide/providers/mongodbatlas/authentication)
+
+## Oracle Cloud
+
+Prowler allows you to scan your Oracle Cloud deployments for security and compliance issues.
+
+You have two options to authenticate:
+
+1. OCI Config File Authentication: this config file can be generated using the OCI CLI with the `oci session authenticate` command or created manually using the OCI Console. For more details, see the [OCI Authentication Guide](/user-guide/providers/oci/authentication#oci-session-authentication).
+
+ ```console
+ prowler oci
+ ```
+
+ You can add different profiles to the config file to scan different tenancies or regions. In order to scan a specific profile, use the `--profile` flag:
+
+ ```console
+ prowler oci --profile
+ ```
+
+2. Instance Principal Authentication: when running Prowler on an OCI Compute instance, you can use Instance Principal authentication. For more details, see the [OCI Authentication Guide](/user-guide/providers/oci/authentication#instance-principal-authentication).
+
+ ```console
+ prowler oci --use-instance-principal
+ ```
+
+See more details about Oracle Cloud Authentication in [Oracle Cloud Authentication](/user-guide/providers/oci/authentication)
diff --git a/docs/getting-started/basic-usage/prowler-mcp-tools.mdx b/docs/getting-started/basic-usage/prowler-mcp-tools.mdx
new file mode 100644
index 0000000000..dc984c9537
--- /dev/null
+++ b/docs/getting-started/basic-usage/prowler-mcp-tools.mdx
@@ -0,0 +1,122 @@
+---
+title: "Tools Reference"
+---
+
+Complete reference guide for all tools available in the Prowler MCP Server. Tools are organized by namespace.
+
+## Tool Categories Summary
+
+| Category | Tool Count | Authentication Required |
+|----------|------------|------------------------|
+| Prowler Hub | 10 tools | No |
+| Prowler Documentation | 2 tools | No |
+| Prowler Cloud/App | 28 tools | Yes |
+
+## Tool Naming Convention
+
+All tools follow a consistent naming pattern with prefixes:
+
+- `prowler_hub_*` - Prowler Hub catalog and compliance tools
+- `prowler_docs_*` - Prowler documentation search and retrieval
+- `prowler_app_*` - Prowler Cloud and App (Self-Managed) management tools
+
+## Prowler Hub Tools
+
+Access Prowler's security check catalog and compliance frameworks. **No authentication required.**
+
+### Check Discovery
+
+- **`prowler_hub_get_checks`** - List security checks with advanced filtering options
+- **`prowler_hub_get_check_filters`** - Return available filter values for checks (providers, services, severities, categories, compliances)
+- **`prowler_hub_search_checks`** - Full-text search across check metadata
+- **`prowler_hub_get_check_raw_metadata`** - Fetch raw check metadata in JSON format
+
+### Check Code
+
+- **`prowler_hub_get_check_code`** - Fetch the Python implementation code for a security check
+- **`prowler_hub_get_check_fixer`** - Fetch the automated fixer code for a check (if available)
+
+### Compliance Frameworks
+
+- **`prowler_hub_get_compliance_frameworks`** - List and filter compliance frameworks
+- **`prowler_hub_search_compliance_frameworks`** - Full-text search across compliance frameworks
+
+### Provider Information
+
+- **`prowler_hub_list_providers`** - List Prowler official providers and their services
+- **`prowler_hub_get_artifacts_count`** - Get total count of checks and frameworks in Prowler Hub
+
+## Prowler Documentation Tools
+
+Search and access official Prowler documentation. **No authentication required.**
+
+- **`prowler_docs_search`** - Search the official Prowler documentation using full-text search
+- **`prowler_docs_get_document`** - Retrieve the full markdown content of a specific documentation file
+
+## Prowler Cloud/App Tools
+
+Manage Prowler Cloud or Prowler App (Self-Managed) features. **Requires authentication.**
+
+
+These tools require a valid API key. See the [Configuration Guide](/getting-started/basic-usage/prowler-mcp) for authentication setup.
+
+
+### Findings Management
+
+- **`prowler_app_list_findings`** - List security findings with advanced filtering
+- **`prowler_app_get_finding`** - Get detailed information about a specific finding
+- **`prowler_app_get_latest_findings`** - Retrieve latest findings from the most recent scans
+- **`prowler_app_get_findings_metadata`** - Get unique metadata values from filtered findings
+- **`prowler_app_get_latest_findings_metadata`** - Get metadata from latest findings across all providers
+
+### Provider Management
+
+- **`prowler_app_list_providers`** - List all providers with filtering options
+- **`prowler_app_create_provider`** - Create a new provider in the current tenant
+- **`prowler_app_get_provider`** - Get detailed information about a specific provider
+- **`prowler_app_update_provider`** - Update provider details (alias, etc.)
+- **`prowler_app_delete_provider`** - Delete a specific provider
+- **`prowler_app_test_provider_connection`** - Test provider connection status
+
+### Provider Secrets Management
+
+- **`prowler_app_list_provider_secrets`** - List all provider secrets with filtering
+- **`prowler_app_add_provider_secret`** - Add or update credentials for a provider
+- **`prowler_app_get_provider_secret`** - Get detailed information about a provider secret
+- **`prowler_app_update_provider_secret`** - Update provider secret details
+- **`prowler_app_delete_provider_secret`** - Delete a provider secret
+
+### Scan Management
+
+- **`prowler_app_list_scans`** - List all scans with filtering options
+- **`prowler_app_create_scan`** - Trigger a manual scan for a specific provider
+- **`prowler_app_get_scan`** - Get detailed information about a specific scan
+- **`prowler_app_update_scan`** - Update scan details
+- **`prowler_app_get_scan_compliance_report`** - Download compliance report as CSV
+- **`prowler_app_get_scan_report`** - Download ZIP file containing complete scan report
+
+### Schedule Management
+
+- **`prowler_app_schedules_daily_scan`** - Create a daily scheduled scan for a provider
+
+### Processor Management
+
+- **`prowler_app_processors_list`** - List all processors with filtering
+- **`prowler_app_processors_create`** - Create a new processor (currently only mute lists supported)
+- **`prowler_app_processors_retrieve`** - Get processor details by ID
+- **`prowler_app_processors_partial_update`** - Update processor configuration
+- **`prowler_app_processors_destroy`** - Delete a processor
+
+## Usage Tips
+
+- Use natural language to interact with the tools through your AI assistant
+- Tools can be combined for complex workflows
+- Filter options are available on most list tools
+- Authentication is only required for Prowler Cloud/App tools
+
+## Additional Resources
+
+- [MCP Protocol Specification](https://modelcontextprotocol.io)
+- [Prowler API Documentation](https://api.prowler.com/api/v1/docs)
+- [Prowler Hub API](https://hub.prowler.com/api/docs)
+- [GitHub Repository](https://github.com/prowler-cloud/prowler)
diff --git a/docs/getting-started/basic-usage/prowler-mcp.mdx b/docs/getting-started/basic-usage/prowler-mcp.mdx
new file mode 100644
index 0000000000..90cc3e0e63
--- /dev/null
+++ b/docs/getting-started/basic-usage/prowler-mcp.mdx
@@ -0,0 +1,247 @@
+---
+title: "Configuration"
+---
+
+Configure your MCP client to connect to Prowler MCP Server.
+
+## Step 1: Get Your API Key (Optional)
+
+
+**Authentication is optional**: Prowler Hub and Prowler Documentation features work without authentication. An API key is only required for Prowler Cloud and Prowler App (Self-Managed) features.
+
+
+To use Prowler Cloud or Prowler App (Self-Managed) features. To get the API key, please refer to the [API Keys](/user-guide/providers/prowler-app-api-keys) guide.
+
+
+Keep the API key secure. Never share it publicly or commit it to version control.
+
+
+## Step 2: Configure Your MCP Client
+
+Choose the configuration based on your deployment:
+
+- **STDIO Mode**: Local installation only (runs as subprocess).
+- **HTTP Mode**: Prowler Cloud MCP Server or self-hosted Prowler MCP Server.
+
+### HTTP Mode (Prowler Cloud MCP Server or self-hosted Prowler MCP Server)
+
+
+
+ **Clients that support HTTP with custom headers natively**
+
+ For example: Cursor, VSCode, LobeChat, etc.
+
+ **Configuration:**
+ ```json
+ {
+ "mcpServers": {
+ "prowler": {
+ "url": "https://mcp.prowler.com/mcp", // or your self-hosted Prowler MCP Server URL
+ "headers": {
+ "Authorization": "Bearer pk_your_api_key_here"
+ }
+ }
+ }
+ }
+ ```
+
+
+
+
+ **For clients without native HTTP support (like Claude Desktop)**
+
+ For example: Claude Desktop.
+
+ **Configuration:**
+ ```json
+ {
+ "mcpServers": {
+ "prowler": {
+ "command": "npx",
+ "args": [
+ "mcp-remote",
+ "https://mcp.prowler.com/mcp", // or your self-hosted Prowler MCP Server URL
+ "--header",
+ "Authorization: Bearer ${PROWLER_APP_API_KEY}"
+ ],
+ "env": {
+ "PROWLER_APP_API_KEY": "pk_your_api_key_here"
+ }
+ }
+ }
+ }
+ ```
+
+
+ The `mcp-remote` tool acts as a bridge for clients that don't support HTTP natively. Learn more at [mcp-remote on npm](https://www.npmjs.com/package/mcp-remote).
+
+
+
+
+
+### STDIO Mode (Local Installation Only)
+
+STDIO mode is only available when running the MCP server locally.
+
+
+
+ **Run from source or local installation**
+
+ ```json
+ {
+ "mcpServers": {
+ "prowler": {
+ "command": "uvx",
+ "args": ["/absolute/path/to/prowler/mcp_server/"],
+ "env": {
+ "PROWLER_APP_API_KEY": "pk_your_api_key_here",
+ "PROWLER_API_BASE_URL": "https://api.prowler.com"
+ }
+ }
+ }
+ }
+ ```
+
+
+ Replace `/absolute/path/to/prowler/mcp_server/` with the actual path. The `PROWLER_API_BASE_URL` is optional and defaults to Prowler Cloud API.
+
+
+
+
+
+ **Run with Docker image**
+
+ ```json
+ {
+ "mcpServers": {
+ "prowler": {
+ "command": "docker",
+ "args": [
+ "run",
+ "--rm",
+ "-i",
+ "--env",
+ "PROWLER_APP_API_KEY=pk_your_api_key_here",
+ "--env",
+ "PROWLER_API_BASE_URL=https://api.prowler.com",
+ "prowlercloud/prowler-mcp"
+ ]
+ }
+ }
+ }
+ ```
+
+
+ The `PROWLER_API_BASE_URL` is optional and defaults to Prowler Cloud API.
+
+
+
+
+
+## Step 3: Start Using Prowler MCP
+
+Restart your MCP client and start asking questions:
+- *"Show me all critical findings from my AWS accounts"*
+- *"What does the S3 bucket public access check do?"*
+- *"Onboard this new AWS account in my Prowler Organization"*
+
+## Authentication Methods
+
+Prowler MCP Server supports two authentication methods to connect to Prowler Cloud or Prowler App (Self-Managed):
+
+### API Key (Recommended)
+
+Use your Prowler API key directly in the Bearer token:
+
+```
+Authorization: Bearer pk_your_api_key_here
+```
+
+This is the recommended method for most users.
+
+### JWT Token
+
+Alternatively, obtain a JWT token from Prowler:
+
+```bash
+curl -X POST https://api.prowler.com/api/v1/tokens \
+ -H "Content-Type: application/vnd.api+json" \
+ -H "Accept: application/vnd.api+json" \
+ -d '{
+ "data": {
+ "type": "tokens",
+ "attributes": {
+ "email": "your-email@example.com",
+ "password": "your-password"
+ }
+ }
+ }'
+```
+
+Use the returned JWT token in place of the API key:
+
+```
+Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
+```
+
+
+JWT tokens are only valid for 30 minutes. You need to generate a new token if you want to continue using the MCP server.
+
+
+## Troubleshooting
+
+### Server Not Detected
+
+- Restart your MCP client after configuration changes
+- Check the configuration file syntax (valid JSON)
+- Review client logs for specific error messages
+- Verify the server URL is correct
+
+### Authentication Failures
+
+**Error: Unauthorized (401)**
+- Verify your API key is correct
+- Ensure the key hasn't expired
+- Check you're using the right API endpoint
+
+### Connection Issues
+
+**Cannot Reach Server:**
+- Verify the server URL is correct
+- Check network connectivity
+- For local servers, ensure the server is running
+- Check firewall settings
+
+## Security Best Practices
+
+1. **Protect Your API Key**
+ - Never commit API keys to version control.
+ - Use environment variables or secure vaults.
+ - Rotate keys regularly.
+
+2. **Network Security**
+ - Use HTTPS for production deployments.
+ - Restrict network access to the MCP server.
+ - Consider VPN for remote access.
+
+3. **Least Privilege**
+ - API key gives the permission of the user who created the key, make sure to use the key with the minimal required permissions.
+ - Review the tools that are gonna be used and how they are gonna be used to avoid prompt injections or unintended behavior.
+
+## Next Steps
+
+Now that your MCP server is configured:
+
+
+
+ Explore all available tools
+
+
+
+## Getting Help
+
+Need assistance with configuration?
+
+- Search for existing [GitHub issues](https://github.com/prowler-cloud/prowler/issues)
+- Ask for help in our [Slack community](https://goto.prowler.com/slack)
+- Report a new issue on [GitHub](https://github.com/prowler-cloud/prowler/issues/new)
diff --git a/docs/getting-started/comparison/awssecurityhub.mdx b/docs/getting-started/comparison/awssecurityhub.mdx
new file mode 100644
index 0000000000..4b5d743dbe
--- /dev/null
+++ b/docs/getting-started/comparison/awssecurityhub.mdx
@@ -0,0 +1,94 @@
+---
+title: 'AWS Security Hub'
+---
+
+AWS Security Hub remains a managed service designed for centralizing security alerts and compliance status within AWS environments. It integrates with various AWS security services and provides a consolidated view of security findings.
+
+## Key Features and Strengths
+
+- **Centralized Dashboard for AWS:** Provides a single pane of glass to monitor and manage security findings from multiple AWS services like GuardDuty, Inspector, and Config.
+
+- **Compliance Checks:** Automatically checks for compliance against standards like CIS and PCI DSS within AWS environments.
+
+- **AWS Native Automation:** Offers seamless automation for incident response using AWS Lambda and CloudWatch Events, reducing the time to react to security issues.
+
+- **User-Friendly Interface:** Accessible via the AWS Management Console, offering a streamlined experience for managing security across AWS accounts.
+
+## Limitations
+
+- **AWS-Centric:** Limited to AWS environments, with no direct support for multi-cloud or hybrid environments.
+
+- **Dependency on AWS Config:** Some of its checks depend on AWS Config, which may not be enabled in all regions or accounts.
+
+- **Vendor Lock-In:** Tightly coupled with AWS, making it less suitable for organizations with a cloud-agnostic strategy.
+
+## Prowler
+
+Prowler is an open-source, multi-cloud security tool that offers extensive customization and flexibility, making it ideal for organizations with complex or multi-cloud environments. Here are the updated features and advantages:
+
+## Main Advantages of Prowler
+
+- **Multi-Region and Multi-Account Scanning by Default:**
+ - Prowler is inherently multi-region and can scan multiple AWS accounts without requiring additional configuration or enabling specific services like AWS Config.
+
+- **Minimal Setup Requirements:**
+ - All Prowler needs is a role with appropriate permissions to start scanning. There’s no need to enable specific services or configure complex setups.
+
+- **Versatile Execution Environment:**
+ - Prowler can be run from various environments, including a local workstation, container, AWS CloudShell, or even from another AWS account or cloud provider by assuming a role. This flexibility makes it easy to integrate into different operational workflows.
+
+- **Flexible Results Storage and Sharing:**
+ - Prowler results can be stored directly into an S3 bucket, allowing for quick analysis, or locally for easy sharing and discussion. This flexibility is particularly useful for collaborative security assessments.
+
+- **Customizable Reporting and Analysis:**
+ - Prowler supports exporting results in multiple formats, including JSON, CSV, OCSF format, and static HTML reports. It also supports integration with Amazon QuickSight for in-depth analysis and offers a SaaS model with resource-based pricing, making it adaptable to different organizational needs.
+
+- **Security Hub Integration for Cost-Effective Operations:**
+ - Prowler can send results directly into Security Hub in any AWS account, including only failed findings. This selective reporting can make Security Hub more cost-effective by reducing the volume of data processed.
+
+- **Custom Checks and Compliance Frameworks:**
+ - Users can write custom checks, remediations, and compliance frameworks in minutes, tailoring the tool to their specific security policies and operational needs.
+
+- **Extensive Compliance Support:**
+ - Prowler supports over 27 compliance frameworks out of the box for AWS, providing comprehensive coverage across various regulatory requirements and best practices.
+
+- **Kubernetes and Multi-Cloud Support:**
+ - Prowler extends its scanning capabilities beyond AWS, offering support for Kubernetes clusters (including EKS), as well as environments in Google Cloud Platform (GCP) and Azure. This multi-cloud capability is essential for organizations with diverse cloud footprints.
+
+- **All-Region Checks:**
+ - Prowler runs all checks in all regions, regardless of AWS Config resource type support, ensuring comprehensive coverage across your entire AWS environment.
+
+## Comparison Summary
+
+### Scope and Environment
+
+- **Security Hub** is ideal for AWS-centric environments needing a managed service for monitoring and automating security across AWS resources.
+- **Prowler** is better suited for organizations operating in multi-cloud or hybrid environments, offering flexibility, customization, and support for multiple cloud providers including AWS, Azure, GCP, and Kubernetes.
+
+### Setup and Maintenance
+
+- **Security Hub** requires enabling and configuring AWS services by region, per account, and can become more than one person's full-time role – including Config. Security Hub operates only within the AWS ecosystem.
+- **Prowler** requires minimal setup, only needing appropriate permissions, and can be executed from various environments, making it more versatile in different operational contexts.
+
+### Customization and Flexibility
+
+- **Security Hub** offers predefined compliance checks and automation within AWS but is less flexible in terms of customization.
+- **Prowler** allows for highly customizable checks, remediation actions, and compliance frameworks, with the ability to adapt quickly to organizational needs and regulatory changes.
+
+### Cost Efficiency
+
+- **Security Hub** may involve additional costs for processing and storing findings.
+- **Prowler** can optimize costs by selectively sending failed findings to Security Hub and storing results locally or in S3, which can be more cost-effective.
+
+### Multi-Cloud and Multi-Region Support
+
+- **Security Hub** is confined to AWS, with region-specific checks depending on AWS Config.
+- **Prowler** is inherently multi-region and multi-cloud, offering consistent and comprehensive checks across different cloud environments and regions.
+
+## Conclusion
+
+For a CISO or security professional evaluating these tools, the decision between AWS Security Hub and Prowler will depend on the organization’s cloud strategy, compliance needs, and the level of flexibility required:
+
+- If the organization is heavily invested in AWS and prefers a managed, integrated security service that offers ease of use and automation within the AWS ecosystem, **AWS Security Hub** is the more appropriate choice.
+
+- If the organization operates in a multi-cloud environment or requires a highly customizable tool that can run comprehensive, multi-region scans across AWS, Azure, GCP, and Kubernetes, **Prowler** provides a more powerful and flexible solution, especially for those needing to adapt quickly to evolving security and compliance requirements.
diff --git a/docs/getting-started/comparison/gcp.mdx b/docs/getting-started/comparison/gcp.mdx
new file mode 100644
index 0000000000..00f61091d7
--- /dev/null
+++ b/docs/getting-started/comparison/gcp.mdx
@@ -0,0 +1,97 @@
+---
+title: 'GCP Cloud Security Command Center (Cloud SCC)'
+---
+
+Google Cloud Security Command Center (Cloud SCC) is a centralized security and risk management platform for Google Cloud Platform (GCP). It provides visibility into assets, vulnerabilities, and threats across GCP environments, helping organizations to manage and improve their security posture.
+
+## Key Features and Strengths
+
+- **Centralized Security Visibility:** Cloud SCC provides a single pane of glass to monitor the security and risk status across your GCP resources. It aggregates findings from various GCP security services, such as Security Health Analytics, Web Security Scanner, and Event Threat Detection.
+
+- **Asset Inventory and Classification:** Cloud SCC offers comprehensive asset discovery and classification across GCP, giving security teams a detailed inventory of their cloud resources, including their configurations and security states.
+
+- **Threat Detection and Monitoring:** The platform integrates with GCP’s threat detection tools, such as Google’s Event Threat Detection, which analyzes logs for suspicious activities and potential threats.
+
+- **Compliance Monitoring:** Cloud SCC helps monitor compliance with various regulatory standards by continuously assessing your GCP resources against best practices and security benchmarks.
+
+- **Automated Remediation:** Cloud SCC can trigger automated responses to security findings through integrations with Google Cloud Functions or other orchestration tools, helping to mitigate risks quickly.
+
+- **Native GCP Integration:** Cloud SCC is deeply integrated with the GCP ecosystem, offering seamless operation within Google Cloud environments and leveraging Google's extensive security expertise.
+
+## Limitations
+
+- **GCP-Centric:** While Cloud SCC is powerful within the GCP ecosystem, it is primarily focused on GCP and does not natively extend to multi-cloud environments without additional tools or connectors.
+
+- **Cost Considerations:** As a managed service within GCP, costs can scale with the amount of data ingested and the complexity of the environment, especially as additional features or higher volumes of data are utilized.
+
+- **Dependency on GCP Services:** Cloud SCC's capabilities depend on other GCP services being enabled, such as Security Health Analytics and Web Security Scanner, which may increase overall complexity and cost.
+
+## Prowler
+
+Prowler is an open-source, multi-cloud security tool designed to perform detailed security assessments and compliance checks across diverse cloud environments, including AWS, Azure, GCP, and Kubernetes. Here are the key advantages of Prowler when compared to GCP Cloud SCC:
+
+## Main Advantages of Prowler
+
+- **Multi-Region and Multi-Account Scanning by Default:**
+ - Prowler inherently supports multi-region and multi-account scanning across multiple cloud providers, including GCP, AWS, Azure, and Kubernetes. It does not require additional configuration to perform these scans, making it immediately useful for organizations operating in multiple cloud environments.
+
+- **Minimal Setup Requirements:**
+ - Prowler requires only appropriate roles and permissions to start scanning. It doesn’t necessitate enabling specific services within GCP, which can simplify the setup process and reduce dependencies.
+
+- **Versatile Execution Environment:**
+ - Prowler can be run from various environments, such as a local workstation, container, Google Cloud Shell, or even other cloud providers by assuming a role. This versatility allows for flexible deployment and integration into existing security operations.
+
+- **Flexible Results Storage and Sharing:**
+ - Prowler results can be stored in an S3 bucket for AWS, Google Cloud Storage (GCS) for GCP, or locally, allowing for quick analysis and easy sharing. This flexibility is particularly advantageous for multi-cloud security assessments and collaborative security processes.
+
+- **Customizable Reporting and Analysis:**
+ - Prowler supports exporting results in multiple formats, including JSON, CSV, OCSF format, and static HTML reports. These reports can be tailored to specific needs and easily integrated with other security tools or dashboards, providing comprehensive insights across all cloud environments.
+
+- **SIEM Integration and Cost Efficiency:**
+ - Prowler can be configured to send findings directly into SIEM systems, including those integrated with GCP or other platforms. By sending only failed findings or selected results, Prowler helps manage costs associated with data ingestion and analysis in SIEM platforms.
+
+- **Custom Checks and Compliance Frameworks:**
+ - Prowler allows for the creation of custom security checks, remediation actions, and compliance frameworks, providing flexibility that can be adapted to the unique security policies and regulatory requirements of an organization.
+
+- **Extensive Compliance Support:**
+ - Prowler supports over 27 compliance frameworks out of the box, with capabilities to extend these frameworks to GCP environments as well as other cloud platforms. This broad compliance coverage ensures that organizations can maintain adherence to various regulatory requirements.
+
+- **Kubernetes and Multi-Cloud Support:**
+ - Prowler is designed to support security assessments across cloud environments, including Kubernetes clusters and GCP. This multi-cloud capability is essential for organizations that operate across diverse cloud platforms and require consistent security posture management.
+
+- **All-Region Checks:**
+ - Prowler runs all checks in all regions by default, ensuring comprehensive coverage across an organization’s cloud resources, regardless of the region or cloud provider.
+
+## Comparison Summary
+
+### Scope and Environment
+
+- **GCP Cloud SCC** is ideal for organizations primarily using GCP, offering a centralized platform for managing security and compliance within the GCP ecosystem.
+- **Prowler** excels in multi-cloud environments, offering flexibility and comprehensive security checks across AWS, Azure, GCP, and Kubernetes without being confined to a single cloud provider.
+
+### Setup and Flexibility
+
+- **GCP Cloud SCC** requires enabling various GCP services and may involve more complex setup, especially for multi-region or multi-account scenarios within GCP.
+- **Prowler** requires minimal setup and can be deployed quickly across different cloud environments, offering a more straightforward approach to multi-cloud security management.
+
+### Customization and Compliance
+
+- **GCP Cloud SCC** provides predefined compliance checks within the GCP environment but may require additional tools or customization for broader or more specific requirements.
+- **Prowler** allows for extensive customization of security checks, compliance frameworks, and reporting, providing a flexible solution that can be tailored to an organization’s specific needs across various cloud platforms.
+
+### Cost Efficiency
+
+- **GCP Cloud SCC** costs can scale with the volume of data processed and the number of enabled services, which may be significant in large or complex environments. SCC pricing is confusing to understand, and starts at $0.071 per vCPU hour for some tiers and depending on the scan service. Take a look at the pricing model [here](https://cloud.google.com/security-command-center/pricing), godspeed.
+- **Prowler** helps manage costs by allowing selective reporting, such as sending only failed findings to SIEMs, and storing results in cost-effective ways, such as local storage or cloud buckets. Prowler is always $0.001 per resource per day - no per account charge.
+
+### Multi-Cloud and Multi-Region Support
+
+- **GCP Cloud SCC** is focused on GCP and may require additional tools for comprehensive multi-cloud support.
+- **Prowler** is inherently multi-cloud, supporting AWS, Azure, GCP, and Kubernetes out of the box, making it an ideal choice for organizations with diverse cloud footprints.
+
+## Conclusion
+
+For a CISO evaluating these tools, the decision between GCP Cloud Security Command Center (Cloud SCC) and Prowler hinges on the organization’s cloud strategy, security management needs, and the level of flexibility and multi-cloud support required:
+
+- If the organization is heavily invested in GCP and needs a centralized platform that integrates seamlessly with GCP services for asset management, threat detection, and compliance monitoring, **GCP Cloud SCC** is likely the better choice.
+- If the organization operates in a multi-cloud environment or requires a highly customizable tool for performing detailed security assessments across AWS, Azure, GCP, and Kubernetes, **Prowler** offers a more flexible and cost-effective solution, especially for those needing quick deployment, minimal setup, and the ability to manage security across diverse cloud environments.
diff --git a/docs/getting-started/comparison/index.mdx b/docs/getting-started/comparison/index.mdx
new file mode 100644
index 0000000000..9cbc494d42
--- /dev/null
+++ b/docs/getting-started/comparison/index.mdx
@@ -0,0 +1,10 @@
+---
+title: 'Comparison'
+---
+
+Click to learn more about each cloud security provider and learn how Prowler is differentiated.
+
+- [AWS Security Hub](/getting-started/comparison/awssecurityhub)
+- [Microsoft Sentinel](/getting-started/comparison/microsoftsentinel)
+- [Microsoft Defender](/getting-started/comparison/microsoftdefender)
+- [Google Cloud Security Command Center](/getting-started/comparison/gcp)
diff --git a/docs/getting-started/comparison/microsoftdefender.mdx b/docs/getting-started/comparison/microsoftdefender.mdx
new file mode 100644
index 0000000000..76b61ba9a6
--- /dev/null
+++ b/docs/getting-started/comparison/microsoftdefender.mdx
@@ -0,0 +1,101 @@
+---
+title: 'Microsoft Defender for Cloud'
+---
+
+**Use open-source scanning to validate and extend Microsoft Defender for Cloud**
+
+---
+
+## **Overview**
+
+If you're using Microsoft Defender for Cloud to monitor your Azure infrastructure, Prowler can complement it with fully transparent, customizable scans across Azure, AWS, GCP, and Kubernetes. Prowler helps you validate policies, automate compliance, and gain deeper visibility—all from the CLI, API or our Prowler UI.
+
+You can run Prowler alongside Defender for Cloud to:
+
+* Double-check security posture with open-source checks.
+* Customize rules for your organization’s policies.
+* Bring your own, or community contributed policies.
+* Automate multi-cloud scans in CI/CD or scheduled jobs.
+
+---
+
+## **Why use Prowler with Defender for Cloud**
+
+Microsoft Defender for Cloud offers centralized dashboards, alerting, and some cross-cloud coverage. Prowler provides full transparency and control over what’s being checked and how those checks work—no vendor lock-in, no surprises.
+
+Use them together to get:
+
+* More confidence in your security posture
+* Checks you can inspect, modify, and version
+* CLI-first, portable scanning across clouds
+* Open-source tooling that integrates easily into pipelines and audits
+
+---
+
+## **Quickstart**
+
+Here’s how to install Prowler and run a scan in your Azure account.
+
+### **1\. Install Prowler**
+
+```
+git clone https://github.com/prowler-cloud/prowler
+cd prowler
+./install.sh
+```
+
+### **2\. Authenticate with Azure**
+
+Make sure you're signed in and select your subscription:
+
+```
+az login
+export AZURE_SUBSCRIPTION_ID=$(az account show --query id -o tsv)
+```
+
+### **3\. Run a scan**
+
+```
+./prowler -p Azure -f az-aks -f az-general
+```
+
+This will run checks focused on Azure Kubernetes Service (AKS) and general Azure best practices.
+
+### **4\. Review results**
+
+```
+cat output/prowler-output-*.json
+open output/prowler-output-*.html
+```
+
+You can export findings in JSON, CSV, JUnit, HTML, or AWS Security Hub–compatible formats.
+
+---
+
+## **Compare capabilities**
+
+| Feature | Microsoft Defender for Cloud | Prowler |
+| ----- | ----- | ----- |
+| Azure-native posture management | ✅ | ✅ |
+| AWS, GCP, and Kubernetes support | ⚠️ (limited) | ✅ |
+| Custom policy creation | ❌ | ✅ |
+| CLI-first, scriptable | ❌ | ✅ |
+| Open source | ❌ | ✅ |
+| Compliance mappings (CIS, NIST, etc.) | ✅ (limited control) | ✅ (customizable) |
+| Exportable detections | ❌ | ✅ |
+
+---
+
+## **Common use cases**
+
+**✅ Validate policies**
+ Run Prowler to confirm your Azure policies are configured as expected and compliant with frameworks like CIS or NIST.
+
+**✅ Automate compliance scans**
+ Schedule regular Prowler scans in your CI/CD pipeline or infrastructure monitoring workflows. Generate reports for auditors or internal reviews.
+
+**✅ Extend detection coverage**
+ If Defender for Cloud doesn’t cover all the services or resources in your environment, Prowler’s checks fill in the gaps.
+
+**✅ Build custom checks**
+ Security is never one-size-fits-all. Prowler lets you write your own checks for organization-specific policies.
diff --git a/docs/getting-started/comparison/microsoftsentinel.mdx b/docs/getting-started/comparison/microsoftsentinel.mdx
new file mode 100644
index 0000000000..a6ff00dbfc
--- /dev/null
+++ b/docs/getting-started/comparison/microsoftsentinel.mdx
@@ -0,0 +1,93 @@
+---
+title: 'Microsoft Sentinel'
+---
+
+Microsoft Sentinel is a scalable, cloud-native security information and event management (SIEM) and security orchestration automated response (SOAR) solution. It's designed to collect, detect, investigate, and respond to threats across the enterprise, primarily within the Azure cloud environment but also extending to on-premises and other cloud environments through various connectors.
+
+## Key Features and Strengths
+
+- **SIEM and SOAR Capabilities:** Microsoft Sentinel combines SIEM and SOAR functionalities, allowing it to collect and analyze large volumes of data from various sources and automate responses to detected threats.
+
+- **Native Azure Integration:** As part of the Azure ecosystem, Sentinel integrates seamlessly with Azure services, providing deep visibility and analytics for Azure resources.
+
+- **Advanced Threat Detection:** Sentinel uses AI and machine learning to detect potential threats and anomalous activities, leveraging Microsoft's extensive threat intelligence network.
+
+- **Scalability and Flexibility:** Being cloud-native, Sentinel scales automatically to handle increasing data volumes and complexity without requiring extensive infrastructure management.
+
+- **Customizable Dashboards and Analytics:** Sentinel offers customizable dashboards and analytics, allowing security teams to tailor their views and queries to specific needs.
+
+- **Multi-Source Data Ingestion:** While focused on Azure, Sentinel can ingest data from multiple sources, including AWS, GCP, on-premises environments, and third-party security products.
+
+## Limitations
+
+- **Azure-Centric:** While it supports multi-cloud environments, its primary focus and strengths are within the Azure ecosystem. Integration with other cloud platforms and on-premises environments may require additional connectors and configurations.
+
+- **Cost Considerations:** As a SIEM tool, Sentinel can become expensive, particularly as data ingestion and analysis volumes grow. The cost model is based on data volume, which can add up quickly in large environments.
+
+- **Complexity in Customization:** Although Sentinel offers advanced customization, setting up and fine-tuning these customizations can require significant expertise and effort, particularly in multi-cloud environments.
+
+## Prowler
+
+Prowler is an open-source, multi-cloud security tool that offers extensive flexibility and customization, making it ideal for organizations that need to maintain a strong security posture across diverse cloud environments. Here are the key advantages of Prowler, particularly when compared to Microsoft Sentinel:
+
+## Main Advantages of Prowler
+
+- **Multi-Region and Multi-Account Scanning by Default:**
+ - Prowler is inherently multi-region and multi-account, requiring no additional configuration to scan across these environments. This capability is available out of the box without needing to enable specific services or create complex setups.
+
+- **Minimal Setup Requirements:**
+ - Prowler requires only a role with appropriate permissions to begin scanning. There’s no need for extensive setup, making it easier and quicker to deploy across various environments.
+
+- **Versatile Execution Environment:**
+ - Prowler can be run from a local workstation, container, AWS CloudShell, or even from other cloud providers like Azure or GCP by assuming a role. This versatility allows security teams to integrate Prowler into a wide range of operational workflows without being tied to a single cloud environment.
+
+- **Flexible Results Storage and Sharing:**
+ - Prowler results can be stored directly into an S3 bucket, allowing for quick analysis or locally for easy sharing and collaboration. This flexibility is particularly useful for multi-cloud security assessments and incident response.
+
+- **Customizable Reporting and Analysis:**
+ - Prowler supports exporting results in multiple formats, including JSON, CSV, OCSF format, and static HTML reports. Additionally, it can integrate with Amazon QuickSight for advanced analytics, and offers a SaaS model with resource-based pricing, making it adaptable to various organizational needs.
+
+- **SIEM Integration and Cost Efficiency:**
+ - While Microsoft Sentinel has a built-in SIEM functionality, Prowler can send results directly into SIEM systems, including Microsoft Sentinel. By sending only failed findings, Prowler can help optimize costs associated with data ingestion and storage in SIEM platforms.
+
+- **Custom Checks and Compliance Frameworks:**
+ - Prowler enables users to write custom checks, remediations, and compliance frameworks quickly, allowing organizations to adapt the tool to their specific security policies and regulatory requirements.
+
+- **Extensive Compliance Support:**
+ - Prowler supports over 27 compliance frameworks out of the box, providing comprehensive coverage for AWS environments, which can be extended to multi-cloud scenarios.
+
+- **Kubernetes and Multi-Cloud Support:**
+ - Prowler is designed to support security assessments beyond AWS, including Kubernetes clusters (including EKS) and environments in Azure and GCP. This capability is critical for organizations that operate across multiple cloud platforms and require consistent security posture management.
+
+- **All-Region Checks:**
+ - Prowler runs all checks in all regions by default, ensuring comprehensive coverage without the limitations that may be imposed by region-specific configurations or services.
+
+## Comparison Summary
+
+### Scope and Environment
+- **Microsoft Sentinel** is an advanced SIEM/SOAR tool optimized for Azure environments, with support for multi-cloud and on-premises systems through connectors.
+- **Prowler** is a flexible, multi-cloud security tool that excels in environments where organizations need to manage security across AWS, Azure, GCP, and Kubernetes with minimal setup and high customizability.
+
+### Setup and Flexibility
+- **Microsoft Sentinel** requires more setup, especially when integrating with non-Azure environments, and its cost scales with data ingestion.
+- **Prowler** requires minimal setup and can be easily deployed in any cloud or on-premises environment. Its ability to run from various environments and store results in flexible formats makes it particularly adaptable.
+
+### Customization and Compliance
+- **Microsoft Sentinel** offers powerful but complex customization options, primarily within the Azure ecosystem.
+- **Prowler** provides straightforward customization of security checks, remediation actions, and compliance frameworks, with broad support for multiple compliance standards out of the box.
+
+### Cost Efficiency
+- **Microsoft Sentinel** can become costly as data volumes grow, particularly in large or multi-cloud environments.
+- **Prowler** helps control costs by enabling selective reporting (e.g., sending only failed findings to SIEMs like Sentinel) and storing results in cost-effective ways, such as S3 or locally.
+
+### Multi-Cloud and Multi-Region Support
+- **Microsoft Sentinel** supports multi-cloud environments but may require additional configuration and connectors.
+- **Prowler** is designed for multi-cloud environments from the ground up, with inherent support for AWS, Azure, GCP, Kubernetes, and all regions, making it an ideal tool for organizations with diverse cloud footprints.
+
+## Conclusion
+
+For a CISO or security professional evaluating these tools, the decision between Microsoft Sentinel and Prowler hinges on the organization's cloud strategy, SIEM needs, and the level of customization and flexibility required:
+
+- If the organization is heavily invested in Azure and needs an integrated SIEM/SOAR solution with advanced threat detection, analytics, and automation capabilities, **Microsoft Sentinel** is likely the better choice.
+
+- If the organization operates in a multi-cloud environment or requires a highly customizable tool for performing detailed security assessments across AWS, Azure, GCP, and Kubernetes, **Prowler** offers a more flexible and cost-effective solution, especially for those needing quick deployment, minimal setup, and the ability to manage security across diverse cloud environments.
diff --git a/docs/getting-started/goto/prowler-api-reference.mdx b/docs/getting-started/goto/prowler-api-reference.mdx
new file mode 100644
index 0000000000..f8ca1dc3da
--- /dev/null
+++ b/docs/getting-started/goto/prowler-api-reference.mdx
@@ -0,0 +1,4 @@
+---
+title: "Prowler API Reference"
+url: "https://api.prowler.com/api/v1/docs"
+---
diff --git a/docs/getting-started/goto/prowler-cloud.mdx b/docs/getting-started/goto/prowler-cloud.mdx
new file mode 100644
index 0000000000..964c34ddab
--- /dev/null
+++ b/docs/getting-started/goto/prowler-cloud.mdx
@@ -0,0 +1,4 @@
+---
+title: "Go to Cloud"
+url: "https://cloud.prowler.com"
+---
diff --git a/docs/getting-started/goto/prowler-hub.mdx b/docs/getting-started/goto/prowler-hub.mdx
new file mode 100644
index 0000000000..b9862b582d
--- /dev/null
+++ b/docs/getting-started/goto/prowler-hub.mdx
@@ -0,0 +1,4 @@
+---
+title: "Go to Hub"
+url: "https://hub.prowler.com"
+---
diff --git a/docs/getting-started/goto/prowler-mcp.mdx b/docs/getting-started/goto/prowler-mcp.mdx
new file mode 100644
index 0000000000..5706ca1396
--- /dev/null
+++ b/docs/getting-started/goto/prowler-mcp.mdx
@@ -0,0 +1,5 @@
+---
+title: "Prowler MCP"
+url: "https://github.com/prowler-cloud/prowler/tree/master/mcp_server"
+tag: "new!"
+---
diff --git a/docs/installation/prowler-app.md b/docs/getting-started/installation/prowler-app.mdx
similarity index 60%
rename from docs/installation/prowler-app.md
rename to docs/getting-started/installation/prowler-app.mdx
index 4a5b7eb639..862d76a73f 100644
--- a/docs/installation/prowler-app.md
+++ b/docs/getting-started/installation/prowler-app.mdx
@@ -1,14 +1,19 @@
+---
+title: 'Installation'
+---
+
### Installation
Prowler App supports multiple installation methods based on your environment.
-Refer to the [Prowler App Tutorial](../tutorials/prowler-app.md) for detailed usage instructions.
+Refer to the [Prowler App Tutorial](/user-guide/tutorials/prowler-app) for detailed usage instructions.
-???+ warning
- Prowler configuration is based in `.env` files. Every version of Prowler can have differences on that file, so, please, use the file that corresponds with that version or repository branch or tag.
-
-=== "Docker Compose"
+
+Prowler configuration is based in `.env` files. Every version of Prowler can have differences on that file, so, please, use the file that corresponds with that version or repository branch or tag.
+
+
+
_Requirements_:
* `Docker Compose` installed: https://docs.docker.com/compose/install/.
@@ -20,25 +25,8 @@ Refer to the [Prowler App Tutorial](../tutorials/prowler-app.md) for detailed us
curl -LO https://raw.githubusercontent.com/prowler-cloud/prowler/refs/heads/master/.env
docker compose up -d
```
-
- > Containers are built for `linux/amd64`. If your workstation's architecture is different, please set `DOCKER_DEFAULT_PLATFORM=linux/amd64` in your environment or use the `--platform linux/amd64` flag in the docker command.
-
- > Enjoy Prowler App at http://localhost:3000 by signing up with your email and password.
-
- ???+ note
- You can change the environment variables in the `.env` file. Note that it is not recommended to use the default values in production environments.
-
- ???+ note
- For a secure setup, leave empty or remove `DJANGO_TOKEN_SIGNING_KEY` and `DJANGO_TOKEN_VERIFYING_KEY` in `.env` before first start. When absent, the API auto‑generates a unique key pair and stores it in `~/.config/prowler-api` (non-container) or the bound Docker volume in `_data/api` (container). Never commit or reuse static/default keys. To rotate, delete the stored key files and restart the API.
-
- ???+ note
- There is a development mode available, you can use the file https://github.com/prowler-cloud/prowler/blob/master/docker-compose-dev.yml to run the app in development mode.
-
- ???+ warning
- Google and GitHub authentication is only available in [Prowler Cloud](https://prowler.com).
-
-=== "GitHub"
-
+
+
_Requirements_:
* `git` installed.
@@ -46,8 +34,9 @@ Refer to the [Prowler App Tutorial](../tutorials/prowler-app.md) for detailed us
* `npm` installed: [npm installation](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm).
* `Docker Compose` installed: https://docs.docker.com/compose/install/.
- ???+ warning
- Make sure to have `api/.env` and `ui/.env.local` files with the required environment variables. You can find the required environment variables in the [`api/.env.template`](https://github.com/prowler-cloud/prowler/blob/master/api/.env.example) and [`ui/.env.template`](https://github.com/prowler-cloud/prowler/blob/master/ui/.env.template) files.
+
+ Make sure to have `api/.env` and `ui/.env.local` files with the required environment variables. You can find the required environment variables in the [`api/.env.template`](https://github.com/prowler-cloud/prowler/blob/master/api/.env.example) and [`ui/.env.template`](https://github.com/prowler-cloud/prowler/blob/master/ui/.env.template) files.
+
_Commands to run the API_:
@@ -64,11 +53,12 @@ Refer to the [Prowler App Tutorial](../tutorials/prowler-app.md) for detailed us
gunicorn -c config/guniconf.py config.wsgi:application
```
- ???+ important
- Starting from Poetry v2.0.0, `poetry shell` has been deprecated in favor of `poetry env activate`.
+
+ Starting from Poetry v2.0.0, `poetry shell` has been deprecated in favor of `poetry env activate`.
- If your poetry version is below 2.0.0 you must keep using `poetry shell` to activate your environment.
- In case you have any doubts, consult the Poetry environment activation guide: https://python-poetry.org/docs/managing-environments/#activating-the-environment
+ If your poetry version is below 2.0.0 you must keep using `poetry shell` to activate your environment.
+ In case you have any doubts, consult the Poetry environment activation guide: https://python-poetry.org/docs/managing-environments/#activating-the-environment
+
> Now, you can access the API documentation at http://localhost:8080/api/v1/docs.
@@ -110,10 +100,11 @@ Refer to the [Prowler App Tutorial](../tutorials/prowler-app.md) for detailed us
> Enjoy Prowler App at http://localhost:3000 by signing up with your email and password.
- ???+ warning
- Google and GitHub authentication is only available in [Prowler Cloud](https://prowler.com).
-
-
+
+ Google and GitHub authentication is only available in [Prowler Cloud](https://prowler.com).
+
+
+
### Update Prowler App
Upgrade Prowler App installation using one of two options:
@@ -136,9 +127,12 @@ docker compose pull --policy always
The `--policy always` flag ensures that Docker pulls the latest images even if they already exist locally.
-???+ note "What Gets Preserved During Upgrade"
- Everything is preserved, nothing will be deleted after the update.
+
+**What Gets Preserved During Upgrade**
+Everything is preserved, nothing will be deleted after the update.
+
+
### Troubleshooting
If containers don't start, check logs for errors:
diff --git a/docs/installation/prowler-cli.md b/docs/getting-started/installation/prowler-cli.mdx
similarity index 83%
rename from docs/installation/prowler-cli.md
rename to docs/getting-started/installation/prowler-cli.mdx
index 663b6bebaf..a3c87c8ce7 100644
--- a/docs/installation/prowler-cli.md
+++ b/docs/getting-started/installation/prowler-cli.mdx
@@ -1,10 +1,13 @@
+---
+title: 'Installation'
+---
## Installation
Prowler is available as a project in [PyPI](https://pypi.org/project/prowler/). Install it as a Python package with `Python >= 3.9, <= 3.12`:
-=== "pipx"
-
+
+
[pipx](https://pipx.pypa.io/stable/) installs Python applications in isolated environments. Use `pipx` for global installation.
_Requirements_:
@@ -19,17 +22,11 @@ Prowler is available as a project in [PyPI](https://pypi.org/project/prowler/).
pipx install prowler
prowler -v
```
-
- Upgrade Prowler to the latest version:
-
- ``` bash
- pipx upgrade prowler
- ```
-
-=== "pip"
-
- ???+ warning
- This method modifies the chosen installation environment. Consider using [pipx](https://docs.prowler.com/projects/prowler-open-source/en/latest/#__tabbed_1_1) for global installation.
+
+
+
+ This method modifies the chosen installation environment. Consider using [pipx](https://docs.prowler.com/projects/prowler-open-source/en/latest/#__tabbed_1_1) for global installation.
+
_Requirements_:
@@ -49,9 +46,8 @@ Prowler is available as a project in [PyPI](https://pypi.org/project/prowler/).
``` bash
pip install --upgrade prowler
```
-
-=== "Docker"
-
+
+
_Requirements_:
* Have `docker` installed: https://docs.docker.com/get-docker/.
@@ -69,9 +65,8 @@ Prowler is available as a project in [PyPI](https://pypi.org/project/prowler/).
--env AWS_SECRET_ACCESS_KEY \
--env AWS_SESSION_TOKEN toniblyx/prowler:latest
```
-
-=== "GitHub"
-
+
+
_Requirements for Developers_:
* `git`
@@ -86,11 +81,12 @@ Prowler is available as a project in [PyPI](https://pypi.org/project/prowler/).
poetry install
poetry run python prowler-cli.py -v
```
- ???+ note
- If you want to clone Prowler from Windows, use `git config core.longpaths true` to allow long file paths.
-
-=== "Amazon Linux 2"
+
+ If you want to clone Prowler from Windows, use `git config core.longpaths true` to allow long file paths.
+
+
+
_Requirements_:
* `Python >= 3.9, <= 3.12`
@@ -104,9 +100,8 @@ Prowler is available as a project in [PyPI](https://pypi.org/project/prowler/).
pipx install prowler
prowler -v
```
-
-=== "Ubuntu"
-
+
+
_Requirements_:
* `Ubuntu 23.04` or above, if you are using an older version of Ubuntu check [pipx installation](https://docs.prowler.com/projects/prowler-open-source/en/latest/#__tabbed_1_1) and ensure you have `Python >= 3.9, <= 3.12`.
@@ -122,9 +117,8 @@ Prowler is available as a project in [PyPI](https://pypi.org/project/prowler/).
pipx install prowler
prowler -v
```
-
-=== "Brew"
-
+
+
_Requirements_:
* `Brew` installed in your Mac or Linux
@@ -136,9 +130,8 @@ Prowler is available as a project in [PyPI](https://pypi.org/project/prowler/).
brew install prowler
prowler -v
```
-
-=== "AWS CloudShell"
-
+
+
After the migration of AWS CloudShell from Amazon Linux 2 to Amazon Linux 2023 [[1]](https://aws.amazon.com/about-aws/whats-new/2023/12/aws-cloudshell-migrated-al2023/) [[2]](https://docs.aws.amazon.com/cloudshell/latest/userguide/cloudshell-AL2023-migration.html), there is no longer a need to manually compile Python 3.9 as it is already included in AL2023. Prowler can thus be easily installed following the generic method of installation via pip. Follow the steps below to successfully execute Prowler v4 in AWS CloudShell:
_Requirements_:
@@ -158,11 +151,11 @@ Prowler is available as a project in [PyPI](https://pypi.org/project/prowler/).
prowler aws
```
- ???+ note
- To download the results from AWS CloudShell, select Actions -> Download File and add the full path of each file. For the CSV file it will be something like `/tmp/output/prowler-output-123456789012-20221220191331.csv`
-
-=== "Azure CloudShell"
-
+
+ To download the results from AWS CloudShell, select Actions -> Download File and add the full path of each file. For the CSV file it will be something like `/tmp/output/prowler-output-123456789012-20221220191331.csv`
+
+
+
_Requirements_:
* Open Azure CloudShell `bash`.
@@ -176,18 +169,8 @@ Prowler is available as a project in [PyPI](https://pypi.org/project/prowler/).
cd /tmp
prowler azure --az-cli-auth
```
-
-
-
-
-
-
-
-
-
-
-
-
+
+
## Container versions
The available versions of Prowler CLI are the following:
diff --git a/docs/getting-started/installation/prowler-mcp.mdx b/docs/getting-started/installation/prowler-mcp.mdx
new file mode 100644
index 0000000000..dfdf7d0822
--- /dev/null
+++ b/docs/getting-started/installation/prowler-mcp.mdx
@@ -0,0 +1,247 @@
+---
+title: "Installation"
+---
+
+There are **two ways** to use Prowler MCP Server:
+
+
+
+ **No installation required** - Just configuration
+
+ Use `https://mcp.prowler.com/mcp`
+
+
+ **Local installation** - Full control
+
+ Install via Docker, PyPI, or source code
+
+
+
+
+For "Option 1: Managed by Prowler", go directly to the [Configuration Guide](/getting-started/basic-usage/prowler-mcp#hosted-server-configuration-recommended) to set up your Claude Desktop, Cursor, or other MCP client.
+**This guide is focused on local installation, "Option 2: Run Locally"**.
+
+## Installation Methods
+
+Choose one of the following installation methods:
+
+
+
+ ### Pull from Docker Hub
+
+ The easiest way to run locally is using the official Docker image:
+
+ ```bash
+ docker pull prowlercloud/prowler-mcp
+ ```
+
+ ### Run the Container
+
+ ```bash
+ # STDIO mode (for local MCP clients)
+ docker run --rm -i prowlercloud/prowler-mcp
+
+ # HTTP mode (for remote access)
+ docker run --rm -p 8000:8000 \
+ prowlercloud/prowler-mcp \
+ --transport http --host 0.0.0.0 --port 8000
+ ```
+
+ ### With Environment Variables
+
+ ```bash
+ docker run --rm -i \
+ -e PROWLER_APP_API_KEY="pk_your_api_key" \
+ -e PROWLER_API_BASE_URL="https://api.prowler.com" \
+ prowlercloud/prowler-mcp
+ ```
+
+
+ **Docker Hub:** [prowlercloud/prowler-mcp](https://hub.docker.com/r/prowlercloud/prowler-mcp)
+
+
+
+
+
+ ### Install via pip
+
+
+ **Coming Soon** - PyPI package will be available shortly
+
+
+
+
+ ### Install uv
+
+ If `uv` is not installed, install it first. Visit [uv documentation](https://docs.astral.sh/uv/) for more installation options.
+
+ ### Clone the Repository
+
+ ```bash
+ git clone https://github.com/prowler-cloud/prowler.git
+ cd prowler/mcp_server
+ ```
+
+ ### Install Dependencies
+
+ The MCP server uses `uv` for dependency management. Install dependencies with:
+
+ ```bash
+ uv sync
+ ```
+
+ ### Verify Installation
+
+ Test that the server is properly installed:
+
+ ```bash
+ uv run prowler-mcp --help
+ ```
+
+ The help message with available command-line options should appear.
+
+
+ **For Development:** This method is recommended if you're developing or contributing to the MCP server.
+
+
+
+
+
+ ### Prerequisites
+
+ Ensure Docker is installed on your system. Visit [Docker documentation](https://docs.docker.com/get-docker/) for more installation options.
+
+ ### Clone the Repository
+
+ ```bash
+ git clone https://github.com/prowler-cloud/prowler.git
+ cd prowler/mcp_server
+ ```
+
+ ### Build the Docker Image
+
+ ```bash
+ docker build -t prowler-mcp .
+ ```
+
+ This creates a Docker image named `prowler-mcp` with all necessary dependencies.
+
+ ### Verify Installation
+
+ Test that the Docker image was built successfully:
+
+ ```bash
+ docker run --rm prowler-mcp --help
+ ```
+
+ The help message with available command-line options should appear.
+
+
+
+
+---
+
+## Command Line Options
+
+The Prowler MCP Server supports the following command-line arguments:
+
+```bash
+prowler-mcp [--transport {stdio,http}] [--host HOST] [--port PORT]
+```
+
+| Argument | Values | Default | Description |
+|----------|--------|---------|-------------|
+| `--transport` | `stdio`, `http` | `stdio` | Transport method for MCP communication |
+| `--host` | Any valid hostname/IP | `127.0.0.1` | Host to bind to (HTTP mode only) |
+| `--port` | Port number | `8000` | Port to bind to (HTTP mode only) |
+
+### Examples
+
+```bash
+# Default STDIO mode for local MCP client integration
+prowler-mcp
+
+# Explicit STDIO mode
+prowler-mcp --transport stdio
+
+# HTTP mode on default host and port (127.0.0.1:8000)
+prowler-mcp --transport http
+
+# HTTP mode accessible from any network interface
+prowler-mcp --transport http --host 0.0.0.0
+
+# HTTP mode with custom port
+prowler-mcp --transport http --host 0.0.0.0 --port 8080
+```
+
+## Environment Variables
+
+Configure the server using environment variables:
+
+| Variable | Description | Required | Default |
+|----------|-------------|----------|---------|
+| `PROWLER_APP_API_KEY` | Prowler API key | Only for STDIO mode | - |
+| `PROWLER_API_BASE_URL` | Custom Prowler API endpoint | No | `https://api.prowler.com` |
+| `PROWLER_MCP_MODE` | Default transport mode (overwritten by `--transport` argument) | No | `stdio` |
+
+
+```bash macOS/Linux
+export PROWLER_APP_API_KEY="pk_your_api_key_here"
+export PROWLER_API_BASE_URL="https://api.prowler.com"
+export PROWLER_MCP_MODE="http"
+```
+
+```bash Windows PowerShell
+$env:PROWLER_APP_API_KEY="pk_your_api_key_here"
+$env:PROWLER_API_BASE_URL="https://api.prowler.com"
+$env:PROWLER_MCP_MODE="http"
+```
+
+
+
+Never commit your API key to version control. Use environment variables or secure secret management solutions.
+
+
+### Using Environment Files
+
+For convenience, create a `.env` file in the `mcp_server` directory:
+
+```bash .env
+PROWLER_APP_API_KEY=pk_your_api_key_here
+PROWLER_API_BASE_URL=https://api.prowler.com
+PROWLER_MCP_MODE=stdio
+```
+
+When using Docker, pass the environment file:
+
+```bash
+docker run --rm --env-file .env -it prowler-mcp
+```
+
+## Running from Any Location
+
+Run the MCP server from anywhere using `uvx`:
+
+```bash
+uvx /path/to/prowler/mcp_server/
+```
+
+This is particularly useful when configuring MCP clients that need to launch the server from a specific path.
+
+## Next Steps
+
+Now that you have the Prowler MCP Server installed, proceed to configure your MCP client:
+
+
+
+ Configure Claude Desktop, Cursor, or other MCP clients
+
+
+
+## Getting Help
+
+If you encounter issues during installation:
+
+- Search for existing [GitHub issues](https://github.com/prowler-cloud/prowler/issues)
+- Ask for help in our [Slack community](https://goto.prowler.com/slack)
+- Report a new issue on [GitHub](https://github.com/prowler-cloud/prowler/issues/new)
diff --git a/docs/products/img/dashboard.png b/docs/getting-started/products/img/dashboard.png
similarity index 100%
rename from docs/products/img/dashboard.png
rename to docs/getting-started/products/img/dashboard.png
diff --git a/docs/products/img/overview.png b/docs/getting-started/products/img/overview.png
similarity index 100%
rename from docs/products/img/overview.png
rename to docs/getting-started/products/img/overview.png
diff --git a/docs/products/img/prowler-app-architecture.png b/docs/getting-started/products/img/prowler-app-architecture.png
similarity index 100%
rename from docs/products/img/prowler-app-architecture.png
rename to docs/getting-started/products/img/prowler-app-architecture.png
diff --git a/docs/products/prowler-app.md b/docs/getting-started/products/prowler-app.mdx
similarity index 84%
rename from docs/products/prowler-app.md
rename to docs/getting-started/products/prowler-app.mdx
index fb2eb1686b..f21e0222cd 100644
--- a/docs/products/prowler-app.md
+++ b/docs/getting-started/products/prowler-app.mdx
@@ -1,9 +1,13 @@
+---
+title: 'Overview'
+---
+
Prowler App is a web application that simplifies running Prowler. It provides:
- **User-friendly interface** for configuring and executing scans
- Dashboard to **view results** and manage **security findings**
-
+
## Components
@@ -19,4 +23,4 @@ Supporting infrastructure includes:
- **Celery Workers**: Asynchronous execution of Prowler scans
- **Valkey**: In-memory database serving as message broker for Celery workers
-
+
diff --git a/docs/products/prowler-cli.md b/docs/getting-started/products/prowler-cli.mdx
similarity index 90%
rename from docs/products/prowler-cli.md
rename to docs/getting-started/products/prowler-cli.mdx
index 633827b01e..ac4f37c291 100644
--- a/docs/products/prowler-cli.md
+++ b/docs/getting-started/products/prowler-cli.mdx
@@ -1,16 +1,20 @@
+---
+title: 'Overview'
+---
+
Prowler CLI is a command-line interface for running Prowler scans from the terminal.
```console
prowler
```
-
+
## Prowler Dashboard
```console
prowler dashboard
```
-
+
Prowler includes hundreds of security controls aligned with widely recognized industry frameworks and standards, including:
diff --git a/docs/getting-started/products/prowler-cloud-aws-marketplace.mdx b/docs/getting-started/products/prowler-cloud-aws-marketplace.mdx
new file mode 100644
index 0000000000..5e4c7036c7
--- /dev/null
+++ b/docs/getting-started/products/prowler-cloud-aws-marketplace.mdx
@@ -0,0 +1,82 @@
+---
+title: "AWS Marketplace"
+---
+
+This section contains the instructions to subscribe to **Prowler Cloud** through the **AWS Marketplace**.
+
+## How to subscribe
+
+To get to the **Prowler Cloud** product listing in the AWS Marketplace, and click the `View purchase options` button:
+
+1. Use this link to be taken directly to the [Prowler Cloud Marketplace Listing](https://aws.amazon.com/marketplace/pp/prodview-6ochhig5kxpok):
+
+ 
+
+2. Then, scroll down to the "Purchase Details" section and click the `Subscribe` button:
+
+ 
+
+## Set up your account
+
+After you have subscribed to the **Prowler Cloud** product, you will need to set up your **Prowler Cloud** account:
+
+1. Click the `Set up your account` button:
+
+ 
+
+2. You will be redirected to **Prowler Cloud Sign In** page. You can sign in with an exsiting account or sign up with a new account.:
+
+ 
+
+3. Once you have successfully authenticated, you should be automatically redirected to the **Prowler Cloud** [Billing](https://cloud.prowler.com/billing) page where you should now see that your account has the `AWS Marketplace Subscription` badge.
+
+ 
+
+If you have any issues signing up, please contact us at support@prowler.com.
+
+
+## Billing
+
+You will be charged monthly based on resources scanned and monitored depending on usage in **Prowler Cloud**. For more information on billing, please see the [Prowler Cloud Pricing FAQ](https://prowler.com/pricing/).
+
+**Note:** Your **Prowler Cloud** bills can be seen at [AWS Billing](https://us-east-1.console.aws.amazon.com/billing/home#/bills).
+
+## Subscription
+
+If you subscribe to Prowler Cloud through the AWS Marketplace it is not necessary to subscribe from different AWS accounts to use Prowler Cloud for those accounts.
+
+In Prowler Cloud you only need to subscribe from one of your AWS accounts through the AWS Marketplace and add multiple provider accounts once you are in the Prowler Cloud console. We will send usage metrics to the AWS Marketplace regardless of the number of accounts you add in our platform, so the AWS Marketplace will bill you based on those usage metrics.
+
+## Troubleshooting
+
+### SEPA Payment Method Issues
+
+If AWS Marketplace notifies that payment failed due to an issue with the payment method, this typically occurs when a SEPA bank account is set as the default payment method. AWS Marketplace does not support SEPA bank accounts for product subscriptions, even when the account includes valid alternative payment methods. This is because AWS Marketplace invoices are issued by AWS Inc., a US entity. SEPA accounts do not recognize these invoices as valid, causing subscription failures.
+
+To successfully subscribe to AWS Marketplace products with a SEPA account configuration:
+
+1. Switch default payment method to credit card
+2. Complete subscription
+3. Switch the default payment method back to the bank account
+
+
+**Renewal Considerations**
+
+This issue will recur during subscription renewals. AWS service teams recommend maintaining credit card as the default payment method to prevent future disruptions. Update payment methods at https://console.aws.amazon.com/billing/home#/paymentmethods.
+
+
+
+
+**AWS Marketplace Statement**
+
+The AWS Marketplace team acknowledges this limitation: "We apologize for these additional steps, and please know we are fully aware of this situation, and our internal teams are working on simplifying this process."
+
+
+
+### Credit and Debit Card Storage Restrictions (AISPL Customers in India)
+
+AWS Marketplace no longer supports payments using credit or debit cards stored on file for Amazon Internet Services Private Limited (AISPL) customers. This restriction stems from Reserve Bank of India (RBI) regulations regarding payment aggregators, which prohibit the storage of card data. As explained in [this AWS blog post](https://aws.amazon.com/blogs/awsmarketplace/restriction-on-credit-and-debit-card-purchases-for-aispl-customers-using-aws-marketplace/):
+
+> AWS Marketplace can no longer support payments using credit or debit cards stored on file. [The Reserve Bank of India (RBI) has issued a notice regarding regulation of payment aggregators](https://www.rbi.org.in/Scripts/NotificationUser.aspx?Id=11822&Mode=0), which restricts the storage of card data. If you are currently using credit or debit card as your default payment instrument, your ability to use AWS Marketplace products will be restricted. However, you can switch your default payment instrument to Pay By Invoice to avoid disruption or restore your original experience.
+
+To maintain uninterrupted access to AWS Marketplace products, change the default payment instrument from stored card data to Pay By Invoice billing.
diff --git a/docs/getting-started/products/prowler-cloud-pricing.mdx b/docs/getting-started/products/prowler-cloud-pricing.mdx
new file mode 100644
index 0000000000..fc7d2104df
--- /dev/null
+++ b/docs/getting-started/products/prowler-cloud-pricing.mdx
@@ -0,0 +1,4 @@
+---
+title: "Pricing"
+url: "https://prowler.com/pricing"
+---
diff --git a/docs/getting-started/products/prowler-cloud.mdx b/docs/getting-started/products/prowler-cloud.mdx
new file mode 100644
index 0000000000..b8b3431a89
--- /dev/null
+++ b/docs/getting-started/products/prowler-cloud.mdx
@@ -0,0 +1,24 @@
+---
+title: "Overview"
+---
+
+[Prowler Cloud](https://prowler.com) makes Cloud Security easy and enables your team to build trust in their deployed services and applications.
+
+Prowler Cloud Automates scanning single or multiple accounts and has all of the benefits of Prowler Open Source, plus hands-off continuous monitoring, auto-scaling workers for faster execution, integrations, personalized support options and out of the box social authentication.
+
+
+
+
+
+With 100% consistency across our open source policies and APIs. Prowler Cloud provides the following added benefits:
+
+
+ Immediate sign-up and account provisioning, including a trial period with zero billing details needed at registration.
+ Simple, transparent pricing, with cloud account sizing and exact pricing being available to view in your account settings.
+ SOC2 Security processes around the deployment, management, data protection and security updates of your prowler environment.
+ Helpers for smooth onboarding of cloud environments (Eg. Automatic account ID and ExternalID for AWS assumed roles, Known Static IP for Kubernetes access).
+ Zero touch third party notifications to Slack, Jira, and more.
+
+
+The team who built [Prowler](https://github.com/prowler-cloud/prowler), has helped thousands of companies get Cloud Security under control, is now making it easier by taking
+[Prowler](https://github.com/prowler-cloud/prowler) to the [Cloud](https://prowler.com)!
diff --git a/docs/getting-started/products/prowler-hub.mdx b/docs/getting-started/products/prowler-hub.mdx
new file mode 100644
index 0000000000..a8dde7549f
--- /dev/null
+++ b/docs/getting-started/products/prowler-hub.mdx
@@ -0,0 +1,17 @@
+---
+title: "Overview"
+---
+
+**Prowler Hub** is our growing public library of versioned checks, cloud service artifacts, and compliance frameworks with its mappings. It’s searchable, explainable, and built to serve the community.
+
+**Why this matters**: Every engineer has asked, “What does this check actually do?” Prowler Hub answers that question in one place, lets you pin to a specific version, and pulls definitions into your own tools or dashboards.
+
+
+
+
+
+Prowler Hub also provides a fully documented public API that you can integrate into your internal tools, dashboards, or automation workflows.
+
+📚 Explore the API docs at: https://hub.prowler.com/api/docs
+
+Whether you’re customizing policies, managing compliance, or enhancing visibility, Prowler Hub is built to support your security operations.
\ No newline at end of file
diff --git a/docs/getting-started/products/prowler-mcp.mdx b/docs/getting-started/products/prowler-mcp.mdx
new file mode 100644
index 0000000000..cb97efd5ba
--- /dev/null
+++ b/docs/getting-started/products/prowler-mcp.mdx
@@ -0,0 +1,125 @@
+---
+title: "Overview"
+---
+
+**Prowler MCP Server** brings the entire Prowler ecosystem to AI assistants through the Model Context Protocol (MCP). It enables seamless integration with AI tools like Claude Desktop, Cursor, and other MCP clients, allowing interaction with Prowler's security capabilities through natural language.
+
+
+**Preview Feature**: This MCP server is currently in preview and under active development. Features and functionality may change. We welcome your feedback—please report any issues on [GitHub](https://github.com/prowler-cloud/prowler/issues) or join our [Slack community](https://goto.prowler.com/slack) to discuss and share your thoughts.
+
+
+## What is the Model Context Protocol?
+
+The [Model Context Protocol (MCP)](https://modelcontextprotocol.io) is an open standard developed by Anthropic that enables AI assistants to securely connect to external data sources and tools. It functions as a universal adapter enabling AI assistants to interact with various services through a standardized interface.
+
+## Key Capabilities
+
+The Prowler MCP Server provides three main integration points:
+
+### 1. Prowler Cloud and Prowler App (Self-Managed)
+
+Full access to Prowler Cloud platform and self-managed Prowler App for:
+- **Provider Management**: Create, configure, and manage cloud providers (AWS, Azure, GCP, etc.).
+- **Scan Orchestration**: Trigger on-demand scans and schedule recurring security assessments.
+- **Findings Analysis**: Query, filter, and analyze security findings across all your cloud environments.
+- **Compliance Reporting**: Generate compliance reports for various frameworks (CIS, PCI-DSS, HIPAA, etc.).
+- **Secrets Management**: Securely manage provider credentials and connection details.
+- **Processor Configuration**: Set up the [Prowler Mutelist](/user-guide/tutorials/prowler-app-mute-findings) to mute findings.
+
+### 2. Prowler Hub
+
+Access to Prowler's comprehensive security knowledge base:
+- **Security Checks Catalog**: Browse and search **over 1000 security checks** across multiple cloud providers.
+- **Check Implementation**: View the Python code that powers each security check.
+- **Automated Fixers**: Access remediation scripts for common security issues.
+- **Compliance Frameworks**: Explore mappings to **over 70 compliance standards and frameworks**.
+- **Provider Services**: View available services and checks for each cloud provider.
+
+### 3. Prowler Documentation
+
+Search and retrieve official Prowler documentation:
+- **Intelligent Search**: Full-text search across all Prowler documentation.
+- **Contextual Results**: Get relevant documentation pages with highlighted snippets.
+- **Document Retrieval**: Access complete markdown content of any documentation file.
+
+## Use Cases
+
+The Prowler MCP Server enables powerful workflows through AI assistants:
+
+**Security Operations**
+- "Show me all critical findings from my AWS production accounts"
+- "What is my compliance status for the PCI standards accross all my AWS accounts according to the latest Prowler scan results?"
+- "Register my new AWS account in Prowler and run an scheduled scan every day"
+
+**Security Research**
+- "Explain what the S3 bucket public access check does"
+- "Find all checks related to encryption at rest"
+- "What is the latest version of the CIS that Prowler is covering per provider?"
+
+**Documentation & Learning**
+- "How do I configure Prowler to scan my GCP organization?"
+- "What authentication methods does Prowler support for Azure?"
+- "How can I contribute with a new security check to Prowler?"
+
+## Deployment Options
+
+Prowler MCP Server can be used in three ways:
+
+### 1. Prowler Cloud MCP Server
+
+**Use Prowler's managed MCP server at `https://mcp.prowler.com/mcp`**
+
+- No installation required.
+- Managed and maintained by Prowler team.
+- Authentication to Prowler Cloud or Prowler App (self-managed) via API key or JWT token.
+
+### 2. Local STDIO Mode
+
+**Run the server locally on your machine**
+
+- Runs as a subprocess of your MCP client.
+- Possibility to connect to a self-hosted Prowler App (e.g. self-hosted Prowler App).
+- Authentication to Prowler Cloud or Prowler App (self-managed) via environment variables.
+- Requires Python 3.12+ or Docker.
+
+### 3. Self-Hosted HTTP Mode
+
+**Deploy your own remote MCP server**
+
+- Full control over deployment.
+- Possibility to connect to a self-hosted Prowler App (e.g. self-hosted Prowler App).
+- Authentication to Prowler App (self-managed) via API key or JWT token.
+- Requires Python 3.12+ or Docker.
+
+## Requirements
+
+Requirements vary based on deployment option:
+
+**For Prowler Cloud MCP Server:**
+- Prowler Cloud account and API key (only for Prowler Cloud/App features)
+
+**For self-hosted STDIO/HTTP Mode:**
+- Python 3.12+ or Docker
+- Network access to:
+ - `https://hub.prowler.com` (for Prowler Hub)
+ - `https://docs.prowler.com` (for Prowler Documentation)
+ - Prowler Cloud API or self-hosted Prowler App API (for Prowler Cloud/App features)
+
+
+**No Authentication Required**: Prowler Hub and Prowler Documentation features work without authentication in both deployment options. A Prowler API key is only required to access Prowler Cloud or Prowler App (Self-Managed) features.
+
+
+## Next Steps
+
+
+
+ Install the Prowler MCP Server using uv or Docker
+
+
+ Configure your MCP client to connect to the server
+
+
+
+
+ Explore all available tools and capabilities
+
diff --git a/docs/images/AAD-permissions.png b/docs/images/AAD-permissions.png
new file mode 100644
index 0000000000..f2f37e354d
Binary files /dev/null and b/docs/images/AAD-permissions.png differ
diff --git a/docs/images/add-account.png b/docs/images/add-account.png
new file mode 100644
index 0000000000..35333883b5
Binary files /dev/null and b/docs/images/add-account.png differ
diff --git a/docs/images/add-provider.png b/docs/images/add-provider.png
new file mode 100644
index 0000000000..4e986e3f1a
Binary files /dev/null and b/docs/images/add-provider.png differ
diff --git a/docs/images/add-reader-role.gif b/docs/images/add-reader-role.gif
new file mode 100644
index 0000000000..4868abb773
Binary files /dev/null and b/docs/images/add-reader-role.gif differ
diff --git a/docs/images/add-sub-to-management-group.gif b/docs/images/add-sub-to-management-group.gif
new file mode 100644
index 0000000000..d63049d58b
Binary files /dev/null and b/docs/images/add-sub-to-management-group.gif differ
diff --git a/docs/images/architecture.png b/docs/images/architecture.png
new file mode 100644
index 0000000000..aeac3b136a
Binary files /dev/null and b/docs/images/architecture.png differ
diff --git a/docs/images/aws-credentials.png b/docs/images/aws-credentials.png
new file mode 100644
index 0000000000..71098075db
Binary files /dev/null and b/docs/images/aws-credentials.png differ
diff --git a/docs/images/aws-marketplace/discover-product.png b/docs/images/aws-marketplace/discover-product.png
new file mode 100644
index 0000000000..b78f0c6fc4
Binary files /dev/null and b/docs/images/aws-marketplace/discover-product.png differ
diff --git a/docs/images/aws-marketplace/marketplace-billing.png b/docs/images/aws-marketplace/marketplace-billing.png
new file mode 100644
index 0000000000..f54d232880
Binary files /dev/null and b/docs/images/aws-marketplace/marketplace-billing.png differ
diff --git a/docs/images/aws-marketplace/marketplace-listing.png b/docs/images/aws-marketplace/marketplace-listing.png
new file mode 100644
index 0000000000..aae03ee438
Binary files /dev/null and b/docs/images/aws-marketplace/marketplace-listing.png differ
diff --git a/docs/images/aws-marketplace/marketplace-message.png b/docs/images/aws-marketplace/marketplace-message.png
new file mode 100644
index 0000000000..7b4581273c
Binary files /dev/null and b/docs/images/aws-marketplace/marketplace-message.png differ
diff --git a/docs/images/aws-marketplace/marketplace-my-account.png b/docs/images/aws-marketplace/marketplace-my-account.png
new file mode 100644
index 0000000000..85fc08f932
Binary files /dev/null and b/docs/images/aws-marketplace/marketplace-my-account.png differ
diff --git a/docs/images/aws-marketplace/marketplace-sign-up.png b/docs/images/aws-marketplace/marketplace-sign-up.png
new file mode 100644
index 0000000000..249bbb6c56
Binary files /dev/null and b/docs/images/aws-marketplace/marketplace-sign-up.png differ
diff --git a/docs/images/aws-marketplace/marketplace-subscribe.png b/docs/images/aws-marketplace/marketplace-subscribe.png
new file mode 100644
index 0000000000..033e7f156d
Binary files /dev/null and b/docs/images/aws-marketplace/marketplace-subscribe.png differ
diff --git a/docs/images/aws-marketplace/marketplace-unsubscribe-error.png b/docs/images/aws-marketplace/marketplace-unsubscribe-error.png
new file mode 100644
index 0000000000..97c81abe71
Binary files /dev/null and b/docs/images/aws-marketplace/marketplace-unsubscribe-error.png differ
diff --git a/docs/images/aws-marketplace/my-account.png b/docs/images/aws-marketplace/my-account.png
new file mode 100644
index 0000000000..3476a7e5aa
Binary files /dev/null and b/docs/images/aws-marketplace/my-account.png differ
diff --git a/docs/images/aws-marketplace/subscription-in-use.png b/docs/images/aws-marketplace/subscription-in-use.png
new file mode 100644
index 0000000000..7797170f6b
Binary files /dev/null and b/docs/images/aws-marketplace/subscription-in-use.png differ
diff --git a/docs/images/aws-marketplace/subscription-pending.png b/docs/images/aws-marketplace/subscription-pending.png
new file mode 100644
index 0000000000..bb608afd68
Binary files /dev/null and b/docs/images/aws-marketplace/subscription-pending.png differ
diff --git a/docs/images/aws-role.png b/docs/images/aws-role.png
new file mode 100644
index 0000000000..bd63511fb6
Binary files /dev/null and b/docs/images/aws-role.png differ
diff --git a/docs/images/azure-credentials.png b/docs/images/azure-credentials.png
new file mode 100644
index 0000000000..2f5448d0b9
Binary files /dev/null and b/docs/images/azure-credentials.png differ
diff --git a/docs/tutorials/img/add-cloud-provider.png b/docs/images/cli/add-cloud-provider.png
similarity index 100%
rename from docs/tutorials/img/add-cloud-provider.png
rename to docs/images/cli/add-cloud-provider.png
diff --git a/docs/images/cli/api-keys/create.png b/docs/images/cli/api-keys/create.png
new file mode 100644
index 0000000000..54218c88f8
Binary files /dev/null and b/docs/images/cli/api-keys/create.png differ
diff --git a/docs/images/cli/api-keys/created.png b/docs/images/cli/api-keys/created.png
new file mode 100644
index 0000000000..a64b6faa74
Binary files /dev/null and b/docs/images/cli/api-keys/created.png differ
diff --git a/docs/images/cli/api-keys/list.png b/docs/images/cli/api-keys/list.png
new file mode 100644
index 0000000000..3c6020acfc
Binary files /dev/null and b/docs/images/cli/api-keys/list.png differ
diff --git a/docs/images/cli/api-keys/management.png b/docs/images/cli/api-keys/management.png
new file mode 100644
index 0000000000..85ebab8d02
Binary files /dev/null and b/docs/images/cli/api-keys/management.png differ
diff --git a/docs/images/cli/api-keys/update.png b/docs/images/cli/api-keys/update.png
new file mode 100644
index 0000000000..81cc574801
Binary files /dev/null and b/docs/images/cli/api-keys/update.png differ
diff --git a/docs/tutorials/img/bulk-provider-provisioning.png b/docs/images/cli/bulk-provider-provisioning.png
similarity index 100%
rename from docs/tutorials/img/bulk-provider-provisioning.png
rename to docs/images/cli/bulk-provider-provisioning.png
diff --git a/docs/tutorials/img/cloud-providers-page.png b/docs/images/cli/cloud-providers-page.png
similarity index 100%
rename from docs/tutorials/img/cloud-providers-page.png
rename to docs/images/cli/cloud-providers-page.png
diff --git a/docs/tutorials/img/compliance/compliance-cis-sample1.png b/docs/images/cli/compliance/compliance-cis-sample1.png
similarity index 100%
rename from docs/tutorials/img/compliance/compliance-cis-sample1.png
rename to docs/images/cli/compliance/compliance-cis-sample1.png
diff --git a/docs/tutorials/img/compliance/compliance.png b/docs/images/cli/compliance/compliance.png
similarity index 100%
rename from docs/tutorials/img/compliance/compliance.png
rename to docs/images/cli/compliance/compliance.png
diff --git a/docs/tutorials/img/create-slack-app.png b/docs/images/cli/create-slack-app.png
similarity index 100%
rename from docs/tutorials/img/create-slack-app.png
rename to docs/images/cli/create-slack-app.png
diff --git a/docs/tutorials/img/create-sp.gif b/docs/images/cli/create-sp.gif
similarity index 100%
rename from docs/tutorials/img/create-sp.gif
rename to docs/images/cli/create-sp.gif
diff --git a/docs/tutorials/img/dashboard/dashboard-banner.png b/docs/images/cli/dashboard/dashboard-banner.png
similarity index 100%
rename from docs/tutorials/img/dashboard/dashboard-banner.png
rename to docs/images/cli/dashboard/dashboard-banner.png
diff --git a/docs/tutorials/img/dashboard/dashboard-compliance.png b/docs/images/cli/dashboard/dashboard-compliance.png
similarity index 100%
rename from docs/tutorials/img/dashboard/dashboard-compliance.png
rename to docs/images/cli/dashboard/dashboard-compliance.png
diff --git a/docs/tutorials/img/dashboard/dashboard-files-scanned.png b/docs/images/cli/dashboard/dashboard-files-scanned.png
similarity index 100%
rename from docs/tutorials/img/dashboard/dashboard-files-scanned.png
rename to docs/images/cli/dashboard/dashboard-files-scanned.png
diff --git a/docs/tutorials/img/dashboard/dashboard-overview.png b/docs/images/cli/dashboard/dashboard-overview.png
similarity index 100%
rename from docs/tutorials/img/dashboard/dashboard-overview.png
rename to docs/images/cli/dashboard/dashboard-overview.png
diff --git a/docs/tutorials/img/dashboard/dropdown.png b/docs/images/cli/dashboard/dropdown.png
similarity index 100%
rename from docs/tutorials/img/dashboard/dropdown.png
rename to docs/images/cli/dashboard/dropdown.png
diff --git a/docs/tutorials/img/fixer.png b/docs/images/cli/fixer.png
similarity index 100%
rename from docs/tutorials/img/fixer.png
rename to docs/images/cli/fixer.png
diff --git a/docs/tutorials/img/gcp-auth-methods.png b/docs/images/cli/gcp-auth-methods.png
similarity index 100%
rename from docs/tutorials/img/gcp-auth-methods.png
rename to docs/images/cli/gcp-auth-methods.png
diff --git a/docs/tutorials/img/gcp-service-account-creds.png b/docs/images/cli/gcp-service-account-creds.png
similarity index 100%
rename from docs/tutorials/img/gcp-service-account-creds.png
rename to docs/images/cli/gcp-service-account-creds.png
diff --git a/docs/tutorials/img/github-app-credentials.png b/docs/images/cli/github-app-credentials.png
similarity index 100%
rename from docs/tutorials/img/github-app-credentials.png
rename to docs/images/cli/github-app-credentials.png
diff --git a/docs/tutorials/img/github-auth-methods.png b/docs/images/cli/github-auth-methods.png
similarity index 100%
rename from docs/tutorials/img/github-auth-methods.png
rename to docs/images/cli/github-auth-methods.png
diff --git a/docs/tutorials/img/github-oauth-credentials.png b/docs/images/cli/github-oauth-credentials.png
similarity index 100%
rename from docs/tutorials/img/github-oauth-credentials.png
rename to docs/images/cli/github-oauth-credentials.png
diff --git a/docs/tutorials/img/github-pat-credentials.png b/docs/images/cli/github-pat-credentials.png
similarity index 100%
rename from docs/tutorials/img/github-pat-credentials.png
rename to docs/images/cli/github-pat-credentials.png
diff --git a/docs/tutorials/img/install-in-slack-workspace.png b/docs/images/cli/install-in-slack-workspace.png
similarity index 100%
rename from docs/tutorials/img/install-in-slack-workspace.png
rename to docs/images/cli/install-in-slack-workspace.png
diff --git a/docs/tutorials/img/integrate-slack-app.png b/docs/images/cli/integrate-slack-app.png
similarity index 100%
rename from docs/tutorials/img/integrate-slack-app.png
rename to docs/images/cli/integrate-slack-app.png
diff --git a/docs/tutorials/img/jira/connection-settings.png b/docs/images/cli/jira/connection-settings.png
similarity index 100%
rename from docs/tutorials/img/jira/connection-settings.png
rename to docs/images/cli/jira/connection-settings.png
diff --git a/docs/tutorials/img/jira/integrations-tab.png b/docs/images/cli/jira/integrations-tab.png
similarity index 100%
rename from docs/tutorials/img/jira/integrations-tab.png
rename to docs/images/cli/jira/integrations-tab.png
diff --git a/docs/tutorials/img/jira/send-to-jira-modal.png b/docs/images/cli/jira/send-to-jira-modal.png
similarity index 100%
rename from docs/tutorials/img/jira/send-to-jira-modal.png
rename to docs/images/cli/jira/send-to-jira-modal.png
diff --git a/docs/tutorials/img/lighthouse-architecture.png b/docs/images/cli/lighthouse-architecture.png
similarity index 100%
rename from docs/tutorials/img/lighthouse-architecture.png
rename to docs/images/cli/lighthouse-architecture.png
diff --git a/docs/tutorials/img/lighthouse-config.png b/docs/images/cli/lighthouse-config.png
similarity index 100%
rename from docs/tutorials/img/lighthouse-config.png
rename to docs/images/cli/lighthouse-config.png
diff --git a/docs/tutorials/img/lighthouse-feature1.png b/docs/images/cli/lighthouse-feature1.png
similarity index 100%
rename from docs/tutorials/img/lighthouse-feature1.png
rename to docs/images/cli/lighthouse-feature1.png
diff --git a/docs/tutorials/img/lighthouse-feature2.png b/docs/images/cli/lighthouse-feature2.png
similarity index 100%
rename from docs/tutorials/img/lighthouse-feature2.png
rename to docs/images/cli/lighthouse-feature2.png
diff --git a/docs/tutorials/img/lighthouse-feature3.png b/docs/images/cli/lighthouse-feature3.png
similarity index 100%
rename from docs/tutorials/img/lighthouse-feature3.png
rename to docs/images/cli/lighthouse-feature3.png
diff --git a/docs/tutorials/img/lighthouse-intro.png b/docs/images/cli/lighthouse-intro.png
similarity index 100%
rename from docs/tutorials/img/lighthouse-intro.png
rename to docs/images/cli/lighthouse-intro.png
diff --git a/docs/tutorials/img/mutelist-keys.png b/docs/images/cli/mutelist-keys.png
similarity index 100%
rename from docs/tutorials/img/mutelist-keys.png
rename to docs/images/cli/mutelist-keys.png
diff --git a/docs/tutorials/img/mutelist-row.png b/docs/images/cli/mutelist-row.png
similarity index 100%
rename from docs/tutorials/img/mutelist-row.png
rename to docs/images/cli/mutelist-row.png
diff --git a/docs/tutorials/img/rbac/invitation_details.png b/docs/images/cli/rbac/invitation_details.png
similarity index 100%
rename from docs/tutorials/img/rbac/invitation_details.png
rename to docs/images/cli/rbac/invitation_details.png
diff --git a/docs/tutorials/img/rbac/invitation_details_1.png b/docs/images/cli/rbac/invitation_details_1.png
similarity index 100%
rename from docs/tutorials/img/rbac/invitation_details_1.png
rename to docs/images/cli/rbac/invitation_details_1.png
diff --git a/docs/tutorials/img/rbac/invitation_edit.png b/docs/images/cli/rbac/invitation_edit.png
similarity index 100%
rename from docs/tutorials/img/rbac/invitation_edit.png
rename to docs/images/cli/rbac/invitation_edit.png
diff --git a/docs/tutorials/img/rbac/invitation_edit_1.png b/docs/images/cli/rbac/invitation_edit_1.png
similarity index 100%
rename from docs/tutorials/img/rbac/invitation_edit_1.png
rename to docs/images/cli/rbac/invitation_edit_1.png
diff --git a/docs/tutorials/img/rbac/invitation_info.png b/docs/images/cli/rbac/invitation_info.png
similarity index 100%
rename from docs/tutorials/img/rbac/invitation_info.png
rename to docs/images/cli/rbac/invitation_info.png
diff --git a/docs/tutorials/img/rbac/invitation_revoke.png b/docs/images/cli/rbac/invitation_revoke.png
similarity index 100%
rename from docs/tutorials/img/rbac/invitation_revoke.png
rename to docs/images/cli/rbac/invitation_revoke.png
diff --git a/docs/tutorials/img/rbac/invitation_sign-up.png b/docs/images/cli/rbac/invitation_sign-up.png
similarity index 100%
rename from docs/tutorials/img/rbac/invitation_sign-up.png
rename to docs/images/cli/rbac/invitation_sign-up.png
diff --git a/docs/tutorials/img/rbac/invite.png b/docs/images/cli/rbac/invite.png
similarity index 100%
rename from docs/tutorials/img/rbac/invite.png
rename to docs/images/cli/rbac/invite.png
diff --git a/docs/tutorials/img/rbac/membership.png b/docs/images/cli/rbac/membership.png
similarity index 100%
rename from docs/tutorials/img/rbac/membership.png
rename to docs/images/cli/rbac/membership.png
diff --git a/docs/tutorials/img/rbac/provider_group.png b/docs/images/cli/rbac/provider_group.png
similarity index 100%
rename from docs/tutorials/img/rbac/provider_group.png
rename to docs/images/cli/rbac/provider_group.png
diff --git a/docs/tutorials/img/rbac/provider_group_edit.png b/docs/images/cli/rbac/provider_group_edit.png
similarity index 100%
rename from docs/tutorials/img/rbac/provider_group_edit.png
rename to docs/images/cli/rbac/provider_group_edit.png
diff --git a/docs/tutorials/img/rbac/provider_group_edit_1.png b/docs/images/cli/rbac/provider_group_edit_1.png
similarity index 100%
rename from docs/tutorials/img/rbac/provider_group_edit_1.png
rename to docs/images/cli/rbac/provider_group_edit_1.png
diff --git a/docs/tutorials/img/rbac/provider_group_remove.png b/docs/images/cli/rbac/provider_group_remove.png
similarity index 100%
rename from docs/tutorials/img/rbac/provider_group_remove.png
rename to docs/images/cli/rbac/provider_group_remove.png
diff --git a/docs/tutorials/img/rbac/role_create.png b/docs/images/cli/rbac/role_create.png
similarity index 100%
rename from docs/tutorials/img/rbac/role_create.png
rename to docs/images/cli/rbac/role_create.png
diff --git a/docs/tutorials/img/rbac/role_create_1.png b/docs/images/cli/rbac/role_create_1.png
similarity index 100%
rename from docs/tutorials/img/rbac/role_create_1.png
rename to docs/images/cli/rbac/role_create_1.png
diff --git a/docs/tutorials/img/rbac/role_edit.png b/docs/images/cli/rbac/role_edit.png
similarity index 100%
rename from docs/tutorials/img/rbac/role_edit.png
rename to docs/images/cli/rbac/role_edit.png
diff --git a/docs/tutorials/img/rbac/role_edit_details.png b/docs/images/cli/rbac/role_edit_details.png
similarity index 100%
rename from docs/tutorials/img/rbac/role_edit_details.png
rename to docs/images/cli/rbac/role_edit_details.png
diff --git a/docs/tutorials/img/rbac/role_remove.png b/docs/images/cli/rbac/role_remove.png
similarity index 100%
rename from docs/tutorials/img/rbac/role_remove.png
rename to docs/images/cli/rbac/role_remove.png
diff --git a/docs/tutorials/img/rbac/user_edit.png b/docs/images/cli/rbac/user_edit.png
similarity index 100%
rename from docs/tutorials/img/rbac/user_edit.png
rename to docs/images/cli/rbac/user_edit.png
diff --git a/docs/tutorials/img/rbac/user_edit_details.png b/docs/images/cli/rbac/user_edit_details.png
similarity index 100%
rename from docs/tutorials/img/rbac/user_edit_details.png
rename to docs/images/cli/rbac/user_edit_details.png
diff --git a/docs/tutorials/img/rbac/user_remove.png b/docs/images/cli/rbac/user_remove.png
similarity index 100%
rename from docs/tutorials/img/rbac/user_remove.png
rename to docs/images/cli/rbac/user_remove.png
diff --git a/docs/tutorials/img/reporting/html-output.png b/docs/images/cli/reporting/html-output.png
similarity index 100%
rename from docs/tutorials/img/reporting/html-output.png
rename to docs/images/cli/reporting/html-output.png
diff --git a/docs/tutorials/img/s3/s3-cross-account.png b/docs/images/cli/s3/s3-cross-account.png
similarity index 100%
rename from docs/tutorials/img/s3/s3-cross-account.png
rename to docs/images/cli/s3/s3-cross-account.png
diff --git a/docs/tutorials/img/s3/s3-integration-ui-1.png b/docs/images/cli/s3/s3-integration-ui-1.png
similarity index 100%
rename from docs/tutorials/img/s3/s3-integration-ui-1.png
rename to docs/images/cli/s3/s3-integration-ui-1.png
diff --git a/docs/tutorials/img/s3/s3-integration-ui-2.png b/docs/images/cli/s3/s3-integration-ui-2.png
similarity index 100%
rename from docs/tutorials/img/s3/s3-integration-ui-2.png
rename to docs/images/cli/s3/s3-integration-ui-2.png
diff --git a/docs/tutorials/img/s3/s3-integration-ui-3.png b/docs/images/cli/s3/s3-integration-ui-3.png
similarity index 100%
rename from docs/tutorials/img/s3/s3-integration-ui-3.png
rename to docs/images/cli/s3/s3-integration-ui-3.png
diff --git a/docs/tutorials/img/s3/s3-integration-ui-4.png b/docs/images/cli/s3/s3-integration-ui-4.png
similarity index 100%
rename from docs/tutorials/img/s3/s3-integration-ui-4.png
rename to docs/images/cli/s3/s3-integration-ui-4.png
diff --git a/docs/tutorials/img/s3/s3-integration-ui-5.png b/docs/images/cli/s3/s3-integration-ui-5.png
similarity index 100%
rename from docs/tutorials/img/s3/s3-integration-ui-5.png
rename to docs/images/cli/s3/s3-integration-ui-5.png
diff --git a/docs/tutorials/img/s3/s3-integration-ui-6.png b/docs/images/cli/s3/s3-integration-ui-6.png
similarity index 100%
rename from docs/tutorials/img/s3/s3-integration-ui-6.png
rename to docs/images/cli/s3/s3-integration-ui-6.png
diff --git a/docs/tutorials/img/s3/s3-integration-ui-7.png b/docs/images/cli/s3/s3-integration-ui-7.png
similarity index 100%
rename from docs/tutorials/img/s3/s3-integration-ui-7.png
rename to docs/images/cli/s3/s3-integration-ui-7.png
diff --git a/docs/tutorials/img/s3/s3-multiple-accounts.png b/docs/images/cli/s3/s3-multiple-accounts.png
similarity index 100%
rename from docs/tutorials/img/s3/s3-multiple-accounts.png
rename to docs/images/cli/s3/s3-multiple-accounts.png
diff --git a/docs/tutorials/img/s3/s3-output-folder.png b/docs/images/cli/s3/s3-output-folder.png
similarity index 100%
rename from docs/tutorials/img/s3/s3-output-folder.png
rename to docs/images/cli/s3/s3-output-folder.png
diff --git a/docs/tutorials/img/s3/s3-same-account.png b/docs/images/cli/s3/s3-same-account.png
similarity index 100%
rename from docs/tutorials/img/s3/s3-same-account.png
rename to docs/images/cli/s3/s3-same-account.png
diff --git a/docs/tutorials/img/saml/app-catalog-browse-prowler-add.png b/docs/images/cli/saml/app-catalog-browse-prowler-add.png
similarity index 100%
rename from docs/tutorials/img/saml/app-catalog-browse-prowler-add.png
rename to docs/images/cli/saml/app-catalog-browse-prowler-add.png
diff --git a/docs/tutorials/img/saml/app-catalog-browse-prowler-configure.png b/docs/images/cli/saml/app-catalog-browse-prowler-configure.png
similarity index 100%
rename from docs/tutorials/img/saml/app-catalog-browse-prowler-configure.png
rename to docs/images/cli/saml/app-catalog-browse-prowler-configure.png
diff --git a/docs/tutorials/img/saml/app-catalog-browse-prowler.png b/docs/images/cli/saml/app-catalog-browse-prowler.png
similarity index 100%
rename from docs/tutorials/img/saml/app-catalog-browse-prowler.png
rename to docs/images/cli/saml/app-catalog-browse-prowler.png
diff --git a/docs/tutorials/img/saml/app-catalog-browse.png b/docs/images/cli/saml/app-catalog-browse.png
similarity index 100%
rename from docs/tutorials/img/saml/app-catalog-browse.png
rename to docs/images/cli/saml/app-catalog-browse.png
diff --git a/docs/tutorials/img/saml/idp_config.png b/docs/images/cli/saml/idp_config.png
similarity index 100%
rename from docs/tutorials/img/saml/idp_config.png
rename to docs/images/cli/saml/idp_config.png
diff --git a/docs/tutorials/img/saml/saml-signin-1.png b/docs/images/cli/saml/saml-signin-1.png
similarity index 100%
rename from docs/tutorials/img/saml/saml-signin-1.png
rename to docs/images/cli/saml/saml-signin-1.png
diff --git a/docs/tutorials/img/saml/saml-signin-2.png b/docs/images/cli/saml/saml-signin-2.png
similarity index 100%
rename from docs/tutorials/img/saml/saml-signin-2.png
rename to docs/images/cli/saml/saml-signin-2.png
diff --git a/docs/tutorials/img/saml/saml-sso-azure-1.png b/docs/images/cli/saml/saml-sso-azure-1.png
similarity index 100%
rename from docs/tutorials/img/saml/saml-sso-azure-1.png
rename to docs/images/cli/saml/saml-sso-azure-1.png
diff --git a/docs/tutorials/img/saml/saml-sso-azure-2.png b/docs/images/cli/saml/saml-sso-azure-2.png
similarity index 100%
rename from docs/tutorials/img/saml/saml-sso-azure-2.png
rename to docs/images/cli/saml/saml-sso-azure-2.png
diff --git a/docs/tutorials/img/saml/saml-sso-azure-3.png b/docs/images/cli/saml/saml-sso-azure-3.png
similarity index 100%
rename from docs/tutorials/img/saml/saml-sso-azure-3.png
rename to docs/images/cli/saml/saml-sso-azure-3.png
diff --git a/docs/tutorials/img/saml/saml-sso-azure-4.png b/docs/images/cli/saml/saml-sso-azure-4.png
similarity index 100%
rename from docs/tutorials/img/saml/saml-sso-azure-4.png
rename to docs/images/cli/saml/saml-sso-azure-4.png
diff --git a/docs/tutorials/img/saml/saml-sso-azure-5.png b/docs/images/cli/saml/saml-sso-azure-5.png
similarity index 100%
rename from docs/tutorials/img/saml/saml-sso-azure-5.png
rename to docs/images/cli/saml/saml-sso-azure-5.png
diff --git a/docs/tutorials/img/saml/saml-sso-azure-6.png b/docs/images/cli/saml/saml-sso-azure-6.png
similarity index 100%
rename from docs/tutorials/img/saml/saml-sso-azure-6.png
rename to docs/images/cli/saml/saml-sso-azure-6.png
diff --git a/docs/tutorials/img/saml/saml-sso-azure-7.png b/docs/images/cli/saml/saml-sso-azure-7.png
similarity index 100%
rename from docs/tutorials/img/saml/saml-sso-azure-7.png
rename to docs/images/cli/saml/saml-sso-azure-7.png
diff --git a/docs/tutorials/img/saml/saml-sso-azure-8.png b/docs/images/cli/saml/saml-sso-azure-8.png
similarity index 100%
rename from docs/tutorials/img/saml/saml-sso-azure-8.png
rename to docs/images/cli/saml/saml-sso-azure-8.png
diff --git a/docs/tutorials/img/saml/saml-sso-azure-9.png b/docs/images/cli/saml/saml-sso-azure-9.png
similarity index 100%
rename from docs/tutorials/img/saml/saml-sso-azure-9.png
rename to docs/images/cli/saml/saml-sso-azure-9.png
diff --git a/docs/tutorials/img/saml/saml-step-1.png b/docs/images/cli/saml/saml-step-1.png
similarity index 100%
rename from docs/tutorials/img/saml/saml-step-1.png
rename to docs/images/cli/saml/saml-step-1.png
diff --git a/docs/tutorials/img/saml/saml-step-2.png b/docs/images/cli/saml/saml-step-2.png
similarity index 100%
rename from docs/tutorials/img/saml/saml-step-2.png
rename to docs/images/cli/saml/saml-step-2.png
diff --git a/docs/tutorials/img/saml/saml-step-3.png b/docs/images/cli/saml/saml-step-3.png
similarity index 100%
rename from docs/tutorials/img/saml/saml-step-3.png
rename to docs/images/cli/saml/saml-step-3.png
diff --git a/docs/tutorials/img/saml/saml-step-4.png b/docs/images/cli/saml/saml-step-4.png
similarity index 100%
rename from docs/tutorials/img/saml/saml-step-4.png
rename to docs/images/cli/saml/saml-step-4.png
diff --git a/docs/tutorials/img/saml/saml-step-remove.png b/docs/images/cli/saml/saml-step-remove.png
similarity index 100%
rename from docs/tutorials/img/saml/saml-step-remove.png
rename to docs/images/cli/saml/saml-step-remove.png
diff --git a/docs/tutorials/img/saml/saml_attribute_statements.png b/docs/images/cli/saml/saml_attribute_statements.png
similarity index 100%
rename from docs/tutorials/img/saml/saml_attribute_statements.png
rename to docs/images/cli/saml/saml_attribute_statements.png
diff --git a/docs/tutorials/img/security-hub/create-integration.png b/docs/images/cli/security-hub/create-integration.png
similarity index 100%
rename from docs/tutorials/img/security-hub/create-integration.png
rename to docs/images/cli/security-hub/create-integration.png
diff --git a/docs/tutorials/img/security-hub/integration-settings.png b/docs/images/cli/security-hub/integration-settings.png
similarity index 100%
rename from docs/tutorials/img/security-hub/integration-settings.png
rename to docs/images/cli/security-hub/integration-settings.png
diff --git a/docs/tutorials/img/security-hub/integrations-tab.png b/docs/images/cli/security-hub/integrations-tab.png
similarity index 100%
rename from docs/tutorials/img/security-hub/integrations-tab.png
rename to docs/images/cli/security-hub/integrations-tab.png
diff --git a/docs/tutorials/img/slack-app-token.png b/docs/images/cli/slack-app-token.png
similarity index 100%
rename from docs/tutorials/img/slack-app-token.png
rename to docs/images/cli/slack-app-token.png
diff --git a/docs/tutorials/img/slack-prowler-message.png b/docs/images/cli/slack-prowler-message.png
similarity index 100%
rename from docs/tutorials/img/slack-prowler-message.png
rename to docs/images/cli/slack-prowler-message.png
diff --git a/docs/tutorials/img/social-login/social_login_buttons.png b/docs/images/cli/social-login/social_login_buttons.png
similarity index 100%
rename from docs/tutorials/img/social-login/social_login_buttons.png
rename to docs/images/cli/social-login/social_login_buttons.png
diff --git a/docs/tutorials/img/social-login/social_login_buttons_disabled.png b/docs/images/cli/social-login/social_login_buttons_disabled.png
similarity index 100%
rename from docs/tutorials/img/social-login/social_login_buttons_disabled.png
rename to docs/images/cli/social-login/social_login_buttons_disabled.png
diff --git a/docs/images/compliance.png b/docs/images/compliance.png
new file mode 100644
index 0000000000..b08fcc3651
Binary files /dev/null and b/docs/images/compliance.png differ
diff --git a/docs/images/compliance_download.png b/docs/images/compliance_download.png
new file mode 100644
index 0000000000..32aed141b3
Binary files /dev/null and b/docs/images/compliance_download.png differ
diff --git a/docs/images/compliance_section.png b/docs/images/compliance_section.png
new file mode 100644
index 0000000000..2b64031550
Binary files /dev/null and b/docs/images/compliance_section.png differ
diff --git a/docs/images/connect-aws-credentials.png b/docs/images/connect-aws-credentials.png
new file mode 100644
index 0000000000..7ea1f193c3
Binary files /dev/null and b/docs/images/connect-aws-credentials.png differ
diff --git a/docs/images/connect-aws-role.png b/docs/images/connect-aws-role.png
new file mode 100644
index 0000000000..78c8f6f390
Binary files /dev/null and b/docs/images/connect-aws-role.png differ
diff --git a/docs/images/create-management-group.gif b/docs/images/create-management-group.gif
new file mode 100644
index 0000000000..0088e78495
Binary files /dev/null and b/docs/images/create-management-group.gif differ
diff --git a/docs/images/download_output.png b/docs/images/download_output.png
new file mode 100644
index 0000000000..452851b84d
Binary files /dev/null and b/docs/images/download_output.png differ
diff --git a/docs/images/extended-display.png b/docs/images/extended-display.png
new file mode 100644
index 0000000000..4e97d278ff
Binary files /dev/null and b/docs/images/extended-display.png differ
diff --git a/docs/images/findings.png b/docs/images/findings.png
new file mode 100644
index 0000000000..e2ea9c56ce
Binary files /dev/null and b/docs/images/findings.png differ
diff --git a/docs/images/gcp-credentials.png b/docs/images/gcp-credentials.png
new file mode 100644
index 0000000000..4f6dae3b1e
Binary files /dev/null and b/docs/images/gcp-credentials.png differ
diff --git a/docs/images/html-output.png b/docs/images/html-output.png
new file mode 100644
index 0000000000..00a8b60812
Binary files /dev/null and b/docs/images/html-output.png differ
diff --git a/docs/images/issues.png b/docs/images/issues.png
new file mode 100644
index 0000000000..009bc0d447
Binary files /dev/null and b/docs/images/issues.png differ
diff --git a/docs/images/kubernetes-credentials.png b/docs/images/kubernetes-credentials.png
new file mode 100644
index 0000000000..b461ed218a
Binary files /dev/null and b/docs/images/kubernetes-credentials.png differ
diff --git a/docs/images/log-in.png b/docs/images/log-in.png
new file mode 100644
index 0000000000..9e6d410abe
Binary files /dev/null and b/docs/images/log-in.png differ
diff --git a/docs/tutorials/microsoft365/img/m365-credentials.png b/docs/images/m365-credentials.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/m365-credentials.png
rename to docs/images/m365-credentials.png
diff --git a/docs/images/mutelist-ui-1.png b/docs/images/mutelist-ui-1.png
new file mode 100644
index 0000000000..8114e64fdf
Binary files /dev/null and b/docs/images/mutelist-ui-1.png differ
diff --git a/docs/images/mutelist-ui-2.png b/docs/images/mutelist-ui-2.png
new file mode 100644
index 0000000000..847f7c1b16
Binary files /dev/null and b/docs/images/mutelist-ui-2.png differ
diff --git a/docs/images/mutelist-ui-3.png b/docs/images/mutelist-ui-3.png
new file mode 100644
index 0000000000..da1951c533
Binary files /dev/null and b/docs/images/mutelist-ui-3.png differ
diff --git a/docs/images/mutelist-ui-4.png b/docs/images/mutelist-ui-4.png
new file mode 100644
index 0000000000..82ce685e51
Binary files /dev/null and b/docs/images/mutelist-ui-4.png differ
diff --git a/docs/images/mutelist-ui-5.png b/docs/images/mutelist-ui-5.png
new file mode 100644
index 0000000000..128bf30731
Binary files /dev/null and b/docs/images/mutelist-ui-5.png differ
diff --git a/docs/images/mutelist-ui-6.png b/docs/images/mutelist-ui-6.png
new file mode 100644
index 0000000000..659eccb61e
Binary files /dev/null and b/docs/images/mutelist-ui-6.png differ
diff --git a/docs/images/mutelist-ui-7.png b/docs/images/mutelist-ui-7.png
new file mode 100644
index 0000000000..e6352c97e9
Binary files /dev/null and b/docs/images/mutelist-ui-7.png differ
diff --git a/docs/images/mutelist-ui-8.png b/docs/images/mutelist-ui-8.png
new file mode 100644
index 0000000000..54e2110edb
Binary files /dev/null and b/docs/images/mutelist-ui-8.png differ
diff --git a/docs/images/mutelist-ui-9.png b/docs/images/mutelist-ui-9.png
new file mode 100644
index 0000000000..cba2ece1a3
Binary files /dev/null and b/docs/images/mutelist-ui-9.png differ
diff --git a/docs/images/nacho.png b/docs/images/nacho.png
new file mode 100644
index 0000000000..549d6b6c6d
Binary files /dev/null and b/docs/images/nacho.png differ
diff --git a/docs/images/output_folder.png b/docs/images/output_folder.png
new file mode 100644
index 0000000000..11ae4d9925
Binary files /dev/null and b/docs/images/output_folder.png differ
diff --git a/docs/images/pepe.png b/docs/images/pepe.png
new file mode 100644
index 0000000000..a9aed2be15
Binary files /dev/null and b/docs/images/pepe.png differ
diff --git a/docs/images/products/dashboard.png b/docs/images/products/dashboard.png
new file mode 100644
index 0000000000..2392debbb7
Binary files /dev/null and b/docs/images/products/dashboard.png differ
diff --git a/docs/images/products/overview.png b/docs/images/products/overview.png
new file mode 100644
index 0000000000..724ffc9588
Binary files /dev/null and b/docs/images/products/overview.png differ
diff --git a/docs/images/products/prowler-app-architecture.png b/docs/images/products/prowler-app-architecture.png
new file mode 100644
index 0000000000..889bc0da88
Binary files /dev/null and b/docs/images/products/prowler-app-architecture.png differ
diff --git a/docs/images/products/prowler-hub.webp b/docs/images/products/prowler-hub.webp
new file mode 100644
index 0000000000..b489ff9012
Binary files /dev/null and b/docs/images/products/prowler-hub.webp differ
diff --git a/docs/images/provider-added.png b/docs/images/provider-added.png
new file mode 100644
index 0000000000..cfb94d2cab
Binary files /dev/null and b/docs/images/provider-added.png differ
diff --git a/docs/tutorials/gcp/img/access-console.png b/docs/images/providers/access-console.png
similarity index 100%
rename from docs/tutorials/gcp/img/access-console.png
rename to docs/images/providers/access-console.png
diff --git a/docs/tutorials/mongodbatlas/img/access-manager.png b/docs/images/providers/access-manager.png
similarity index 100%
rename from docs/tutorials/mongodbatlas/img/access-manager.png
rename to docs/images/providers/access-manager.png
diff --git a/docs/tutorials/aws/img/add-account-id.png b/docs/images/providers/add-account-id.png
similarity index 100%
rename from docs/tutorials/aws/img/add-account-id.png
rename to docs/images/providers/add-account-id.png
diff --git a/docs/tutorials/azure/img/add-api-permission.png b/docs/images/providers/add-api-permission.png
similarity index 100%
rename from docs/tutorials/azure/img/add-api-permission.png
rename to docs/images/providers/add-api-permission.png
diff --git a/docs/tutorials/microsoft365/img/add-app-api-permission.png b/docs/images/providers/add-app-api-permission.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/add-app-api-permission.png
rename to docs/images/providers/add-app-api-permission.png
diff --git a/docs/tutorials/microsoft365/img/add-assginments.png b/docs/images/providers/add-assginments.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/add-assginments.png
rename to docs/images/providers/add-assginments.png
diff --git a/docs/tutorials/azure/img/add-credentials-azure-prowler-cloud.png b/docs/images/providers/add-credentials-azure-prowler-cloud.png
similarity index 100%
rename from docs/tutorials/azure/img/add-credentials-azure-prowler-cloud.png
rename to docs/images/providers/add-credentials-azure-prowler-cloud.png
diff --git a/docs/tutorials/azure/img/add-custom-role-json.png b/docs/images/providers/add-custom-role-json.png
similarity index 100%
rename from docs/tutorials/azure/img/add-custom-role-json.png
rename to docs/images/providers/add-custom-role-json.png
diff --git a/docs/tutorials/azure/img/add-custom-role.png b/docs/images/providers/add-custom-role.png
similarity index 100%
rename from docs/tutorials/azure/img/add-custom-role.png
rename to docs/images/providers/add-custom-role.png
diff --git a/docs/tutorials/microsoft365/img/add-delegated-api-permission.png b/docs/images/providers/add-delegated-api-permission.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/add-delegated-api-permission.png
rename to docs/images/providers/add-delegated-api-permission.png
diff --git a/docs/tutorials/microsoft365/img/add-domain-id.png b/docs/images/providers/add-domain-id.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/add-domain-id.png
rename to docs/images/providers/add-domain-id.png
diff --git a/docs/tutorials/github/img/add-github-account-id.png b/docs/images/providers/add-github-account-id.png
similarity index 100%
rename from docs/tutorials/github/img/add-github-account-id.png
rename to docs/images/providers/add-github-account-id.png
diff --git a/docs/tutorials/mongodbatlas/img/add-ip.png b/docs/images/providers/add-ip.png
similarity index 100%
rename from docs/tutorials/mongodbatlas/img/add-ip.png
rename to docs/images/providers/add-ip.png
diff --git a/docs/tutorials/gcp/img/add-project-id.png b/docs/images/providers/add-project-id.png
similarity index 100%
rename from docs/tutorials/gcp/img/add-project-id.png
rename to docs/images/providers/add-project-id.png
diff --git a/docs/tutorials/azure/img/add-reader-role.png b/docs/images/providers/add-reader-role.png
similarity index 100%
rename from docs/tutorials/azure/img/add-reader-role.png
rename to docs/images/providers/add-reader-role.png
diff --git a/docs/tutorials/azure/img/add-role-assigment.png b/docs/images/providers/add-role-assigment.png
similarity index 100%
rename from docs/tutorials/azure/img/add-role-assigment.png
rename to docs/images/providers/add-role-assigment.png
diff --git a/docs/tutorials/azure/img/add-subscription-id.png b/docs/images/providers/add-subscription-id.png
similarity index 100%
rename from docs/tutorials/azure/img/add-subscription-id.png
rename to docs/images/providers/add-subscription-id.png
diff --git a/docs/tutorials/microsoft365/img/api-permissions-page.png b/docs/images/providers/api-permissions-page.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/api-permissions-page.png
rename to docs/images/providers/api-permissions-page.png
diff --git a/docs/tutorials/azure/img/api-permissions-result.png b/docs/images/providers/api-permissions-result.png
similarity index 100%
rename from docs/tutorials/azure/img/api-permissions-result.png
rename to docs/images/providers/api-permissions-result.png
diff --git a/docs/tutorials/microsoft365/img/app-overview.png b/docs/images/providers/app-overview.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/app-overview.png
rename to docs/images/providers/app-overview.png
diff --git a/docs/tutorials/microsoft365/img/app-permissions.png b/docs/images/providers/app-permissions.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/app-permissions.png
rename to docs/images/providers/app-permissions.png
diff --git a/docs/tutorials/microsoft365/img/app-registration-menu.png b/docs/images/providers/app-registration-menu.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/app-registration-menu.png
rename to docs/images/providers/app-registration-menu.png
diff --git a/docs/tutorials/azure/img/application-permissions-inside-graph.png b/docs/images/providers/application-permissions-inside-graph.png
similarity index 100%
rename from docs/tutorials/azure/img/application-permissions-inside-graph.png
rename to docs/images/providers/application-permissions-inside-graph.png
diff --git a/docs/tutorials/microsoft365/img/assign-global-reader-role.png b/docs/images/providers/assign-global-reader-role.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/assign-global-reader-role.png
rename to docs/images/providers/assign-global-reader-role.png
diff --git a/docs/tutorials/aws/img/assume-role-overview.png b/docs/images/providers/assume-role-overview.png
similarity index 100%
rename from docs/tutorials/aws/img/assume-role-overview.png
rename to docs/images/providers/assume-role-overview.png
diff --git a/docs/tutorials/github/img/auth-github-app.png b/docs/images/providers/auth-github-app.png
similarity index 100%
rename from docs/tutorials/github/img/auth-github-app.png
rename to docs/images/providers/auth-github-app.png
diff --git a/docs/tutorials/github/img/auth-oauth.png b/docs/images/providers/auth-oauth.png
similarity index 100%
rename from docs/tutorials/github/img/auth-oauth.png
rename to docs/images/providers/auth-oauth.png
diff --git a/docs/tutorials/github/img/auth-pat.png b/docs/images/providers/auth-pat.png
similarity index 100%
rename from docs/tutorials/github/img/auth-pat.png
rename to docs/images/providers/auth-pat.png
diff --git a/docs/tutorials/gcp/img/authorize-cloud-shell.png b/docs/images/providers/authorize-cloud-shell.png
similarity index 100%
rename from docs/tutorials/gcp/img/authorize-cloud-shell.png
rename to docs/images/providers/authorize-cloud-shell.png
diff --git a/docs/tutorials/aws/img/aws-account-id.png b/docs/images/providers/aws-account-id.png
similarity index 100%
rename from docs/tutorials/aws/img/aws-account-id.png
rename to docs/images/providers/aws-account-id.png
diff --git a/docs/tutorials/aws/img/aws-cloudshell.png b/docs/images/providers/aws-cloudshell.png
similarity index 100%
rename from docs/tutorials/aws/img/aws-cloudshell.png
rename to docs/images/providers/aws-cloudshell.png
diff --git a/docs/images/providers/certificate-form.png b/docs/images/providers/certificate-form.png
new file mode 100644
index 0000000000..b19c079d23
Binary files /dev/null and b/docs/images/providers/certificate-form.png differ
diff --git a/docs/tutorials/microsoft365/img/certificates-and-secrets.png b/docs/images/providers/certificates-and-secrets.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/certificates-and-secrets.png
rename to docs/images/providers/certificates-and-secrets.png
diff --git a/docs/tutorials/azure/img/click-add-permissions.png b/docs/images/providers/click-add-permissions.png
similarity index 100%
rename from docs/tutorials/azure/img/click-add-permissions.png
rename to docs/images/providers/click-add-permissions.png
diff --git a/docs/tutorials/azure/img/click-next-azure.png b/docs/images/providers/click-next-azure.png
similarity index 100%
rename from docs/tutorials/azure/img/click-next-azure.png
rename to docs/images/providers/click-next-azure.png
diff --git a/docs/tutorials/microsoft365/img/click-next-m365.png b/docs/images/providers/click-next-m365.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/click-next-m365.png
rename to docs/images/providers/click-next-m365.png
diff --git a/docs/tutorials/aws/img/cloudformation-nav.png b/docs/images/providers/cloudformation-nav.png
similarity index 100%
rename from docs/tutorials/aws/img/cloudformation-nav.png
rename to docs/images/providers/cloudformation-nav.png
diff --git a/docs/tutorials/aws/img/cloudshell-output.png b/docs/images/providers/cloudshell-output.png
similarity index 100%
rename from docs/tutorials/aws/img/cloudshell-output.png
rename to docs/images/providers/cloudshell-output.png
diff --git a/docs/tutorials/aws/img/connect-via-credentials.png b/docs/images/providers/connect-via-credentials.png
similarity index 100%
rename from docs/tutorials/aws/img/connect-via-credentials.png
rename to docs/images/providers/connect-via-credentials.png
diff --git a/docs/tutorials/gcp/img/copy-auth-code.png b/docs/images/providers/copy-auth-code.png
similarity index 100%
rename from docs/tutorials/gcp/img/copy-auth-code.png
rename to docs/images/providers/copy-auth-code.png
diff --git a/docs/tutorials/mongodbatlas/img/copy-key.png b/docs/images/providers/copy-key.png
similarity index 100%
rename from docs/tutorials/mongodbatlas/img/copy-key.png
rename to docs/images/providers/copy-key.png
diff --git a/docs/tutorials/mongodbatlas/img/create-api-key.png b/docs/images/providers/create-api-key.png
similarity index 100%
rename from docs/tutorials/mongodbatlas/img/create-api-key.png
rename to docs/images/providers/create-api-key.png
diff --git a/docs/tutorials/aws/img/create-stack.png b/docs/images/providers/create-stack.png
similarity index 100%
rename from docs/tutorials/aws/img/create-stack.png
rename to docs/images/providers/create-stack.png
diff --git a/docs/tutorials/microsoft365/img/custom-domain-names.png b/docs/images/providers/custom-domain-names.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/custom-domain-names.png
rename to docs/images/providers/custom-domain-names.png
diff --git a/docs/tutorials/microsoft365/img/directory-permission-delegated.png b/docs/images/providers/directory-permission-delegated.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/directory-permission-delegated.png
rename to docs/images/providers/directory-permission-delegated.png
diff --git a/docs/tutorials/microsoft365/img/directory-permission.png b/docs/images/providers/directory-permission.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/directory-permission.png
rename to docs/images/providers/directory-permission.png
diff --git a/docs/tutorials/azure/img/domain-permission.png b/docs/images/providers/domain-permission.png
similarity index 100%
rename from docs/tutorials/azure/img/domain-permission.png
rename to docs/images/providers/domain-permission.png
diff --git a/docs/tutorials/azure/img/download-prowler-role.png b/docs/images/providers/download-prowler-role.png
similarity index 100%
rename from docs/tutorials/azure/img/download-prowler-role.png
rename to docs/images/providers/download-prowler-role.png
diff --git a/docs/tutorials/aws/img/download-role-template.png b/docs/images/providers/download-role-template.png
similarity index 100%
rename from docs/tutorials/aws/img/download-role-template.png
rename to docs/images/providers/download-role-template.png
diff --git a/docs/tutorials/aws/img/enable-2.png b/docs/images/providers/enable-2.png
similarity index 100%
rename from docs/tutorials/aws/img/enable-2.png
rename to docs/images/providers/enable-2.png
diff --git a/docs/tutorials/aws/img/enable-partner-integration-2.png b/docs/images/providers/enable-partner-integration-2.png
similarity index 100%
rename from docs/tutorials/aws/img/enable-partner-integration-2.png
rename to docs/images/providers/enable-partner-integration-2.png
diff --git a/docs/tutorials/aws/img/enable-partner-integration-3.png b/docs/images/providers/enable-partner-integration-3.png
similarity index 100%
rename from docs/tutorials/aws/img/enable-partner-integration-3.png
rename to docs/images/providers/enable-partner-integration-3.png
diff --git a/docs/tutorials/aws/img/enable-partner-integration-4.png b/docs/images/providers/enable-partner-integration-4.png
similarity index 100%
rename from docs/tutorials/aws/img/enable-partner-integration-4.png
rename to docs/images/providers/enable-partner-integration-4.png
diff --git a/docs/tutorials/aws/img/enable-partner-integration.png b/docs/images/providers/enable-partner-integration.png
similarity index 100%
rename from docs/tutorials/aws/img/enable-partner-integration.png
rename to docs/images/providers/enable-partner-integration.png
diff --git a/docs/tutorials/aws/img/enable.png b/docs/images/providers/enable.png
similarity index 100%
rename from docs/tutorials/aws/img/enable.png
rename to docs/images/providers/enable.png
diff --git a/docs/tutorials/gcp/img/enter-auth-code.png b/docs/images/providers/enter-auth-code.png
similarity index 100%
rename from docs/tutorials/gcp/img/enter-auth-code.png
rename to docs/images/providers/enter-auth-code.png
diff --git a/docs/tutorials/gcp/img/enter-credentials-prowler-cloud.png b/docs/images/providers/enter-credentials-prowler-cloud.png
similarity index 100%
rename from docs/tutorials/gcp/img/enter-credentials-prowler-cloud.png
rename to docs/images/providers/enter-credentials-prowler-cloud.png
diff --git a/docs/tutorials/microsoft365/img/exchange-permission.png b/docs/images/providers/exchange-permission.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/exchange-permission.png
rename to docs/images/providers/exchange-permission.png
diff --git a/docs/tutorials/aws/img/fill-stack-data.png b/docs/images/providers/fill-stack-data.png
similarity index 100%
rename from docs/tutorials/aws/img/fill-stack-data.png
rename to docs/images/providers/fill-stack-data.png
diff --git a/docs/tutorials/microsoft365/img/final-permissions-m365.png b/docs/images/providers/final-permissions-m365.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/final-permissions-m365.png
rename to docs/images/providers/final-permissions-m365.png
diff --git a/docs/tutorials/microsoft365/img/final-permissions.png b/docs/images/providers/final-permissions.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/final-permissions.png
rename to docs/images/providers/final-permissions.png
diff --git a/docs/tutorials/aws/img/finding-details.png b/docs/images/providers/finding-details.png
similarity index 100%
rename from docs/tutorials/aws/img/finding-details.png
rename to docs/images/providers/finding-details.png
diff --git a/docs/tutorials/aws/img/findings.png b/docs/images/providers/findings.png
similarity index 100%
rename from docs/tutorials/aws/img/findings.png
rename to docs/images/providers/findings.png
diff --git a/docs/tutorials/aws/img/get-external-id-prowler-cloud.png b/docs/images/providers/get-external-id-prowler-cloud.png
similarity index 100%
rename from docs/tutorials/aws/img/get-external-id-prowler-cloud.png
rename to docs/images/providers/get-external-id-prowler-cloud.png
diff --git a/docs/tutorials/gcp/img/get-needed-values-auth.png b/docs/images/providers/get-needed-values-auth.png
similarity index 100%
rename from docs/tutorials/gcp/img/get-needed-values-auth.png
rename to docs/images/providers/get-needed-values-auth.png
diff --git a/docs/tutorials/aws/img/get-role-arn.png b/docs/images/providers/get-role-arn.png
similarity index 100%
rename from docs/tutorials/aws/img/get-role-arn.png
rename to docs/images/providers/get-role-arn.png
diff --git a/docs/tutorials/azure/img/get-subscription-id.png b/docs/images/providers/get-subscription-id.png
similarity index 100%
rename from docs/tutorials/azure/img/get-subscription-id.png
rename to docs/images/providers/get-subscription-id.png
diff --git a/docs/tutorials/gcp/img/get-temp-file-credentials.png b/docs/images/providers/get-temp-file-credentials.png
similarity index 100%
rename from docs/tutorials/gcp/img/get-temp-file-credentials.png
rename to docs/images/providers/get-temp-file-credentials.png
diff --git a/docs/tutorials/github/img/github-pat-permissions.png b/docs/images/providers/github-pat-permissions.png
similarity index 100%
rename from docs/tutorials/github/img/github-pat-permissions.png
rename to docs/images/providers/github-pat-permissions.png
diff --git a/docs/tutorials/microsoft365/img/global-reader-role.png b/docs/images/providers/global-reader-role.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/global-reader-role.png
rename to docs/images/providers/global-reader-role.png
diff --git a/docs/tutorials/microsoft365/img/global-reader.png b/docs/images/providers/global-reader.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/global-reader.png
rename to docs/images/providers/global-reader.png
diff --git a/docs/tutorials/microsoft365/img/grant-admin-consent-delegated.png b/docs/images/providers/grant-admin-consent-delegated.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/grant-admin-consent-delegated.png
rename to docs/images/providers/grant-admin-consent-delegated.png
diff --git a/docs/tutorials/microsoft365/img/grant-admin-consent-for-role.png b/docs/images/providers/grant-admin-consent-for-role.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/grant-admin-consent-for-role.png
rename to docs/images/providers/grant-admin-consent-for-role.png
diff --git a/docs/tutorials/microsoft365/img/grant-admin-consent.png b/docs/images/providers/grant-admin-consent.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/grant-admin-consent.png
rename to docs/images/providers/grant-admin-consent.png
diff --git a/docs/tutorials/microsoft365/img/grant-external-api-permissions.png b/docs/images/providers/grant-external-api-permissions.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/grant-external-api-permissions.png
rename to docs/images/providers/grant-external-api-permissions.png
diff --git a/docs/tutorials/microsoft365/img/here.png b/docs/images/providers/here.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/here.png
rename to docs/images/providers/here.png
diff --git a/docs/tutorials/azure/img/iam-azure-page.png b/docs/images/providers/iam-azure-page.png
similarity index 100%
rename from docs/tutorials/azure/img/iam-azure-page.png
rename to docs/images/providers/iam-azure-page.png
diff --git a/docs/tutorials/mongodbatlas/img/ip-access-list.png b/docs/images/providers/ip-access-list.png
similarity index 100%
rename from docs/tutorials/mongodbatlas/img/ip-access-list.png
rename to docs/images/providers/ip-access-list.png
diff --git a/docs/tutorials/aws/img/launch-scan-button-prowler-cloud.png b/docs/images/providers/launch-scan-button-prowler-cloud.png
similarity index 100%
rename from docs/tutorials/aws/img/launch-scan-button-prowler-cloud.png
rename to docs/images/providers/launch-scan-button-prowler-cloud.png
diff --git a/docs/tutorials/microsoft365/img/launch-scan.png b/docs/images/providers/launch-scan.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/launch-scan.png
rename to docs/images/providers/launch-scan.png
diff --git a/docs/images/providers/m365-auth-selection-form.png b/docs/images/providers/m365-auth-selection-form.png
new file mode 100644
index 0000000000..4757f44d96
Binary files /dev/null and b/docs/images/providers/m365-auth-selection-form.png differ
diff --git a/docs/images/providers/m365-credentials.png b/docs/images/providers/m365-credentials.png
new file mode 100644
index 0000000000..ab912f9d8e
Binary files /dev/null and b/docs/images/providers/m365-credentials.png differ
diff --git a/docs/tutorials/azure/img/member-select-app-prowler.png b/docs/images/providers/member-select-app-prowler.png
similarity index 100%
rename from docs/tutorials/azure/img/member-select-app-prowler.png
rename to docs/images/providers/member-select-app-prowler.png
diff --git a/docs/tutorials/microsoft365/img/microsoft-entra-id.png b/docs/images/providers/microsoft-entra-id.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/microsoft-entra-id.png
rename to docs/images/providers/microsoft-entra-id.png
diff --git a/docs/tutorials/azure/img/microsoft-graph-detail.png b/docs/images/providers/microsoft-graph-detail.png
similarity index 100%
rename from docs/tutorials/azure/img/microsoft-graph-detail.png
rename to docs/images/providers/microsoft-graph-detail.png
diff --git a/docs/tutorials/mongodbatlas/img/modify-permission.png b/docs/images/providers/modify-permission.png
similarity index 100%
rename from docs/tutorials/mongodbatlas/img/modify-permission.png
rename to docs/images/providers/modify-permission.png
diff --git a/docs/tutorials/microsoft365/img/new-client-secret.png b/docs/images/providers/new-client-secret.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/new-client-secret.png
rename to docs/images/providers/new-client-secret.png
diff --git a/docs/tutorials/microsoft365/img/new-registration.png b/docs/images/providers/new-registration.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/new-registration.png
rename to docs/images/providers/new-registration.png
diff --git a/docs/tutorials/aws/img/next-button-prowler-cloud.png b/docs/images/providers/next-button-prowler-cloud.png
similarity index 100%
rename from docs/tutorials/aws/img/next-button-prowler-cloud.png
rename to docs/images/providers/next-button-prowler-cloud.png
diff --git a/docs/tutorials/aws/img/next-cloudformation-template.png b/docs/images/providers/next-cloudformation-template.png
similarity index 100%
rename from docs/tutorials/aws/img/next-cloudformation-template.png
rename to docs/images/providers/next-cloudformation-template.png
diff --git a/docs/tutorials/gcp/img/open-link-console.png b/docs/images/providers/open-link-console.png
similarity index 100%
rename from docs/tutorials/gcp/img/open-link-console.png
rename to docs/images/providers/open-link-console.png
diff --git a/docs/tutorials/mongodbatlas/img/organization-access.png b/docs/images/providers/organization-access.png
similarity index 100%
rename from docs/tutorials/mongodbatlas/img/organization-access.png
rename to docs/images/providers/organization-access.png
diff --git a/docs/tutorials/aws/img/paste-role-arn-prowler.png b/docs/images/providers/paste-role-arn-prowler.png
similarity index 100%
rename from docs/tutorials/aws/img/paste-role-arn-prowler.png
rename to docs/images/providers/paste-role-arn-prowler.png
diff --git a/docs/tutorials/azure/img/policy-permission.png b/docs/images/providers/policy-permission.png
similarity index 100%
rename from docs/tutorials/azure/img/policy-permission.png
rename to docs/images/providers/policy-permission.png
diff --git a/docs/tutorials/gcp/img/project-id-console.png b/docs/images/providers/project-id-console.png
similarity index 100%
rename from docs/tutorials/gcp/img/project-id-console.png
rename to docs/images/providers/project-id-console.png
diff --git a/docs/tutorials/azure/img/prowler-app-registration.png b/docs/images/providers/prowler-app-registration.png
similarity index 100%
rename from docs/tutorials/azure/img/prowler-app-registration.png
rename to docs/images/providers/prowler-app-registration.png
diff --git a/docs/tutorials/aws/img/prowler-cloud-credentials-next.png b/docs/images/providers/prowler-cloud-credentials-next.png
similarity index 100%
rename from docs/tutorials/aws/img/prowler-cloud-credentials-next.png
rename to docs/images/providers/prowler-cloud-credentials-next.png
diff --git a/docs/tutorials/aws/img/prowler-cloud-external-id.png b/docs/images/providers/prowler-cloud-external-id.png
similarity index 100%
rename from docs/tutorials/aws/img/prowler-cloud-external-id.png
rename to docs/images/providers/prowler-cloud-external-id.png
diff --git a/docs/tutorials/aws/img/prowler-scan-pre-info.png b/docs/images/providers/prowler-scan-pre-info.png
similarity index 100%
rename from docs/tutorials/aws/img/prowler-scan-pre-info.png
rename to docs/images/providers/prowler-scan-pre-info.png
diff --git a/docs/tutorials/aws/img/prowler-scan-role-template.png b/docs/images/providers/prowler-scan-role-template.png
similarity index 100%
rename from docs/tutorials/aws/img/prowler-scan-role-template.png
rename to docs/images/providers/prowler-scan-role-template.png
diff --git a/docs/tutorials/azure/img/review-and-assign-last-step.png b/docs/images/providers/review-and-assign-last-step.png
similarity index 100%
rename from docs/tutorials/azure/img/review-and-assign-last-step.png
rename to docs/images/providers/review-and-assign-last-step.png
diff --git a/docs/tutorials/azure/img/review-and-create.png b/docs/images/providers/review-and-create.png
similarity index 100%
rename from docs/tutorials/azure/img/review-and-create.png
rename to docs/images/providers/review-and-create.png
diff --git a/docs/tutorials/gcp/img/run-gcloud-auth.png b/docs/images/providers/run-gcloud-auth.png
similarity index 100%
rename from docs/tutorials/gcp/img/run-gcloud-auth.png
rename to docs/images/providers/run-gcloud-auth.png
diff --git a/docs/tutorials/microsoft365/img/search-default-domain.png b/docs/images/providers/search-default-domain.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/search-default-domain.png
rename to docs/images/providers/search-default-domain.png
diff --git a/docs/tutorials/microsoft365/img/search-domain-names.png b/docs/images/providers/search-domain-names.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/search-domain-names.png
rename to docs/images/providers/search-domain-names.png
diff --git a/docs/tutorials/microsoft365/img/search-exchange-api.png b/docs/images/providers/search-exchange-api.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/search-exchange-api.png
rename to docs/images/providers/search-exchange-api.png
diff --git a/docs/tutorials/azure/img/search-microsoft-entra-id.png b/docs/images/providers/search-microsoft-entra-id.png
similarity index 100%
rename from docs/tutorials/azure/img/search-microsoft-entra-id.png
rename to docs/images/providers/search-microsoft-entra-id.png
diff --git a/docs/tutorials/microsoft365/img/search-skype-teams-tenant-admin-api.png b/docs/images/providers/search-skype-teams-tenant-admin-api.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/search-skype-teams-tenant-admin-api.png
rename to docs/images/providers/search-skype-teams-tenant-admin-api.png
diff --git a/docs/tutorials/azure/img/search-subscriptions.png b/docs/images/providers/search-subscriptions.png
similarity index 100%
rename from docs/tutorials/azure/img/search-subscriptions.png
rename to docs/images/providers/search-subscriptions.png
diff --git a/docs/images/providers/secret-form.png b/docs/images/providers/secret-form.png
new file mode 100644
index 0000000000..e202c56aab
Binary files /dev/null and b/docs/images/providers/secret-form.png differ
diff --git a/docs/tutorials/github/img/select-auth-method.png b/docs/images/providers/select-auth-method.png
similarity index 100%
rename from docs/tutorials/github/img/select-auth-method.png
rename to docs/images/providers/select-auth-method.png
diff --git a/docs/tutorials/aws/img/select-aws.png b/docs/images/providers/select-aws.png
similarity index 100%
rename from docs/tutorials/aws/img/select-aws.png
rename to docs/images/providers/select-aws.png
diff --git a/docs/tutorials/azure/img/select-azure-prowler-cloud.png b/docs/images/providers/select-azure-prowler-cloud.png
similarity index 100%
rename from docs/tutorials/azure/img/select-azure-prowler-cloud.png
rename to docs/images/providers/select-azure-prowler-cloud.png
diff --git a/docs/tutorials/azure/img/select-custom-role-prowler.png b/docs/images/providers/select-custom-role-prowler.png
similarity index 100%
rename from docs/tutorials/azure/img/select-custom-role-prowler.png
rename to docs/images/providers/select-custom-role-prowler.png
diff --git a/docs/tutorials/gcp/img/select-gcp.png b/docs/images/providers/select-gcp.png
similarity index 100%
rename from docs/tutorials/gcp/img/select-gcp.png
rename to docs/images/providers/select-gcp.png
diff --git a/docs/tutorials/github/img/select-github.png b/docs/images/providers/select-github.png
similarity index 100%
rename from docs/tutorials/github/img/select-github.png
rename to docs/images/providers/select-github.png
diff --git a/docs/tutorials/microsoft365/img/select-m365-prowler-cloud.png b/docs/images/providers/select-m365-prowler-cloud.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/select-m365-prowler-cloud.png
rename to docs/images/providers/select-m365-prowler-cloud.png
diff --git a/docs/tutorials/azure/img/select-members-iam.png b/docs/images/providers/select-members-iam.png
similarity index 100%
rename from docs/tutorials/azure/img/select-members-iam.png
rename to docs/images/providers/select-members-iam.png
diff --git a/docs/tutorials/aws/img/stack-creation-second-step.png b/docs/images/providers/stack-creation-second-step.png
similarity index 100%
rename from docs/tutorials/aws/img/stack-creation-second-step.png
rename to docs/images/providers/stack-creation-second-step.png
diff --git a/docs/tutorials/aws/img/submit-third-page.png b/docs/images/providers/submit-third-page.png
similarity index 100%
rename from docs/tutorials/aws/img/submit-third-page.png
rename to docs/images/providers/submit-third-page.png
diff --git a/docs/tutorials/azure/img/subscription-page-azure.png b/docs/images/providers/subscription-page-azure.png
similarity index 100%
rename from docs/tutorials/azure/img/subscription-page-azure.png
rename to docs/images/providers/subscription-page-azure.png
diff --git a/docs/tutorials/gcp/img/take-account-email.png b/docs/images/providers/take-account-email.png
similarity index 100%
rename from docs/tutorials/gcp/img/take-account-email.png
rename to docs/images/providers/take-account-email.png
diff --git a/docs/tutorials/microsoft365/img/teams-permission.png b/docs/images/providers/teams-permission.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/teams-permission.png
rename to docs/images/providers/teams-permission.png
diff --git a/docs/tutorials/aws/img/upload-template-file.png b/docs/images/providers/upload-template-file.png
similarity index 100%
rename from docs/tutorials/aws/img/upload-template-file.png
rename to docs/images/providers/upload-template-file.png
diff --git a/docs/tutorials/aws/img/upload-template-from-downloads.png b/docs/images/providers/upload-template-from-downloads.png
similarity index 100%
rename from docs/tutorials/aws/img/upload-template-from-downloads.png
rename to docs/images/providers/upload-template-from-downloads.png
diff --git a/docs/tutorials/microsoft365/img/user-domains.png b/docs/images/providers/user-domains.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/user-domains.png
rename to docs/images/providers/user-domains.png
diff --git a/docs/tutorials/microsoft365/img/user-info-page.png b/docs/images/providers/user-info-page.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/user-info-page.png
rename to docs/images/providers/user-info-page.png
diff --git a/docs/tutorials/azure/img/user-permission.png b/docs/images/providers/user-permission.png
similarity index 100%
rename from docs/tutorials/azure/img/user-permission.png
rename to docs/images/providers/user-permission.png
diff --git a/docs/tutorials/microsoft365/img/user-role-page.png b/docs/images/providers/user-role-page.png
similarity index 100%
rename from docs/tutorials/microsoft365/img/user-role-page.png
rename to docs/images/providers/user-role-page.png
diff --git a/docs/images/prowler-app/add-cloud-provider.png b/docs/images/prowler-app/add-cloud-provider.png
new file mode 100644
index 0000000000..dd42e73047
Binary files /dev/null and b/docs/images/prowler-app/add-cloud-provider.png differ
diff --git a/docs/images/prowler-app/bulk-provider-provisioning.png b/docs/images/prowler-app/bulk-provider-provisioning.png
new file mode 100644
index 0000000000..c43c746874
Binary files /dev/null and b/docs/images/prowler-app/bulk-provider-provisioning.png differ
diff --git a/docs/images/prowler-app/cloud-providers-page.png b/docs/images/prowler-app/cloud-providers-page.png
new file mode 100644
index 0000000000..0581e0132f
Binary files /dev/null and b/docs/images/prowler-app/cloud-providers-page.png differ
diff --git a/docs/images/prowler-app/compliance/compliance-cis-sample1.png b/docs/images/prowler-app/compliance/compliance-cis-sample1.png
new file mode 100644
index 0000000000..925e5c80f8
Binary files /dev/null and b/docs/images/prowler-app/compliance/compliance-cis-sample1.png differ
diff --git a/docs/images/prowler-app/compliance/compliance.png b/docs/images/prowler-app/compliance/compliance.png
new file mode 100644
index 0000000000..de5c27fbe3
Binary files /dev/null and b/docs/images/prowler-app/compliance/compliance.png differ
diff --git a/docs/images/prowler-app/create-slack-app.png b/docs/images/prowler-app/create-slack-app.png
new file mode 100644
index 0000000000..dc910634ec
Binary files /dev/null and b/docs/images/prowler-app/create-slack-app.png differ
diff --git a/docs/images/prowler-app/create-sp.gif b/docs/images/prowler-app/create-sp.gif
new file mode 100644
index 0000000000..1ed345bb6a
Binary files /dev/null and b/docs/images/prowler-app/create-sp.gif differ
diff --git a/docs/images/prowler-app/dashboard/dashboard-banner.png b/docs/images/prowler-app/dashboard/dashboard-banner.png
new file mode 100644
index 0000000000..3d6dc92304
Binary files /dev/null and b/docs/images/prowler-app/dashboard/dashboard-banner.png differ
diff --git a/docs/images/prowler-app/dashboard/dashboard-compliance.png b/docs/images/prowler-app/dashboard/dashboard-compliance.png
new file mode 100644
index 0000000000..95fb7179f9
Binary files /dev/null and b/docs/images/prowler-app/dashboard/dashboard-compliance.png differ
diff --git a/docs/images/prowler-app/dashboard/dashboard-files-scanned.png b/docs/images/prowler-app/dashboard/dashboard-files-scanned.png
new file mode 100644
index 0000000000..2629a8ac77
Binary files /dev/null and b/docs/images/prowler-app/dashboard/dashboard-files-scanned.png differ
diff --git a/docs/images/prowler-app/dashboard/dashboard-overview.png b/docs/images/prowler-app/dashboard/dashboard-overview.png
new file mode 100644
index 0000000000..a5a470cb0e
Binary files /dev/null and b/docs/images/prowler-app/dashboard/dashboard-overview.png differ
diff --git a/docs/images/prowler-app/dashboard/dropdown.png b/docs/images/prowler-app/dashboard/dropdown.png
new file mode 100644
index 0000000000..b1df77798e
Binary files /dev/null and b/docs/images/prowler-app/dashboard/dropdown.png differ
diff --git a/docs/images/prowler-app/fixer.png b/docs/images/prowler-app/fixer.png
new file mode 100644
index 0000000000..d794485454
Binary files /dev/null and b/docs/images/prowler-app/fixer.png differ
diff --git a/docs/images/prowler-app/gcp-auth-methods.png b/docs/images/prowler-app/gcp-auth-methods.png
new file mode 100644
index 0000000000..dc8681396e
Binary files /dev/null and b/docs/images/prowler-app/gcp-auth-methods.png differ
diff --git a/docs/images/prowler-app/gcp-service-account-creds.png b/docs/images/prowler-app/gcp-service-account-creds.png
new file mode 100644
index 0000000000..af09776ab1
Binary files /dev/null and b/docs/images/prowler-app/gcp-service-account-creds.png differ
diff --git a/docs/images/prowler-app/github-app-credentials.png b/docs/images/prowler-app/github-app-credentials.png
new file mode 100644
index 0000000000..1a71db4fbd
Binary files /dev/null and b/docs/images/prowler-app/github-app-credentials.png differ
diff --git a/docs/images/prowler-app/github-auth-methods.png b/docs/images/prowler-app/github-auth-methods.png
new file mode 100644
index 0000000000..17414054aa
Binary files /dev/null and b/docs/images/prowler-app/github-auth-methods.png differ
diff --git a/docs/images/prowler-app/github-oauth-credentials.png b/docs/images/prowler-app/github-oauth-credentials.png
new file mode 100644
index 0000000000..5d84c4bf75
Binary files /dev/null and b/docs/images/prowler-app/github-oauth-credentials.png differ
diff --git a/docs/images/prowler-app/github-pat-credentials.png b/docs/images/prowler-app/github-pat-credentials.png
new file mode 100644
index 0000000000..044cbb7996
Binary files /dev/null and b/docs/images/prowler-app/github-pat-credentials.png differ
diff --git a/docs/images/prowler-app/install-in-slack-workspace.png b/docs/images/prowler-app/install-in-slack-workspace.png
new file mode 100644
index 0000000000..649c107cdd
Binary files /dev/null and b/docs/images/prowler-app/install-in-slack-workspace.png differ
diff --git a/docs/images/prowler-app/integrate-slack-app.png b/docs/images/prowler-app/integrate-slack-app.png
new file mode 100644
index 0000000000..beea9ef56b
Binary files /dev/null and b/docs/images/prowler-app/integrate-slack-app.png differ
diff --git a/docs/images/prowler-app/jira/connection-settings.png b/docs/images/prowler-app/jira/connection-settings.png
new file mode 100644
index 0000000000..86ebe73dea
Binary files /dev/null and b/docs/images/prowler-app/jira/connection-settings.png differ
diff --git a/docs/images/prowler-app/jira/integrations-tab.png b/docs/images/prowler-app/jira/integrations-tab.png
new file mode 100644
index 0000000000..e71773fc52
Binary files /dev/null and b/docs/images/prowler-app/jira/integrations-tab.png differ
diff --git a/docs/images/prowler-app/jira/send-to-jira-modal.png b/docs/images/prowler-app/jira/send-to-jira-modal.png
new file mode 100644
index 0000000000..2cf498926a
Binary files /dev/null and b/docs/images/prowler-app/jira/send-to-jira-modal.png differ
diff --git a/docs/images/prowler-app/lighthouse-architecture.png b/docs/images/prowler-app/lighthouse-architecture.png
new file mode 100644
index 0000000000..63202ce7c7
Binary files /dev/null and b/docs/images/prowler-app/lighthouse-architecture.png differ
diff --git a/docs/images/prowler-app/lighthouse-config.png b/docs/images/prowler-app/lighthouse-config.png
new file mode 100644
index 0000000000..8bae46f51b
Binary files /dev/null and b/docs/images/prowler-app/lighthouse-config.png differ
diff --git a/docs/images/prowler-app/lighthouse-feature1.png b/docs/images/prowler-app/lighthouse-feature1.png
new file mode 100644
index 0000000000..4568f5752a
Binary files /dev/null and b/docs/images/prowler-app/lighthouse-feature1.png differ
diff --git a/docs/images/prowler-app/lighthouse-feature2.png b/docs/images/prowler-app/lighthouse-feature2.png
new file mode 100644
index 0000000000..01e72bbaf4
Binary files /dev/null and b/docs/images/prowler-app/lighthouse-feature2.png differ
diff --git a/docs/images/prowler-app/lighthouse-feature3.png b/docs/images/prowler-app/lighthouse-feature3.png
new file mode 100644
index 0000000000..a40177cf18
Binary files /dev/null and b/docs/images/prowler-app/lighthouse-feature3.png differ
diff --git a/docs/images/prowler-app/lighthouse-intro.png b/docs/images/prowler-app/lighthouse-intro.png
new file mode 100644
index 0000000000..38d3f0819c
Binary files /dev/null and b/docs/images/prowler-app/lighthouse-intro.png differ
diff --git a/docs/images/prowler-app/mutelist-keys.png b/docs/images/prowler-app/mutelist-keys.png
new file mode 100644
index 0000000000..0822344376
Binary files /dev/null and b/docs/images/prowler-app/mutelist-keys.png differ
diff --git a/docs/images/prowler-app/mutelist-row.png b/docs/images/prowler-app/mutelist-row.png
new file mode 100644
index 0000000000..0ed7d75a7d
Binary files /dev/null and b/docs/images/prowler-app/mutelist-row.png differ
diff --git a/docs/images/prowler-app/rbac/invitation_details.png b/docs/images/prowler-app/rbac/invitation_details.png
new file mode 100644
index 0000000000..656a698308
Binary files /dev/null and b/docs/images/prowler-app/rbac/invitation_details.png differ
diff --git a/docs/images/prowler-app/rbac/invitation_details_1.png b/docs/images/prowler-app/rbac/invitation_details_1.png
new file mode 100644
index 0000000000..e167db74af
Binary files /dev/null and b/docs/images/prowler-app/rbac/invitation_details_1.png differ
diff --git a/docs/images/prowler-app/rbac/invitation_edit.png b/docs/images/prowler-app/rbac/invitation_edit.png
new file mode 100644
index 0000000000..ef3d81f192
Binary files /dev/null and b/docs/images/prowler-app/rbac/invitation_edit.png differ
diff --git a/docs/images/prowler-app/rbac/invitation_edit_1.png b/docs/images/prowler-app/rbac/invitation_edit_1.png
new file mode 100644
index 0000000000..6d1a1d2223
Binary files /dev/null and b/docs/images/prowler-app/rbac/invitation_edit_1.png differ
diff --git a/docs/images/prowler-app/rbac/invitation_info.png b/docs/images/prowler-app/rbac/invitation_info.png
new file mode 100644
index 0000000000..a6ec05f976
Binary files /dev/null and b/docs/images/prowler-app/rbac/invitation_info.png differ
diff --git a/docs/images/prowler-app/rbac/invitation_revoke.png b/docs/images/prowler-app/rbac/invitation_revoke.png
new file mode 100644
index 0000000000..6c4e042c16
Binary files /dev/null and b/docs/images/prowler-app/rbac/invitation_revoke.png differ
diff --git a/docs/images/prowler-app/rbac/invitation_sign-up.png b/docs/images/prowler-app/rbac/invitation_sign-up.png
new file mode 100644
index 0000000000..f5b67a7762
Binary files /dev/null and b/docs/images/prowler-app/rbac/invitation_sign-up.png differ
diff --git a/docs/images/prowler-app/rbac/invite.png b/docs/images/prowler-app/rbac/invite.png
new file mode 100644
index 0000000000..dd60aba314
Binary files /dev/null and b/docs/images/prowler-app/rbac/invite.png differ
diff --git a/docs/images/prowler-app/rbac/membership.png b/docs/images/prowler-app/rbac/membership.png
new file mode 100644
index 0000000000..e2b96e40f5
Binary files /dev/null and b/docs/images/prowler-app/rbac/membership.png differ
diff --git a/docs/images/prowler-app/rbac/provider_group.png b/docs/images/prowler-app/rbac/provider_group.png
new file mode 100644
index 0000000000..878306e02f
Binary files /dev/null and b/docs/images/prowler-app/rbac/provider_group.png differ
diff --git a/docs/images/prowler-app/rbac/provider_group_edit.png b/docs/images/prowler-app/rbac/provider_group_edit.png
new file mode 100644
index 0000000000..5de9649578
Binary files /dev/null and b/docs/images/prowler-app/rbac/provider_group_edit.png differ
diff --git a/docs/images/prowler-app/rbac/provider_group_edit_1.png b/docs/images/prowler-app/rbac/provider_group_edit_1.png
new file mode 100644
index 0000000000..ed4a090eed
Binary files /dev/null and b/docs/images/prowler-app/rbac/provider_group_edit_1.png differ
diff --git a/docs/images/prowler-app/rbac/provider_group_remove.png b/docs/images/prowler-app/rbac/provider_group_remove.png
new file mode 100644
index 0000000000..580a8533cf
Binary files /dev/null and b/docs/images/prowler-app/rbac/provider_group_remove.png differ
diff --git a/docs/images/prowler-app/rbac/role_create.png b/docs/images/prowler-app/rbac/role_create.png
new file mode 100644
index 0000000000..8dc270f209
Binary files /dev/null and b/docs/images/prowler-app/rbac/role_create.png differ
diff --git a/docs/images/prowler-app/rbac/role_create_1.png b/docs/images/prowler-app/rbac/role_create_1.png
new file mode 100644
index 0000000000..a96b0ac9ef
Binary files /dev/null and b/docs/images/prowler-app/rbac/role_create_1.png differ
diff --git a/docs/images/prowler-app/rbac/role_edit.png b/docs/images/prowler-app/rbac/role_edit.png
new file mode 100644
index 0000000000..775b4b8562
Binary files /dev/null and b/docs/images/prowler-app/rbac/role_edit.png differ
diff --git a/docs/images/prowler-app/rbac/role_edit_details.png b/docs/images/prowler-app/rbac/role_edit_details.png
new file mode 100644
index 0000000000..6170f210b1
Binary files /dev/null and b/docs/images/prowler-app/rbac/role_edit_details.png differ
diff --git a/docs/images/prowler-app/rbac/role_remove.png b/docs/images/prowler-app/rbac/role_remove.png
new file mode 100644
index 0000000000..613f770bd4
Binary files /dev/null and b/docs/images/prowler-app/rbac/role_remove.png differ
diff --git a/docs/images/prowler-app/rbac/user_edit.png b/docs/images/prowler-app/rbac/user_edit.png
new file mode 100644
index 0000000000..421ea93156
Binary files /dev/null and b/docs/images/prowler-app/rbac/user_edit.png differ
diff --git a/docs/images/prowler-app/rbac/user_edit_details.png b/docs/images/prowler-app/rbac/user_edit_details.png
new file mode 100644
index 0000000000..3e4734f142
Binary files /dev/null and b/docs/images/prowler-app/rbac/user_edit_details.png differ
diff --git a/docs/images/prowler-app/rbac/user_remove.png b/docs/images/prowler-app/rbac/user_remove.png
new file mode 100644
index 0000000000..4c368ded66
Binary files /dev/null and b/docs/images/prowler-app/rbac/user_remove.png differ
diff --git a/docs/images/prowler-app/reporting/html-output.png b/docs/images/prowler-app/reporting/html-output.png
new file mode 100644
index 0000000000..00a8b60812
Binary files /dev/null and b/docs/images/prowler-app/reporting/html-output.png differ
diff --git a/docs/images/prowler-app/s3/s3-cross-account.png b/docs/images/prowler-app/s3/s3-cross-account.png
new file mode 100644
index 0000000000..ad34a303fc
Binary files /dev/null and b/docs/images/prowler-app/s3/s3-cross-account.png differ
diff --git a/docs/images/prowler-app/s3/s3-integration-ui-1.png b/docs/images/prowler-app/s3/s3-integration-ui-1.png
new file mode 100644
index 0000000000..1081f20453
Binary files /dev/null and b/docs/images/prowler-app/s3/s3-integration-ui-1.png differ
diff --git a/docs/images/prowler-app/s3/s3-integration-ui-2.png b/docs/images/prowler-app/s3/s3-integration-ui-2.png
new file mode 100644
index 0000000000..618621ce26
Binary files /dev/null and b/docs/images/prowler-app/s3/s3-integration-ui-2.png differ
diff --git a/docs/images/prowler-app/s3/s3-integration-ui-3.png b/docs/images/prowler-app/s3/s3-integration-ui-3.png
new file mode 100644
index 0000000000..6fabbe2ed3
Binary files /dev/null and b/docs/images/prowler-app/s3/s3-integration-ui-3.png differ
diff --git a/docs/images/prowler-app/s3/s3-integration-ui-4.png b/docs/images/prowler-app/s3/s3-integration-ui-4.png
new file mode 100644
index 0000000000..1967eda8af
Binary files /dev/null and b/docs/images/prowler-app/s3/s3-integration-ui-4.png differ
diff --git a/docs/images/prowler-app/s3/s3-integration-ui-5.png b/docs/images/prowler-app/s3/s3-integration-ui-5.png
new file mode 100644
index 0000000000..ffdea752f1
Binary files /dev/null and b/docs/images/prowler-app/s3/s3-integration-ui-5.png differ
diff --git a/docs/images/prowler-app/s3/s3-integration-ui-6.png b/docs/images/prowler-app/s3/s3-integration-ui-6.png
new file mode 100644
index 0000000000..330588e17b
Binary files /dev/null and b/docs/images/prowler-app/s3/s3-integration-ui-6.png differ
diff --git a/docs/images/prowler-app/s3/s3-integration-ui-7.png b/docs/images/prowler-app/s3/s3-integration-ui-7.png
new file mode 100644
index 0000000000..3448f82a48
Binary files /dev/null and b/docs/images/prowler-app/s3/s3-integration-ui-7.png differ
diff --git a/docs/images/prowler-app/s3/s3-multiple-accounts.png b/docs/images/prowler-app/s3/s3-multiple-accounts.png
new file mode 100644
index 0000000000..db30e09841
Binary files /dev/null and b/docs/images/prowler-app/s3/s3-multiple-accounts.png differ
diff --git a/docs/images/prowler-app/s3/s3-output-folder.png b/docs/images/prowler-app/s3/s3-output-folder.png
new file mode 100644
index 0000000000..448687a8b1
Binary files /dev/null and b/docs/images/prowler-app/s3/s3-output-folder.png differ
diff --git a/docs/images/prowler-app/s3/s3-same-account.png b/docs/images/prowler-app/s3/s3-same-account.png
new file mode 100644
index 0000000000..39e586c762
Binary files /dev/null and b/docs/images/prowler-app/s3/s3-same-account.png differ
diff --git a/docs/images/prowler-app/saml/app-catalog-browse-prowler-add.png b/docs/images/prowler-app/saml/app-catalog-browse-prowler-add.png
new file mode 100644
index 0000000000..71c70bb7cd
Binary files /dev/null and b/docs/images/prowler-app/saml/app-catalog-browse-prowler-add.png differ
diff --git a/docs/images/prowler-app/saml/app-catalog-browse-prowler-configure.png b/docs/images/prowler-app/saml/app-catalog-browse-prowler-configure.png
new file mode 100644
index 0000000000..6d5715eb92
Binary files /dev/null and b/docs/images/prowler-app/saml/app-catalog-browse-prowler-configure.png differ
diff --git a/docs/images/prowler-app/saml/app-catalog-browse-prowler.png b/docs/images/prowler-app/saml/app-catalog-browse-prowler.png
new file mode 100644
index 0000000000..5706997980
Binary files /dev/null and b/docs/images/prowler-app/saml/app-catalog-browse-prowler.png differ
diff --git a/docs/images/prowler-app/saml/app-catalog-browse.png b/docs/images/prowler-app/saml/app-catalog-browse.png
new file mode 100644
index 0000000000..d0a9b6926d
Binary files /dev/null and b/docs/images/prowler-app/saml/app-catalog-browse.png differ
diff --git a/docs/images/prowler-app/saml/idp_config.png b/docs/images/prowler-app/saml/idp_config.png
new file mode 100644
index 0000000000..0665b34886
Binary files /dev/null and b/docs/images/prowler-app/saml/idp_config.png differ
diff --git a/docs/images/prowler-app/saml/saml-signin-1.png b/docs/images/prowler-app/saml/saml-signin-1.png
new file mode 100644
index 0000000000..5da2e84711
Binary files /dev/null and b/docs/images/prowler-app/saml/saml-signin-1.png differ
diff --git a/docs/images/prowler-app/saml/saml-signin-2.png b/docs/images/prowler-app/saml/saml-signin-2.png
new file mode 100644
index 0000000000..f0f7082fc9
Binary files /dev/null and b/docs/images/prowler-app/saml/saml-signin-2.png differ
diff --git a/docs/images/prowler-app/saml/saml-sso-azure-1.png b/docs/images/prowler-app/saml/saml-sso-azure-1.png
new file mode 100644
index 0000000000..c714d742e7
Binary files /dev/null and b/docs/images/prowler-app/saml/saml-sso-azure-1.png differ
diff --git a/docs/images/prowler-app/saml/saml-sso-azure-2.png b/docs/images/prowler-app/saml/saml-sso-azure-2.png
new file mode 100644
index 0000000000..483af4548c
Binary files /dev/null and b/docs/images/prowler-app/saml/saml-sso-azure-2.png differ
diff --git a/docs/images/prowler-app/saml/saml-sso-azure-3.png b/docs/images/prowler-app/saml/saml-sso-azure-3.png
new file mode 100644
index 0000000000..7983694c5c
Binary files /dev/null and b/docs/images/prowler-app/saml/saml-sso-azure-3.png differ
diff --git a/docs/images/prowler-app/saml/saml-sso-azure-4.png b/docs/images/prowler-app/saml/saml-sso-azure-4.png
new file mode 100644
index 0000000000..f6c6029343
Binary files /dev/null and b/docs/images/prowler-app/saml/saml-sso-azure-4.png differ
diff --git a/docs/images/prowler-app/saml/saml-sso-azure-5.png b/docs/images/prowler-app/saml/saml-sso-azure-5.png
new file mode 100644
index 0000000000..6dbeb6e65d
Binary files /dev/null and b/docs/images/prowler-app/saml/saml-sso-azure-5.png differ
diff --git a/docs/images/prowler-app/saml/saml-sso-azure-6.png b/docs/images/prowler-app/saml/saml-sso-azure-6.png
new file mode 100644
index 0000000000..b351004a87
Binary files /dev/null and b/docs/images/prowler-app/saml/saml-sso-azure-6.png differ
diff --git a/docs/images/prowler-app/saml/saml-sso-azure-7.png b/docs/images/prowler-app/saml/saml-sso-azure-7.png
new file mode 100644
index 0000000000..76551bef06
Binary files /dev/null and b/docs/images/prowler-app/saml/saml-sso-azure-7.png differ
diff --git a/docs/images/prowler-app/saml/saml-sso-azure-8.png b/docs/images/prowler-app/saml/saml-sso-azure-8.png
new file mode 100644
index 0000000000..5dd2f1e1ef
Binary files /dev/null and b/docs/images/prowler-app/saml/saml-sso-azure-8.png differ
diff --git a/docs/images/prowler-app/saml/saml-sso-azure-9.png b/docs/images/prowler-app/saml/saml-sso-azure-9.png
new file mode 100644
index 0000000000..130dd5e7cd
Binary files /dev/null and b/docs/images/prowler-app/saml/saml-sso-azure-9.png differ
diff --git a/docs/images/prowler-app/saml/saml-step-1.png b/docs/images/prowler-app/saml/saml-step-1.png
new file mode 100644
index 0000000000..d505c2597c
Binary files /dev/null and b/docs/images/prowler-app/saml/saml-step-1.png differ
diff --git a/docs/images/prowler-app/saml/saml-step-2.png b/docs/images/prowler-app/saml/saml-step-2.png
new file mode 100644
index 0000000000..ddb036c98d
Binary files /dev/null and b/docs/images/prowler-app/saml/saml-step-2.png differ
diff --git a/docs/images/prowler-app/saml/saml-step-3.png b/docs/images/prowler-app/saml/saml-step-3.png
new file mode 100644
index 0000000000..2b8dfbd845
Binary files /dev/null and b/docs/images/prowler-app/saml/saml-step-3.png differ
diff --git a/docs/images/prowler-app/saml/saml-step-4.png b/docs/images/prowler-app/saml/saml-step-4.png
new file mode 100644
index 0000000000..cca0987c50
Binary files /dev/null and b/docs/images/prowler-app/saml/saml-step-4.png differ
diff --git a/docs/images/prowler-app/saml/saml-step-remove.png b/docs/images/prowler-app/saml/saml-step-remove.png
new file mode 100644
index 0000000000..f0868691af
Binary files /dev/null and b/docs/images/prowler-app/saml/saml-step-remove.png differ
diff --git a/docs/images/prowler-app/saml/saml_attribute_statements.png b/docs/images/prowler-app/saml/saml_attribute_statements.png
new file mode 100644
index 0000000000..62d6366131
Binary files /dev/null and b/docs/images/prowler-app/saml/saml_attribute_statements.png differ
diff --git a/docs/images/prowler-app/security-hub/create-integration.png b/docs/images/prowler-app/security-hub/create-integration.png
new file mode 100644
index 0000000000..145e68d201
Binary files /dev/null and b/docs/images/prowler-app/security-hub/create-integration.png differ
diff --git a/docs/images/prowler-app/security-hub/integration-settings.png b/docs/images/prowler-app/security-hub/integration-settings.png
new file mode 100644
index 0000000000..3a32bf0830
Binary files /dev/null and b/docs/images/prowler-app/security-hub/integration-settings.png differ
diff --git a/docs/images/prowler-app/security-hub/integrations-tab.png b/docs/images/prowler-app/security-hub/integrations-tab.png
new file mode 100644
index 0000000000..9d11cae33a
Binary files /dev/null and b/docs/images/prowler-app/security-hub/integrations-tab.png differ
diff --git a/docs/images/prowler-app/slack-app-token.png b/docs/images/prowler-app/slack-app-token.png
new file mode 100644
index 0000000000..550970503b
Binary files /dev/null and b/docs/images/prowler-app/slack-app-token.png differ
diff --git a/docs/images/prowler-app/slack-prowler-message.png b/docs/images/prowler-app/slack-prowler-message.png
new file mode 100644
index 0000000000..1151a7be7f
Binary files /dev/null and b/docs/images/prowler-app/slack-prowler-message.png differ
diff --git a/docs/images/prowler-app/social-login/social_login_buttons.png b/docs/images/prowler-app/social-login/social_login_buttons.png
new file mode 100644
index 0000000000..476081e0fc
Binary files /dev/null and b/docs/images/prowler-app/social-login/social_login_buttons.png differ
diff --git a/docs/images/prowler-app/social-login/social_login_buttons_disabled.png b/docs/images/prowler-app/social-login/social_login_buttons_disabled.png
new file mode 100644
index 0000000000..7b11a7802d
Binary files /dev/null and b/docs/images/prowler-app/social-login/social_login_buttons_disabled.png differ
diff --git a/docs/images/prowler-cli-quick.gif b/docs/images/prowler-cli-quick.gif
new file mode 100644
index 0000000000..16197a5ba7
Binary files /dev/null and b/docs/images/prowler-cli-quick.gif differ
diff --git a/docs/images/prowler-logo-black.png b/docs/images/prowler-logo-black.png
new file mode 100644
index 0000000000..3a6ed6490d
Binary files /dev/null and b/docs/images/prowler-logo-black.png differ
diff --git a/docs/images/prowler-logo-white.png b/docs/images/prowler-logo-white.png
new file mode 100644
index 0000000000..b2d551f995
Binary files /dev/null and b/docs/images/prowler-logo-white.png differ
diff --git a/docs/images/prowler-multi-account-environment.png b/docs/images/prowler-multi-account-environment.png
new file mode 100644
index 0000000000..89adaf5f69
Binary files /dev/null and b/docs/images/prowler-multi-account-environment.png differ
diff --git a/docs/images/prowler-single-account-environment.png b/docs/images/prowler-single-account-environment.png
new file mode 100644
index 0000000000..585fe33a57
Binary files /dev/null and b/docs/images/prowler-single-account-environment.png differ
diff --git a/docs/images/quick-inventory.jpg b/docs/images/quick-inventory.jpg
new file mode 100644
index 0000000000..a7124bb7ae
Binary files /dev/null and b/docs/images/quick-inventory.jpg differ
diff --git a/docs/images/register-application.png b/docs/images/register-application.png
new file mode 100644
index 0000000000..dd69291987
Binary files /dev/null and b/docs/images/register-application.png differ
diff --git a/docs/images/scan-progress.png b/docs/images/scan-progress.png
new file mode 100644
index 0000000000..3378775dcd
Binary files /dev/null and b/docs/images/scan-progress.png differ
diff --git a/docs/images/scan_jobs_section.png b/docs/images/scan_jobs_section.png
new file mode 100644
index 0000000000..e307cf7f60
Binary files /dev/null and b/docs/images/scan_jobs_section.png differ
diff --git a/docs/images/select-provider.png b/docs/images/select-provider.png
new file mode 100644
index 0000000000..3151bfe5e7
Binary files /dev/null and b/docs/images/select-provider.png differ
diff --git a/docs/images/sergio.png b/docs/images/sergio.png
new file mode 100644
index 0000000000..d8d82846dc
Binary files /dev/null and b/docs/images/sergio.png differ
diff --git a/docs/images/services.png b/docs/images/services.png
new file mode 100644
index 0000000000..e82a441576
Binary files /dev/null and b/docs/images/services.png differ
diff --git a/docs/images/short-display.png b/docs/images/short-display.png
new file mode 100644
index 0000000000..a36364acc0
Binary files /dev/null and b/docs/images/short-display.png differ
diff --git a/docs/images/sign-up-button.png b/docs/images/sign-up-button.png
new file mode 100644
index 0000000000..b7006e72e5
Binary files /dev/null and b/docs/images/sign-up-button.png differ
diff --git a/docs/images/sign-up.png b/docs/images/sign-up.png
new file mode 100644
index 0000000000..56e8901b24
Binary files /dev/null and b/docs/images/sign-up.png differ
diff --git a/docs/images/sts-configuration.png b/docs/images/sts-configuration.png
new file mode 100644
index 0000000000..cb78fbda74
Binary files /dev/null and b/docs/images/sts-configuration.png differ
diff --git a/docs/images/test-connection-button.png b/docs/images/test-connection-button.png
new file mode 100644
index 0000000000..261cb035c7
Binary files /dev/null and b/docs/images/test-connection-button.png differ
diff --git a/docs/images/toni.png b/docs/images/toni.png
new file mode 100644
index 0000000000..26b27d0a0f
Binary files /dev/null and b/docs/images/toni.png differ
diff --git a/docs/index.md b/docs/index.md
deleted file mode 100644
index c420b466c3..0000000000
--- a/docs/index.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# What is Prowler?
-
-**Prowler** is the open source cloud security platform trusted by thousands to **automate security and compliance** in any cloud environment. With hundreds of ready-to-use checks and compliance frameworks, Prowler delivers real-time, customizable monitoring and seamless integrations, making cloud security simple, scalable, and cost-effective for organizations of any size.
-
-The official supported providers right now are:
-
-| Provider | Support | Stage | Interface |
-|----------|--------|-------|----------|
-| **AWS** | Official | Stable | UI, API, CLI |
-| **Azure** | Official | Stable | UI, API, CLI |
-| **Google Cloud** | Official | Stable | UI, API, CLI |
-| **Kubernetes** | Official | Stable | UI, API, CLI |
-| **M365** | Official | Stable | UI, API, CLI |
-| **Github** | Official | Stable | UI, API, CLI |
-| **IaC** | Official | Beta | CLI |
-| **MongoDB Atlas** | Official | Beta | CLI |
-| **LLM** | Official | Beta | CLI |
-| **NHN** | Unofficial | Beta | CLI |
-
-Prowler supports **auditing, incident response, continuous monitoring, hardening, forensic readiness, and remediation**.
-
-### Products
-
-- **Prowler CLI** (Command Line Interface)
-- **Prowler App** (Web Application)
-- [**Prowler Cloud**](https://cloud.prowler.com) – A managed service built on top of Prowler App.
-- [**Prowler Hub**](https://hub.prowler.com) – A public library of versioned checks, cloud service artifacts, and compliance frameworks.
diff --git a/docs/introduction.mdx b/docs/introduction.mdx
new file mode 100644
index 0000000000..db37bea7ba
--- /dev/null
+++ b/docs/introduction.mdx
@@ -0,0 +1,73 @@
+# What is Prowler?
+
+**Prowler** is the world’s most widely used open-source cloud security platform that **automates security and compliance** across any cloud environment. With hundreds of ready-to-use security checks, remediation guidance, and compliance frameworks, Prowler delivers AI-driven, customizable, and easy-to-use monitoring and integrations, making cloud security simple, scalable, and cost-effective for organizations of any size.
+
+
+
+
+
+ Command Line Interface
+
+
+ Web Application
+
+
+ A managed service built on top of Prowler App.
+
+
+ A public library of versioned checks, cloud service artifacts, and compliance frameworks.
+
+
+
+## Supported Providers
+The supported providers right now are:
+
+| Provider | Support | Interface |
+|----------|--------|----------|
+| [AWS](/user-guide/providers/aws/getting-started-aws) | Official | UI, API, CLI |
+| [Azure](/user-guide/providers/azure/getting-started-azure) | Official | UI, API, CLI |
+| [Google Cloud](/user-guide/providers/gcp/getting-started-gcp) | Official | UI, API, CLI |
+| [Kubernetes](/user-guide/providers/kubernetes/in-cluster) | Official | UI, API, CLI |
+| [M365](/user-guide/providers/microsoft365/getting-started-m365) | Official | UI, API, CLI |
+| [Github](/user-guide/providers/github/getting-started-github) | Official | UI, API, CLI |
+| [Oracle Cloud](/user-guide/providers/oci/getting-started-oci) | Official | CLI |
+| [Infra as Code](/user-guide/providers/iac/getting-started-iac) | Official | CLI |
+| [MongoDB Atlas](/user-guide/providers/mongodbatlas/getting-started-mongodbatlas) | Official | CLI |
+| [LLM](/user-guide/providers/llm/getting-started-llm) | Official | CLI |
+| **NHN** | Unofficial | CLI |
+
+For more information about the checks and compliance of each provider visit [Prowler Hub](https://hub.prowler.com).
+
+## Where to go next?
+
+
+ Detailed instructions on how to use Prowler.
+
+
+ Interested in contributing to Prowler?
+
+
diff --git a/docs/security.md b/docs/security.mdx
similarity index 99%
rename from docs/security.md
rename to docs/security.mdx
index 9e7e4bd0ea..49fb3684bb 100644
--- a/docs/security.md
+++ b/docs/security.mdx
@@ -1,4 +1,6 @@
-# Security
+---
+title: 'Security'
+---
## Compliance and Trust
We publish our live SOC 2 Type 2 Compliance data at [https://trust.prowler.com](https://trust.prowler.com)
diff --git a/docs/troubleshooting.md b/docs/troubleshooting.mdx
similarity index 94%
rename from docs/troubleshooting.md
rename to docs/troubleshooting.mdx
index e5650723db..80b6590669 100644
--- a/docs/troubleshooting.md
+++ b/docs/troubleshooting.mdx
@@ -1,4 +1,6 @@
-# Troubleshooting
+---
+title: 'Troubleshooting'
+---
- **Running `prowler` I get `[File: utils.py:15] [Module: utils] CRITICAL: path/redacted: OSError[13]`**:
@@ -11,7 +13,7 @@
This error is also related with a lack of system requirements. To improve performance, Prowler stores information in memory so it may need to be run in a system with more than 1GB of memory.
-See section [Logging](./tutorials/logging.md) for further information or [contact us](./contact.md).
+See section [Logging](/user-guide/cli/tutorials/logging) for further information or [contact us](/contact).
## Common Issues with Docker Compose Installation
diff --git a/docs/tutorials/gcp/organization.md b/docs/tutorials/gcp/organization.md
deleted file mode 100644
index 96c7406711..0000000000
--- a/docs/tutorials/gcp/organization.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# Scanning a Specific GCP Organization
-
-By default, Prowler scans all Google Cloud projects accessible to the authenticated user.
-
-To limit the scan to projects within a specific Google Cloud organization, use the `--organization-id` option with the GCP organization’s ID:
-
-```console
-prowler gcp --organization-id organization-id
-```
-
-???+ warning
- Ensure the credentials used have one of the following roles at the organization level:
- Cloud Asset Viewer (`roles/cloudasset.viewer`), or Cloud Asset Owner (`roles/cloudasset.owner`).
-
-???+ note
- With this option, Prowler retrieves all projects under the specified Google Cloud organization, including those organized within folders and nested subfolders. This ensures full visibility across the entire organization’s hierarchy.
-
-???+ note
- To obtain the Google Cloud organization ID, use:
-
- ```console
- gcloud organizations list
- ```
diff --git a/docs/tutorials/kubernetes/outside-cluster.md b/docs/tutorials/kubernetes/outside-cluster.md
deleted file mode 100644
index 5a8f15ac92..0000000000
--- a/docs/tutorials/kubernetes/outside-cluster.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# Non In-Cluster Execution
-
-For execution outside the cluster environment, specify the location of the [kubeconfig](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) file using the following argument:
-
-```console
-prowler kubernetes --kubeconfig-file /path/to/kubeconfig
-```
-
-???+ note
- If no `--kubeconfig-file` is provided, Prowler will use the default KubeConfig file location (`~/.kube/config`).
-
-???+ note
- `prowler` will scan the active Kubernetes context by default. Use the [`--context`](https://docs.prowler.com/projects/prowler-open-source/en/latest/tutorials/kubernetes/context/) flag to specify the context to be scanned.
-
-???+ note
- By default, `prowler` will scan all namespaces in your active Kubernetes context. Use the [`--namespace`](https://docs.prowler.com/projects/prowler-open-source/en/latest/tutorials/kubernetes/namespace/) flag to specify the namespace(s) to be scanned.
diff --git a/docs/tutorials/microsoft365/getting-started-m365.md b/docs/tutorials/microsoft365/getting-started-m365.md
deleted file mode 100644
index 8be16e755e..0000000000
--- a/docs/tutorials/microsoft365/getting-started-m365.md
+++ /dev/null
@@ -1,99 +0,0 @@
-# Getting Started With Microsoft 365 on Prowler
-
-???+ note "Government Cloud Support"
- Government cloud accounts or tenants (Microsoft 365 Government) are currently unsupported, but we expect to add support for them in the near future.
-
-## Prerequisites
-
-Configure authentication for Microsoft 365 by following the [Microsoft 365 Authentication](authentication.md) guide. This includes:
-
-- Creating a Service Principal Application
-- Granting required Microsoft Graph API permissions
-- Setting up PowerShell module permissions (for full security coverage)
-- Assigning appropriate roles to users (if using user authentication)
-
-## Prowler App
-
-### Step 1: Obtain Domain ID
-
-1. Go to the Entra ID portal, then search for "Domain" or go to Identity > Settings > Domain Names
-
- 
-
- 
-
-2. Select the domain to use as unique identifier for the Microsoft 365 account in Prowler App
-
-### Step 2: Access Prowler App
-
-1. Go to [Prowler Cloud](https://cloud.prowler.com/) or launch [Prowler App](../prowler-app.md)
-2. Navigate to "Configuration" > "Cloud Providers"
-
- 
-
-3. Click on "Add Cloud Provider"
-
- 
-
-4. Select "Microsoft 365"
-
- 
-
-5. Add the Domain ID and an optional alias, then click "Next"
-
- 
-
-### Step 3: Add Credentials to Prowler App
-
-1. Go to App Registration overview and copy the Client ID and Tenant ID
-
- 
-
-2. Go to Prowler App and paste:
-
- - Client ID
- - Tenant ID
- - `AZURE_CLIENT_SECRET` from the Service Principal setup
-
- 
-
-3. Click "Next"
-
- 
-
-4. Click "Launch Scan"
-
- 
-
----
-
-## Prowler CLI
-
-Use Prowler CLI to scan Microsoft 365 environments.
-
-### PowerShell Requirements
-
-PowerShell 7.4+ is required for comprehensive Microsoft 365 security coverage. Installation instructions are available in the [Authentication guide](authentication.md#supported-powershell-versions).
-
-### Authentication Options
-
-Select an authentication method from the [Microsoft 365 Authentication](authentication.md) guide:
-
-- **Service Principal Application** (recommended): `--sp-env-auth`
-- **Interactive Browser Authentication**: `--browser-auth`
-
-### Basic Usage
-
-After configuring authentication, run a basic scan:
-
-```console
-prowler m365 --sp-env-auth
-```
-
-For comprehensive scans including PowerShell checks:
-
-```console
-prowler m365 --sp-env-auth --init-modules
-```
-
----
diff --git a/docs/user-guide/cli/img/add-cloud-provider.png b/docs/user-guide/cli/img/add-cloud-provider.png
new file mode 100644
index 0000000000..dd42e73047
Binary files /dev/null and b/docs/user-guide/cli/img/add-cloud-provider.png differ
diff --git a/docs/user-guide/cli/img/bulk-provider-provisioning.png b/docs/user-guide/cli/img/bulk-provider-provisioning.png
new file mode 100644
index 0000000000..c43c746874
Binary files /dev/null and b/docs/user-guide/cli/img/bulk-provider-provisioning.png differ
diff --git a/docs/user-guide/cli/img/cloud-providers-page.png b/docs/user-guide/cli/img/cloud-providers-page.png
new file mode 100644
index 0000000000..0581e0132f
Binary files /dev/null and b/docs/user-guide/cli/img/cloud-providers-page.png differ
diff --git a/docs/user-guide/cli/img/compliance/compliance-cis-sample1.png b/docs/user-guide/cli/img/compliance/compliance-cis-sample1.png
new file mode 100644
index 0000000000..925e5c80f8
Binary files /dev/null and b/docs/user-guide/cli/img/compliance/compliance-cis-sample1.png differ
diff --git a/docs/user-guide/cli/img/compliance/compliance.png b/docs/user-guide/cli/img/compliance/compliance.png
new file mode 100644
index 0000000000..de5c27fbe3
Binary files /dev/null and b/docs/user-guide/cli/img/compliance/compliance.png differ
diff --git a/docs/user-guide/cli/img/create-slack-app.png b/docs/user-guide/cli/img/create-slack-app.png
new file mode 100644
index 0000000000..dc910634ec
Binary files /dev/null and b/docs/user-guide/cli/img/create-slack-app.png differ
diff --git a/docs/user-guide/cli/img/create-sp.gif b/docs/user-guide/cli/img/create-sp.gif
new file mode 100644
index 0000000000..1ed345bb6a
Binary files /dev/null and b/docs/user-guide/cli/img/create-sp.gif differ
diff --git a/docs/user-guide/cli/img/dashboard/dashboard-banner.png b/docs/user-guide/cli/img/dashboard/dashboard-banner.png
new file mode 100644
index 0000000000..3d6dc92304
Binary files /dev/null and b/docs/user-guide/cli/img/dashboard/dashboard-banner.png differ
diff --git a/docs/user-guide/cli/img/dashboard/dashboard-compliance.png b/docs/user-guide/cli/img/dashboard/dashboard-compliance.png
new file mode 100644
index 0000000000..95fb7179f9
Binary files /dev/null and b/docs/user-guide/cli/img/dashboard/dashboard-compliance.png differ
diff --git a/docs/user-guide/cli/img/dashboard/dashboard-files-scanned.png b/docs/user-guide/cli/img/dashboard/dashboard-files-scanned.png
new file mode 100644
index 0000000000..2629a8ac77
Binary files /dev/null and b/docs/user-guide/cli/img/dashboard/dashboard-files-scanned.png differ
diff --git a/docs/user-guide/cli/img/dashboard/dashboard-overview.png b/docs/user-guide/cli/img/dashboard/dashboard-overview.png
new file mode 100644
index 0000000000..a5a470cb0e
Binary files /dev/null and b/docs/user-guide/cli/img/dashboard/dashboard-overview.png differ
diff --git a/docs/user-guide/cli/img/dashboard/dropdown.png b/docs/user-guide/cli/img/dashboard/dropdown.png
new file mode 100644
index 0000000000..b1df77798e
Binary files /dev/null and b/docs/user-guide/cli/img/dashboard/dropdown.png differ
diff --git a/docs/user-guide/cli/img/fixer.png b/docs/user-guide/cli/img/fixer.png
new file mode 100644
index 0000000000..d794485454
Binary files /dev/null and b/docs/user-guide/cli/img/fixer.png differ
diff --git a/docs/user-guide/cli/img/gcp-auth-methods.png b/docs/user-guide/cli/img/gcp-auth-methods.png
new file mode 100644
index 0000000000..dc8681396e
Binary files /dev/null and b/docs/user-guide/cli/img/gcp-auth-methods.png differ
diff --git a/docs/user-guide/cli/img/gcp-service-account-creds.png b/docs/user-guide/cli/img/gcp-service-account-creds.png
new file mode 100644
index 0000000000..af09776ab1
Binary files /dev/null and b/docs/user-guide/cli/img/gcp-service-account-creds.png differ
diff --git a/docs/user-guide/cli/img/github-app-credentials.png b/docs/user-guide/cli/img/github-app-credentials.png
new file mode 100644
index 0000000000..1a71db4fbd
Binary files /dev/null and b/docs/user-guide/cli/img/github-app-credentials.png differ
diff --git a/docs/user-guide/cli/img/github-auth-methods.png b/docs/user-guide/cli/img/github-auth-methods.png
new file mode 100644
index 0000000000..17414054aa
Binary files /dev/null and b/docs/user-guide/cli/img/github-auth-methods.png differ
diff --git a/docs/user-guide/cli/img/github-oauth-credentials.png b/docs/user-guide/cli/img/github-oauth-credentials.png
new file mode 100644
index 0000000000..5d84c4bf75
Binary files /dev/null and b/docs/user-guide/cli/img/github-oauth-credentials.png differ
diff --git a/docs/user-guide/cli/img/github-pat-credentials.png b/docs/user-guide/cli/img/github-pat-credentials.png
new file mode 100644
index 0000000000..044cbb7996
Binary files /dev/null and b/docs/user-guide/cli/img/github-pat-credentials.png differ
diff --git a/docs/user-guide/cli/img/install-in-slack-workspace.png b/docs/user-guide/cli/img/install-in-slack-workspace.png
new file mode 100644
index 0000000000..649c107cdd
Binary files /dev/null and b/docs/user-guide/cli/img/install-in-slack-workspace.png differ
diff --git a/docs/user-guide/cli/img/integrate-slack-app.png b/docs/user-guide/cli/img/integrate-slack-app.png
new file mode 100644
index 0000000000..beea9ef56b
Binary files /dev/null and b/docs/user-guide/cli/img/integrate-slack-app.png differ
diff --git a/docs/user-guide/cli/img/jira/connection-settings.png b/docs/user-guide/cli/img/jira/connection-settings.png
new file mode 100644
index 0000000000..86ebe73dea
Binary files /dev/null and b/docs/user-guide/cli/img/jira/connection-settings.png differ
diff --git a/docs/user-guide/cli/img/jira/integrations-tab.png b/docs/user-guide/cli/img/jira/integrations-tab.png
new file mode 100644
index 0000000000..e71773fc52
Binary files /dev/null and b/docs/user-guide/cli/img/jira/integrations-tab.png differ
diff --git a/docs/user-guide/cli/img/jira/send-to-jira-modal.png b/docs/user-guide/cli/img/jira/send-to-jira-modal.png
new file mode 100644
index 0000000000..2cf498926a
Binary files /dev/null and b/docs/user-guide/cli/img/jira/send-to-jira-modal.png differ
diff --git a/docs/user-guide/cli/img/lighthouse-architecture.png b/docs/user-guide/cli/img/lighthouse-architecture.png
new file mode 100644
index 0000000000..63202ce7c7
Binary files /dev/null and b/docs/user-guide/cli/img/lighthouse-architecture.png differ
diff --git a/docs/user-guide/cli/img/lighthouse-config.png b/docs/user-guide/cli/img/lighthouse-config.png
new file mode 100644
index 0000000000..8bae46f51b
Binary files /dev/null and b/docs/user-guide/cli/img/lighthouse-config.png differ
diff --git a/docs/user-guide/cli/img/lighthouse-feature1.png b/docs/user-guide/cli/img/lighthouse-feature1.png
new file mode 100644
index 0000000000..4568f5752a
Binary files /dev/null and b/docs/user-guide/cli/img/lighthouse-feature1.png differ
diff --git a/docs/user-guide/cli/img/lighthouse-feature2.png b/docs/user-guide/cli/img/lighthouse-feature2.png
new file mode 100644
index 0000000000..01e72bbaf4
Binary files /dev/null and b/docs/user-guide/cli/img/lighthouse-feature2.png differ
diff --git a/docs/user-guide/cli/img/lighthouse-feature3.png b/docs/user-guide/cli/img/lighthouse-feature3.png
new file mode 100644
index 0000000000..a40177cf18
Binary files /dev/null and b/docs/user-guide/cli/img/lighthouse-feature3.png differ
diff --git a/docs/user-guide/cli/img/lighthouse-intro.png b/docs/user-guide/cli/img/lighthouse-intro.png
new file mode 100644
index 0000000000..38d3f0819c
Binary files /dev/null and b/docs/user-guide/cli/img/lighthouse-intro.png differ
diff --git a/docs/user-guide/cli/img/mutelist-keys.png b/docs/user-guide/cli/img/mutelist-keys.png
new file mode 100644
index 0000000000..0822344376
Binary files /dev/null and b/docs/user-guide/cli/img/mutelist-keys.png differ
diff --git a/docs/user-guide/cli/img/mutelist-row.png b/docs/user-guide/cli/img/mutelist-row.png
new file mode 100644
index 0000000000..0ed7d75a7d
Binary files /dev/null and b/docs/user-guide/cli/img/mutelist-row.png differ
diff --git a/docs/user-guide/cli/img/rbac/invitation_details.png b/docs/user-guide/cli/img/rbac/invitation_details.png
new file mode 100644
index 0000000000..656a698308
Binary files /dev/null and b/docs/user-guide/cli/img/rbac/invitation_details.png differ
diff --git a/docs/user-guide/cli/img/rbac/invitation_details_1.png b/docs/user-guide/cli/img/rbac/invitation_details_1.png
new file mode 100644
index 0000000000..e167db74af
Binary files /dev/null and b/docs/user-guide/cli/img/rbac/invitation_details_1.png differ
diff --git a/docs/user-guide/cli/img/rbac/invitation_edit.png b/docs/user-guide/cli/img/rbac/invitation_edit.png
new file mode 100644
index 0000000000..ef3d81f192
Binary files /dev/null and b/docs/user-guide/cli/img/rbac/invitation_edit.png differ
diff --git a/docs/user-guide/cli/img/rbac/invitation_edit_1.png b/docs/user-guide/cli/img/rbac/invitation_edit_1.png
new file mode 100644
index 0000000000..6d1a1d2223
Binary files /dev/null and b/docs/user-guide/cli/img/rbac/invitation_edit_1.png differ
diff --git a/docs/user-guide/cli/img/rbac/invitation_info.png b/docs/user-guide/cli/img/rbac/invitation_info.png
new file mode 100644
index 0000000000..a6ec05f976
Binary files /dev/null and b/docs/user-guide/cli/img/rbac/invitation_info.png differ
diff --git a/docs/user-guide/cli/img/rbac/invitation_revoke.png b/docs/user-guide/cli/img/rbac/invitation_revoke.png
new file mode 100644
index 0000000000..6c4e042c16
Binary files /dev/null and b/docs/user-guide/cli/img/rbac/invitation_revoke.png differ
diff --git a/docs/user-guide/cli/img/rbac/invitation_sign-up.png b/docs/user-guide/cli/img/rbac/invitation_sign-up.png
new file mode 100644
index 0000000000..f5b67a7762
Binary files /dev/null and b/docs/user-guide/cli/img/rbac/invitation_sign-up.png differ
diff --git a/docs/user-guide/cli/img/rbac/invite.png b/docs/user-guide/cli/img/rbac/invite.png
new file mode 100644
index 0000000000..dd60aba314
Binary files /dev/null and b/docs/user-guide/cli/img/rbac/invite.png differ
diff --git a/docs/user-guide/cli/img/rbac/membership.png b/docs/user-guide/cli/img/rbac/membership.png
new file mode 100644
index 0000000000..e2b96e40f5
Binary files /dev/null and b/docs/user-guide/cli/img/rbac/membership.png differ
diff --git a/docs/user-guide/cli/img/rbac/provider_group.png b/docs/user-guide/cli/img/rbac/provider_group.png
new file mode 100644
index 0000000000..878306e02f
Binary files /dev/null and b/docs/user-guide/cli/img/rbac/provider_group.png differ
diff --git a/docs/user-guide/cli/img/rbac/provider_group_edit.png b/docs/user-guide/cli/img/rbac/provider_group_edit.png
new file mode 100644
index 0000000000..5de9649578
Binary files /dev/null and b/docs/user-guide/cli/img/rbac/provider_group_edit.png differ
diff --git a/docs/user-guide/cli/img/rbac/provider_group_edit_1.png b/docs/user-guide/cli/img/rbac/provider_group_edit_1.png
new file mode 100644
index 0000000000..ed4a090eed
Binary files /dev/null and b/docs/user-guide/cli/img/rbac/provider_group_edit_1.png differ
diff --git a/docs/user-guide/cli/img/rbac/provider_group_remove.png b/docs/user-guide/cli/img/rbac/provider_group_remove.png
new file mode 100644
index 0000000000..580a8533cf
Binary files /dev/null and b/docs/user-guide/cli/img/rbac/provider_group_remove.png differ
diff --git a/docs/user-guide/cli/img/rbac/role_create.png b/docs/user-guide/cli/img/rbac/role_create.png
new file mode 100644
index 0000000000..8dc270f209
Binary files /dev/null and b/docs/user-guide/cli/img/rbac/role_create.png differ
diff --git a/docs/user-guide/cli/img/rbac/role_create_1.png b/docs/user-guide/cli/img/rbac/role_create_1.png
new file mode 100644
index 0000000000..a96b0ac9ef
Binary files /dev/null and b/docs/user-guide/cli/img/rbac/role_create_1.png differ
diff --git a/docs/user-guide/cli/img/rbac/role_edit.png b/docs/user-guide/cli/img/rbac/role_edit.png
new file mode 100644
index 0000000000..775b4b8562
Binary files /dev/null and b/docs/user-guide/cli/img/rbac/role_edit.png differ
diff --git a/docs/user-guide/cli/img/rbac/role_edit_details.png b/docs/user-guide/cli/img/rbac/role_edit_details.png
new file mode 100644
index 0000000000..6170f210b1
Binary files /dev/null and b/docs/user-guide/cli/img/rbac/role_edit_details.png differ
diff --git a/docs/user-guide/cli/img/rbac/role_remove.png b/docs/user-guide/cli/img/rbac/role_remove.png
new file mode 100644
index 0000000000..613f770bd4
Binary files /dev/null and b/docs/user-guide/cli/img/rbac/role_remove.png differ
diff --git a/docs/user-guide/cli/img/rbac/user_edit.png b/docs/user-guide/cli/img/rbac/user_edit.png
new file mode 100644
index 0000000000..421ea93156
Binary files /dev/null and b/docs/user-guide/cli/img/rbac/user_edit.png differ
diff --git a/docs/user-guide/cli/img/rbac/user_edit_details.png b/docs/user-guide/cli/img/rbac/user_edit_details.png
new file mode 100644
index 0000000000..3e4734f142
Binary files /dev/null and b/docs/user-guide/cli/img/rbac/user_edit_details.png differ
diff --git a/docs/user-guide/cli/img/rbac/user_remove.png b/docs/user-guide/cli/img/rbac/user_remove.png
new file mode 100644
index 0000000000..4c368ded66
Binary files /dev/null and b/docs/user-guide/cli/img/rbac/user_remove.png differ
diff --git a/docs/user-guide/cli/img/reporting/html-output.png b/docs/user-guide/cli/img/reporting/html-output.png
new file mode 100644
index 0000000000..00a8b60812
Binary files /dev/null and b/docs/user-guide/cli/img/reporting/html-output.png differ
diff --git a/docs/user-guide/cli/img/s3/s3-cross-account.png b/docs/user-guide/cli/img/s3/s3-cross-account.png
new file mode 100644
index 0000000000..ad34a303fc
Binary files /dev/null and b/docs/user-guide/cli/img/s3/s3-cross-account.png differ
diff --git a/docs/user-guide/cli/img/s3/s3-integration-ui-1.png b/docs/user-guide/cli/img/s3/s3-integration-ui-1.png
new file mode 100644
index 0000000000..1081f20453
Binary files /dev/null and b/docs/user-guide/cli/img/s3/s3-integration-ui-1.png differ
diff --git a/docs/user-guide/cli/img/s3/s3-integration-ui-2.png b/docs/user-guide/cli/img/s3/s3-integration-ui-2.png
new file mode 100644
index 0000000000..618621ce26
Binary files /dev/null and b/docs/user-guide/cli/img/s3/s3-integration-ui-2.png differ
diff --git a/docs/user-guide/cli/img/s3/s3-integration-ui-3.png b/docs/user-guide/cli/img/s3/s3-integration-ui-3.png
new file mode 100644
index 0000000000..6fabbe2ed3
Binary files /dev/null and b/docs/user-guide/cli/img/s3/s3-integration-ui-3.png differ
diff --git a/docs/user-guide/cli/img/s3/s3-integration-ui-4.png b/docs/user-guide/cli/img/s3/s3-integration-ui-4.png
new file mode 100644
index 0000000000..1967eda8af
Binary files /dev/null and b/docs/user-guide/cli/img/s3/s3-integration-ui-4.png differ
diff --git a/docs/user-guide/cli/img/s3/s3-integration-ui-5.png b/docs/user-guide/cli/img/s3/s3-integration-ui-5.png
new file mode 100644
index 0000000000..ffdea752f1
Binary files /dev/null and b/docs/user-guide/cli/img/s3/s3-integration-ui-5.png differ
diff --git a/docs/user-guide/cli/img/s3/s3-integration-ui-6.png b/docs/user-guide/cli/img/s3/s3-integration-ui-6.png
new file mode 100644
index 0000000000..330588e17b
Binary files /dev/null and b/docs/user-guide/cli/img/s3/s3-integration-ui-6.png differ
diff --git a/docs/user-guide/cli/img/s3/s3-integration-ui-7.png b/docs/user-guide/cli/img/s3/s3-integration-ui-7.png
new file mode 100644
index 0000000000..3448f82a48
Binary files /dev/null and b/docs/user-guide/cli/img/s3/s3-integration-ui-7.png differ
diff --git a/docs/user-guide/cli/img/s3/s3-multiple-accounts.png b/docs/user-guide/cli/img/s3/s3-multiple-accounts.png
new file mode 100644
index 0000000000..db30e09841
Binary files /dev/null and b/docs/user-guide/cli/img/s3/s3-multiple-accounts.png differ
diff --git a/docs/user-guide/cli/img/s3/s3-output-folder.png b/docs/user-guide/cli/img/s3/s3-output-folder.png
new file mode 100644
index 0000000000..448687a8b1
Binary files /dev/null and b/docs/user-guide/cli/img/s3/s3-output-folder.png differ
diff --git a/docs/user-guide/cli/img/s3/s3-same-account.png b/docs/user-guide/cli/img/s3/s3-same-account.png
new file mode 100644
index 0000000000..39e586c762
Binary files /dev/null and b/docs/user-guide/cli/img/s3/s3-same-account.png differ
diff --git a/docs/user-guide/cli/img/saml/app-catalog-browse-prowler-add.png b/docs/user-guide/cli/img/saml/app-catalog-browse-prowler-add.png
new file mode 100644
index 0000000000..71c70bb7cd
Binary files /dev/null and b/docs/user-guide/cli/img/saml/app-catalog-browse-prowler-add.png differ
diff --git a/docs/user-guide/cli/img/saml/app-catalog-browse-prowler-configure.png b/docs/user-guide/cli/img/saml/app-catalog-browse-prowler-configure.png
new file mode 100644
index 0000000000..6d5715eb92
Binary files /dev/null and b/docs/user-guide/cli/img/saml/app-catalog-browse-prowler-configure.png differ
diff --git a/docs/user-guide/cli/img/saml/app-catalog-browse-prowler.png b/docs/user-guide/cli/img/saml/app-catalog-browse-prowler.png
new file mode 100644
index 0000000000..5706997980
Binary files /dev/null and b/docs/user-guide/cli/img/saml/app-catalog-browse-prowler.png differ
diff --git a/docs/user-guide/cli/img/saml/app-catalog-browse.png b/docs/user-guide/cli/img/saml/app-catalog-browse.png
new file mode 100644
index 0000000000..d0a9b6926d
Binary files /dev/null and b/docs/user-guide/cli/img/saml/app-catalog-browse.png differ
diff --git a/docs/user-guide/cli/img/saml/idp_config.png b/docs/user-guide/cli/img/saml/idp_config.png
new file mode 100644
index 0000000000..0665b34886
Binary files /dev/null and b/docs/user-guide/cli/img/saml/idp_config.png differ
diff --git a/docs/user-guide/cli/img/saml/saml-signin-1.png b/docs/user-guide/cli/img/saml/saml-signin-1.png
new file mode 100644
index 0000000000..5da2e84711
Binary files /dev/null and b/docs/user-guide/cli/img/saml/saml-signin-1.png differ
diff --git a/docs/user-guide/cli/img/saml/saml-signin-2.png b/docs/user-guide/cli/img/saml/saml-signin-2.png
new file mode 100644
index 0000000000..f0f7082fc9
Binary files /dev/null and b/docs/user-guide/cli/img/saml/saml-signin-2.png differ
diff --git a/docs/user-guide/cli/img/saml/saml-sso-azure-1.png b/docs/user-guide/cli/img/saml/saml-sso-azure-1.png
new file mode 100644
index 0000000000..c714d742e7
Binary files /dev/null and b/docs/user-guide/cli/img/saml/saml-sso-azure-1.png differ
diff --git a/docs/user-guide/cli/img/saml/saml-sso-azure-2.png b/docs/user-guide/cli/img/saml/saml-sso-azure-2.png
new file mode 100644
index 0000000000..483af4548c
Binary files /dev/null and b/docs/user-guide/cli/img/saml/saml-sso-azure-2.png differ
diff --git a/docs/user-guide/cli/img/saml/saml-sso-azure-3.png b/docs/user-guide/cli/img/saml/saml-sso-azure-3.png
new file mode 100644
index 0000000000..7983694c5c
Binary files /dev/null and b/docs/user-guide/cli/img/saml/saml-sso-azure-3.png differ
diff --git a/docs/user-guide/cli/img/saml/saml-sso-azure-4.png b/docs/user-guide/cli/img/saml/saml-sso-azure-4.png
new file mode 100644
index 0000000000..f6c6029343
Binary files /dev/null and b/docs/user-guide/cli/img/saml/saml-sso-azure-4.png differ
diff --git a/docs/user-guide/cli/img/saml/saml-sso-azure-5.png b/docs/user-guide/cli/img/saml/saml-sso-azure-5.png
new file mode 100644
index 0000000000..6dbeb6e65d
Binary files /dev/null and b/docs/user-guide/cli/img/saml/saml-sso-azure-5.png differ
diff --git a/docs/user-guide/cli/img/saml/saml-sso-azure-6.png b/docs/user-guide/cli/img/saml/saml-sso-azure-6.png
new file mode 100644
index 0000000000..b351004a87
Binary files /dev/null and b/docs/user-guide/cli/img/saml/saml-sso-azure-6.png differ
diff --git a/docs/user-guide/cli/img/saml/saml-sso-azure-7.png b/docs/user-guide/cli/img/saml/saml-sso-azure-7.png
new file mode 100644
index 0000000000..76551bef06
Binary files /dev/null and b/docs/user-guide/cli/img/saml/saml-sso-azure-7.png differ
diff --git a/docs/user-guide/cli/img/saml/saml-sso-azure-8.png b/docs/user-guide/cli/img/saml/saml-sso-azure-8.png
new file mode 100644
index 0000000000..5dd2f1e1ef
Binary files /dev/null and b/docs/user-guide/cli/img/saml/saml-sso-azure-8.png differ
diff --git a/docs/user-guide/cli/img/saml/saml-sso-azure-9.png b/docs/user-guide/cli/img/saml/saml-sso-azure-9.png
new file mode 100644
index 0000000000..130dd5e7cd
Binary files /dev/null and b/docs/user-guide/cli/img/saml/saml-sso-azure-9.png differ
diff --git a/docs/user-guide/cli/img/saml/saml-step-1.png b/docs/user-guide/cli/img/saml/saml-step-1.png
new file mode 100644
index 0000000000..d505c2597c
Binary files /dev/null and b/docs/user-guide/cli/img/saml/saml-step-1.png differ
diff --git a/docs/user-guide/cli/img/saml/saml-step-2.png b/docs/user-guide/cli/img/saml/saml-step-2.png
new file mode 100644
index 0000000000..ddb036c98d
Binary files /dev/null and b/docs/user-guide/cli/img/saml/saml-step-2.png differ
diff --git a/docs/user-guide/cli/img/saml/saml-step-3.png b/docs/user-guide/cli/img/saml/saml-step-3.png
new file mode 100644
index 0000000000..2b8dfbd845
Binary files /dev/null and b/docs/user-guide/cli/img/saml/saml-step-3.png differ
diff --git a/docs/user-guide/cli/img/saml/saml-step-4.png b/docs/user-guide/cli/img/saml/saml-step-4.png
new file mode 100644
index 0000000000..cca0987c50
Binary files /dev/null and b/docs/user-guide/cli/img/saml/saml-step-4.png differ
diff --git a/docs/user-guide/cli/img/saml/saml-step-remove.png b/docs/user-guide/cli/img/saml/saml-step-remove.png
new file mode 100644
index 0000000000..f0868691af
Binary files /dev/null and b/docs/user-guide/cli/img/saml/saml-step-remove.png differ
diff --git a/docs/user-guide/cli/img/saml/saml_attribute_statements.png b/docs/user-guide/cli/img/saml/saml_attribute_statements.png
new file mode 100644
index 0000000000..62d6366131
Binary files /dev/null and b/docs/user-guide/cli/img/saml/saml_attribute_statements.png differ
diff --git a/docs/user-guide/cli/img/security-hub/create-integration.png b/docs/user-guide/cli/img/security-hub/create-integration.png
new file mode 100644
index 0000000000..145e68d201
Binary files /dev/null and b/docs/user-guide/cli/img/security-hub/create-integration.png differ
diff --git a/docs/user-guide/cli/img/security-hub/integration-settings.png b/docs/user-guide/cli/img/security-hub/integration-settings.png
new file mode 100644
index 0000000000..3a32bf0830
Binary files /dev/null and b/docs/user-guide/cli/img/security-hub/integration-settings.png differ
diff --git a/docs/user-guide/cli/img/security-hub/integrations-tab.png b/docs/user-guide/cli/img/security-hub/integrations-tab.png
new file mode 100644
index 0000000000..9d11cae33a
Binary files /dev/null and b/docs/user-guide/cli/img/security-hub/integrations-tab.png differ
diff --git a/docs/user-guide/cli/img/slack-app-token.png b/docs/user-guide/cli/img/slack-app-token.png
new file mode 100644
index 0000000000..550970503b
Binary files /dev/null and b/docs/user-guide/cli/img/slack-app-token.png differ
diff --git a/docs/user-guide/cli/img/slack-prowler-message.png b/docs/user-guide/cli/img/slack-prowler-message.png
new file mode 100644
index 0000000000..1151a7be7f
Binary files /dev/null and b/docs/user-guide/cli/img/slack-prowler-message.png differ
diff --git a/docs/user-guide/cli/img/social-login/social_login_buttons.png b/docs/user-guide/cli/img/social-login/social_login_buttons.png
new file mode 100644
index 0000000000..476081e0fc
Binary files /dev/null and b/docs/user-guide/cli/img/social-login/social_login_buttons.png differ
diff --git a/docs/user-guide/cli/img/social-login/social_login_buttons_disabled.png b/docs/user-guide/cli/img/social-login/social_login_buttons_disabled.png
new file mode 100644
index 0000000000..7b11a7802d
Binary files /dev/null and b/docs/user-guide/cli/img/social-login/social_login_buttons_disabled.png differ
diff --git a/docs/tutorials/check-aliases.md b/docs/user-guide/cli/tutorials/check-aliases.mdx
similarity index 94%
rename from docs/tutorials/check-aliases.md
rename to docs/user-guide/cli/tutorials/check-aliases.mdx
index b64d238f68..989e3ef910 100644
--- a/docs/tutorials/check-aliases.md
+++ b/docs/user-guide/cli/tutorials/check-aliases.mdx
@@ -1,4 +1,6 @@
-# Check Aliases
+---
+title: "Check Aliases"
+---
Prowler allows you to use aliases for the checks. You only have to add the `CheckAliases` key to the check's metadata with a list of the aliases:
diff --git a/docs/tutorials/compliance.md b/docs/user-guide/cli/tutorials/compliance.mdx
similarity index 86%
rename from docs/tutorials/compliance.md
rename to docs/user-guide/cli/tutorials/compliance.mdx
index 0c3cbf3162..da4d15e5c7 100644
--- a/docs/tutorials/compliance.md
+++ b/docs/user-guide/cli/tutorials/compliance.mdx
@@ -1,8 +1,10 @@
-# Compliance
+---
+title: 'Compliance'
+---
Prowler allows you to execute checks based on requirements defined in compliance frameworks. By default, it will execute and give you an overview of the status of each compliance framework:
-
+
You can find CSVs containing detailed compliance results in the compliance folder within Prowler's output folder.
@@ -16,10 +18,11 @@ prowler --compliance
Standard results will be shown and additionally the framework information as the sample below for CIS AWS 2.0. For details a CSV file has been generated as well.
-
+
-???+ note
- **If Prowler can't find a resource related with a check from a compliance requirement, this requirement won't appear on the output**
+
+**If Prowler can't find a resource related with a check from a compliance requirement, this requirement won't appear on the output**
+
## List Available Compliance Frameworks
@@ -74,4 +77,4 @@ Requirement Id: 1.5
## Create and contribute adding other Security Frameworks
-This information is part of the Developer Guide and can be found [here](../developer-guide/security-compliance-framework.md).
+This information is part of the Developer Guide and can be found [here](/developer-guide/security-compliance-framework).
diff --git a/docs/tutorials/configuration_file.md b/docs/user-guide/cli/tutorials/configuration_file.mdx
similarity index 99%
rename from docs/tutorials/configuration_file.md
rename to docs/user-guide/cli/tutorials/configuration_file.mdx
index bdd0254f41..819c17e9ca 100644
--- a/docs/tutorials/configuration_file.md
+++ b/docs/user-guide/cli/tutorials/configuration_file.mdx
@@ -1,4 +1,6 @@
-# Configuration File
+---
+title: "Configuration File"
+---
Several Prowler's checks have user configurable variables that can be modified in a common **configuration file**. This file can be found in the following [path](https://github.com/prowler-cloud/prowler/blob/master/prowler/config/config.yaml):
@@ -129,9 +131,10 @@ The following list includes all the GitHub checks with configurable variables th
## Config YAML File Structure
-???+ note
- This is the new Prowler configuration file format. The old one without provider keys is still compatible just for the AWS provider.
+
+This is the new Prowler configuration file format. The old one without provider keys is still compatible just for the AWS provider.
+
```yaml title="config.yaml"
# AWS Configuration
aws:
diff --git a/docs/tutorials/custom-checks-metadata.md b/docs/user-guide/cli/tutorials/custom-checks-metadata.mdx
similarity index 99%
rename from docs/tutorials/custom-checks-metadata.md
rename to docs/user-guide/cli/tutorials/custom-checks-metadata.mdx
index 59059cf321..769d50775e 100644
--- a/docs/tutorials/custom-checks-metadata.md
+++ b/docs/user-guide/cli/tutorials/custom-checks-metadata.mdx
@@ -1,4 +1,6 @@
-# Custom Checks Metadata
+---
+title: "Custom Checks Metadata"
+---
In certain organizations, the severity of specific checks might differ from the default values defined in the check's metadata. For instance, while `s3_bucket_level_public_access_block` could be deemed `critical` for some organizations, others might assign a different severity level to it.
diff --git a/docs/tutorials/dashboard.md b/docs/user-guide/cli/tutorials/dashboard.mdx
similarity index 81%
rename from docs/tutorials/dashboard.md
rename to docs/user-guide/cli/tutorials/dashboard.mdx
index c7ecaae5a4..01c60b29e9 100644
--- a/docs/tutorials/dashboard.md
+++ b/docs/user-guide/cli/tutorials/dashboard.mdx
@@ -1,4 +1,6 @@
-# Dashboard
+---
+title: 'Dashboard'
+---
Prowler allows you to run your own local dashboards using the csv outputs provided by Prowler
@@ -6,9 +8,10 @@ Prowler allows you to run your own local dashboards using the csv outputs provid
prowler dashboard
```
-???+ note
- You can expose the `dashboard` server in another address using the `HOST` environment variable.
+
+You can expose the `dashboard` server in another address using the `HOST` environment variable.
+
To run Prowler local dashboard with Docker, use:
```sh
@@ -17,16 +20,17 @@ docker run -v /your/local/dir/prowler-output:/home/prowler/output --env HOST=0.0
Make sure you update the `/your/local/dir/prowler-output` to match the path that contains your prowler output.
-???+ note
- **Remember that the `dashboard` server is not authenticated. If you expose it to the Internet, do it at your own risk.**
+
+ **Remember that the `dashboard` server is not authenticated. If you expose it to the Internet, do it at your own risk.**
-The banner and additional info about the dashboard will be shown on your console:
+
+The banner and additional info about the dashboard will be shown on your console:
## Overview Page
The overview page provides a full impression of your findings obtained from Prowler:
-
+
This page allows for multiple functions:
@@ -41,7 +45,7 @@ This page allows for multiple functions:
* See which files has been scanned to generate the dashboard by placing your mouse on the `?` icon:
-
+
* Download the `Top Findings by Severity` table using the button `DOWNLOAD THIS TABLE AS CSV` or `DOWNLOAD THIS TABLE AS XLSX`
@@ -49,13 +53,13 @@ This page allows for multiple functions:
* On the dropdowns under `Top Findings by Severity` you can apply multiple sorts to see the information, also you will get a detailed view of each finding using the dropdowns:
-
+
## Compliance Page
This page shows all the info related to the compliance selected. Multiple filters can be selected as per your preferences.
-
+
To add your own compliance to compliance page, add a file with the compliance name (using `_` instead of `.`) to the path `/dashboard/compliance`.
@@ -103,10 +107,11 @@ Prowler will use the outputs from the folder `/output` (for common prowler outpu
To change the path, modify the values `folder_path_overview` or `folder_path_compliance` from `/dashboard/config.py`
-???+ note
- If you have any issue related with dashboards, check that the output path where the dashboard is getting the outputs is correct.
+
+If you have any issue related with dashboards, check that the output path where the dashboard is getting the outputs is correct.
+
## Output Support
Prowler dashboard supports the detailed outputs:
diff --git a/docs/tutorials/fixer.md b/docs/user-guide/cli/tutorials/fixer.mdx
similarity index 89%
rename from docs/tutorials/fixer.md
rename to docs/user-guide/cli/tutorials/fixer.mdx
index 9576409823..4170b340e2 100644
--- a/docs/tutorials/fixer.md
+++ b/docs/user-guide/cli/tutorials/fixer.mdx
@@ -1,4 +1,6 @@
-# Prowler Fixers (Remediations)
+---
+title: 'Prowler Fixers (Remediations)'
+---
Prowler allows you to fix some of the failed findings it identifies. You can use the `--fixer` flag to run the fixes that are available for the checks that failed.
@@ -6,15 +8,16 @@ Prowler allows you to fix some of the failed findings it identifies. You can use
prowler -c ... --fixer
```
-
+
-???+ note
- You can see all the available fixes for each provider with the `--list-remediations` or `--list-fixers` flag.
+
+You can see all the available fixes for each provider with the `--list-remediations` or `--list-fixers` flag.
- ```sh
- prowler --list-fixers
- ```
+```sh
+prowler --list-fixers
+```
+
It's important to note that using the fixers for `Access Analyzer`, `GuardDuty`, and `SecurityHub` may incur additional costs. These AWS services might trigger actions or deploy resources that can lead to charges on your AWS account.
## Writing a Fixer
@@ -30,7 +33,7 @@ from prowler.providers.aws.services.ec2.ec2_client import ec2_client
def fixer(region):
"""
- Enable EBS encryption by default in a region. ???+ note Custom KMS keys for EBS Default Encryption may be overwritten. Requires the ec2:EnableEbsEncryptionByDefault permission.
+ Enable EBS encryption by default in a region. Note: Custom KMS keys for EBS Default Encryption may be overwritten. Requires the ec2:EnableEbsEncryptionByDefault permission.
It can be set as follows:
{
"Version": "2012-10-17",
@@ -68,7 +71,7 @@ from prowler.providers.aws.services.s3.s3control_client import s3control_client
def fixer(resource_id: str) -> bool:
"""
- Enable S3 Block Public Access for the account. ???+ note Custom KMS keys for EBS Default Encryption may be overwritten. By blocking all S3 public access you may break public S3 buckets.
+ Enable S3 Block Public Access for the account. Note: Custom KMS keys for EBS Default Encryption may be overwritten. By blocking all S3 public access you may break public S3 buckets.
Requires the s3:PutAccountPublicAccessBlock permission:
{
"Version": "2012-10-17",
diff --git a/docs/tutorials/integrations.md b/docs/user-guide/cli/tutorials/integrations.mdx
similarity index 70%
rename from docs/tutorials/integrations.md
rename to docs/user-guide/cli/tutorials/integrations.mdx
index cae62f1851..2667b81c50 100644
--- a/docs/tutorials/integrations.md
+++ b/docs/user-guide/cli/tutorials/integrations.mdx
@@ -1,4 +1,6 @@
-# Integrations
+---
+title: 'Integrations'
+---
## Integration with Slack
@@ -8,30 +10,31 @@ Prowler can be integrated with [Slack](https://slack.com/) to send a summary of
prowler --slack
```
-
+
-???+ note
- Slack integration needs `SLACK_API_TOKEN` and `SLACK_CHANNEL_NAME` environment variables.
+
+Slack integration needs `SLACK_API_TOKEN` and `SLACK_CHANNEL_NAME` environment variables.
+
### Configuration of the Integration with Slack
To configure the Slack Integration, follow the next steps:
1. Create a Slack Application:
- Go to [Slack API page](https://api.slack.com/tutorials/tracks/getting-a-token), scroll down to the *Create app* button and select your workspace:
- 
+ 
- Install the application in your selected workspaces:
- 
+ 
- Get the *Slack App OAuth Token* that Prowler needs to send the message:
- 
+ 
2. Optionally, create a Slack Channel (you can use an existing one)
3. Integrate the created Slack App to your Slack channel:
- Click on the channel, go to the Integrations tab, and Add an App.
- 
+ 
4. Set the following environment variables that Prowler will read:
- `SLACK_API_TOKEN`: the *Slack App OAuth Token* that was previously get.
diff --git a/docs/tutorials/logging.md b/docs/user-guide/cli/tutorials/logging.mdx
similarity index 54%
rename from docs/tutorials/logging.md
rename to docs/user-guide/cli/tutorials/logging.mdx
index 38e5c89c5b..3719d59942 100644
--- a/docs/tutorials/logging.md
+++ b/docs/user-guide/cli/tutorials/logging.mdx
@@ -1,4 +1,6 @@
-# Logging
+---
+title: 'Logging'
+---
Prowler has a logging feature to be as transparent as possible, so that you can see every action that is being performed whilst the tool is being executing.
@@ -18,9 +20,10 @@ You can establish the log level of Prowler with `--log-level` option:
prowler --log-level {DEBUG,INFO,WARNING,ERROR,CRITICAL}
```
-???+ note
- By default, Prowler will run with the `CRITICAL` log level, since critical errors will abort the execution.
+
+By default, Prowler will run with the `CRITICAL` log level, since critical errors will abort the execution.
+
## Export Logs to File
Prowler allows you to export the logs in json format with the `--log-file` option:
@@ -31,20 +34,24 @@ prowler --log-level {DEBUG,INFO,WARNING,ERROR,CRITICAL} --log-file
+Each finding is represented as a `json` object.
+
+
diff --git a/docs/tutorials/misc.md b/docs/user-guide/cli/tutorials/misc.mdx
similarity index 83%
rename from docs/tutorials/misc.md
rename to docs/user-guide/cli/tutorials/misc.mdx
index 0c8fd7943f..9921f89032 100644
--- a/docs/tutorials/misc.md
+++ b/docs/user-guide/cli/tutorials/misc.mdx
@@ -1,4 +1,6 @@
-# Miscellaneous
+---
+title: 'Miscellaneous'
+---
## Prowler Version
@@ -102,9 +104,10 @@ Prowler supports custom security checks, allowing users to define their own logi
prowler -x/--checks-folder
```
-???+ note
- S3 URIs are also supported for custom check folders (e.g., `s3://bucket/prefix/checks_folder/`). Ensure the credentials used have `s3:GetObject` permissions in the specified S3 path.
+
+S3 URIs are also supported for custom check folders (e.g., `s3://bucket/prefix/checks_folder/`). Ensure the credentials used have `s3:GetObject` permissions in the specified S3 path.
+
**Folder Structure for Custom Checks**
Each check must reside in a dedicated subfolder, following this structure:
@@ -113,14 +116,16 @@ Each check must reside in a dedicated subfolder, following this structure:
- `check_name.py` (name file) – Defines the check’s logic for contextual information.
- `check_name.metadata.json` (metadata file) – Defines the check’s metadata for contextual information.
-???+ note
- The check name must start with the service name followed by an underscore (e.g., ec2\_instance\_public\_ip).
+
+The check name must start with the service name followed by an underscore (e.g., ec2\_instance\_public\_ip).
-To see more information about how to write checks, refer to the [Developer Guide](../developer-guide/checks.md#creating-a-check).
+
+To see more information about how to write checks, refer to the [Developer Guide](/developer-guide/checks#creating-a-check).
-???+ note
- If you want to run ONLY your custom check(s), import it with -x (--checks-folder) and then run it with -c (--checks), e.g.: `console prowler aws -x s3://bucket/prowler/providers/aws/services/s3/s3_bucket_policy/ -c s3_bucket_policy`
+
+If you want to run ONLY your custom check(s), import it with -x (--checks-folder) and then run it with -c (--checks), e.g.: `console prowler aws -x s3://bucket/prowler/providers/aws/services/s3/s3_bucket_policy/ -c s3_bucket_policy`
+
## Severities
Each of Prowler's checks has a severity, which can be one of the following:
diff --git a/docs/tutorials/mutelist.md b/docs/user-guide/cli/tutorials/mutelist.mdx
similarity index 93%
rename from docs/tutorials/mutelist.md
rename to docs/user-guide/cli/tutorials/mutelist.mdx
index 2d559d5b6f..4bb7524fa6 100644
--- a/docs/tutorials/mutelist.md
+++ b/docs/user-guide/cli/tutorials/mutelist.mdx
@@ -1,4 +1,6 @@
-# Mutelisting
+---
+title: 'Mutelisting'
+---
**Muting Findings for Intentional Configurations**
@@ -21,16 +23,18 @@ The **Mutelist** uses both "AND" and "OR" logic to determine which resources, ch
If any of the criteria do not match, the check is not muted.
-???+ note
- Remember that mutelist can be used with regular expressions.
+
+Remember that mutelist can be used with regular expressions.
+
## Mutelist Specification
-???+ note
- - For Azure provider, the Account ID is the Subscription Name and the Region is the Location.
- - For GCP provider, the Account ID is the Project ID and the Region is the Zone.
- - For Kubernetes provider, the Account ID is the Cluster Name and the Region is the Namespace.
+
+- For Azure provider, the Account ID is the Subscription Name and the Region is the Location.
+- For GCP provider, the Account ID is the Project ID and the Region is the Zone.
+- For Kubernetes provider, the Account ID is the Cluster Name and the Region is the Namespace.
+
The Mutelist file uses the [YAML](https://en.wikipedia.org/wiki/YAML) format with the following syntax:
```yaml
@@ -203,9 +207,10 @@ You will need to pass the S3 URI where your Mutelist YAML file was uploaded to y
prowler aws -w s3:////mutelist.yaml
```
-???+ note
- Make sure that the used AWS credentials have `s3:GetObject` permissions in the S3 path where the mutelist file is located.
+
+Make sure that the used AWS credentials have `s3:GetObject` permissions in the S3 path where the mutelist file is located.
+
#### AWS DynamoDB Table ARN
You will need to pass the DynamoDB Mutelist Table ARN:
@@ -216,7 +221,7 @@ prowler aws -w arn:aws:dynamodb:::table/
The DynamoDB Table must have the following String keys:
-
+
The Mutelist Table must have the following columns:
@@ -234,11 +239,12 @@ The Mutelist Table must have the following columns:
The following example will mute all resources in all accounts for the EC2 checks in the regions `eu-west-1` and `us-east-1` with the tags `environment=dev` and `environment=prod`, except the resources containing the string `test` in the account `012345678912` and region `eu-west-1` with the tag `environment=prod`:
-
+
-???+ note
- Make sure that the used AWS credentials have `dynamodb:PartiQLSelect` permissions in the table.
+
+Make sure that the used AWS credentials have `dynamodb:PartiQLSelect` permissions in the table.
+
#### AWS Lambda ARN
You will need to pass the AWS Lambda Function ARN:
diff --git a/docs/tutorials/parallel-execution.md b/docs/user-guide/cli/tutorials/parallel-execution.mdx
similarity index 97%
rename from docs/tutorials/parallel-execution.md
rename to docs/user-guide/cli/tutorials/parallel-execution.mdx
index 543c7579b7..b364483ace 100644
--- a/docs/tutorials/parallel-execution.md
+++ b/docs/user-guide/cli/tutorials/parallel-execution.mdx
@@ -1,4 +1,6 @@
-# Parallel Execution
+---
+title: 'Parallel Execution'
+---
The strategy used here will be to execute Prowler once per service. You can modify this approach as per your requirements.
@@ -10,9 +12,10 @@ This can help for really large accounts, but please be aware of AWS API rate lim
For information on Prowler's retrier configuration please refer to this [page](https://docs.prowler.cloud/en/latest/tutorials/aws/boto3-configuration/).
-???+ note
- You might need to increase the `--aws-retries-max-attempts` parameter from the default value of 3. The retrier follows an exponential backoff strategy.
+
+You might need to increase the `--aws-retries-max-attempts` parameter from the default value of 3. The retrier follows an exponential backoff strategy.
+
## Linux
Generate a list of services that Prowler supports, and populate this info into a file:
diff --git a/docs/tutorials/pentesting.md b/docs/user-guide/cli/tutorials/pentesting.mdx
similarity index 99%
rename from docs/tutorials/pentesting.md
rename to docs/user-guide/cli/tutorials/pentesting.mdx
index cefdcdcf72..f59c9ccc2e 100644
--- a/docs/tutorials/pentesting.md
+++ b/docs/user-guide/cli/tutorials/pentesting.mdx
@@ -1,4 +1,6 @@
-# Pentesting
+---
+title: 'Pentesting'
+---
Prowler has some checks that analyse pentesting risks (Secrets, Internet Exposed, AuthN, AuthZ, and more).
diff --git a/docs/tutorials/prowler-check-kreator.md b/docs/user-guide/cli/tutorials/prowler-check-kreator.mdx
similarity index 62%
rename from docs/tutorials/prowler-check-kreator.md
rename to docs/user-guide/cli/tutorials/prowler-check-kreator.mdx
index c0ecd13d53..e6c708a212 100644
--- a/docs/tutorials/prowler-check-kreator.md
+++ b/docs/user-guide/cli/tutorials/prowler-check-kreator.mdx
@@ -1,11 +1,15 @@
-# Prowler Check Kreator
+---
+title: 'Prowler Check Kreator'
+---
-???+ note
- Currently, this tool is only available for creating checks for the AWS provider.
+
+Currently, this tool is only available for creating checks for the AWS provider.
-???+ note
- If you are looking for a way to create new checks for all the supported providers, you can use [Prowler Studio](https://github.com/prowler-cloud/prowler-studio), it is an AI-powered toolkit for generating and managing security checks for Prowler (better version of the Check Kreator).
+
+
+If you are looking for a way to create new checks for all the supported providers, you can use [Prowler Studio](https://github.com/prowler-cloud/prowler-studio), it is an AI-powered toolkit for generating and managing security checks for Prowler (better version of the Check Kreator).
+
## Introduction
**Prowler Check Kreator** is a utility designed to streamline the creation of new checks for Prowler. This tool generates all necessary files required to add a new check to the Prowler repository. Specifically, it creates:
@@ -32,10 +36,12 @@ Parameters:
This tool optionally integrates AI to assist in generating the check code and metadata file content. When AI assistance is chosen, the tool uses [Gemini](https://gemini.google.com/) to produce preliminary code and metadata.
-???+ note
- For this feature to work, you must have the library `google-generativeai` installed in your Python environment.
+
+For this feature to work, you must have the library `google-generativeai` installed in your Python environment.
-???+ warning
- AI-generated code and metadata might contain errors or require adjustments to align with specific Prowler requirements. Carefully review all AI-generated content before committing.
+
+
+AI-generated code and metadata might contain errors or require adjustments to align with specific Prowler requirements. Carefully review all AI-generated content before committing.
+
To enable AI assistance, simply confirm when prompted by the tool. Additionally, ensure that the `GEMINI_API_KEY` environment variable is set with a valid Gemini API key. For instructions on obtaining your API key, refer to the [Gemini documentation](https://ai.google.dev/gemini-api/docs/api-key).
diff --git a/docs/tutorials/quick-inventory.md b/docs/user-guide/cli/tutorials/quick-inventory.mdx
similarity index 67%
rename from docs/tutorials/quick-inventory.md
rename to docs/user-guide/cli/tutorials/quick-inventory.mdx
index c261459f1a..33ce719d19 100644
--- a/docs/tutorials/quick-inventory.md
+++ b/docs/user-guide/cli/tutorials/quick-inventory.mdx
@@ -1,24 +1,28 @@
-# Quick Inventory
+---
+title: 'Quick Inventory'
+---
Prowler allows you to execute a quick inventory to extract the number of resources in your provider.
-???+ note
- Currently, it is only available for AWS provider.
+
+Currently, it is only available for AWS provider.
+
- You can use option `-i`/`--quick-inventory` to execute it:
```sh
prowler -i
```
-???+ note
- By default, it extracts resources from all the regions, you could use `-f`/`--filter-region` to specify the regions to execute the analysis.
+
+By default, it extracts resources from all the regions, you could use `-f`/`--filter-region` to specify the regions to execute the analysis.
+
- This feature specify both the number of resources for each service and for each resource type.
- Also, it creates by default a CSV and JSON to see detailed information about the resources extracted.
-
+
## Objections
diff --git a/docs/tutorials/reporting.md b/docs/user-guide/cli/tutorials/reporting.mdx
similarity index 96%
rename from docs/tutorials/reporting.md
rename to docs/user-guide/cli/tutorials/reporting.mdx
index b6fb9d0158..2e2fed88c0 100644
--- a/docs/tutorials/reporting.md
+++ b/docs/user-guide/cli/tutorials/reporting.mdx
@@ -1,4 +1,6 @@
-# Reporting in Prowler
+---
+title: 'Reporting in Prowler'
+---
Prowler generates security assessment reports in multiple formats, ensuring compatibility with various analysis tools and AWS integrations.
@@ -43,9 +45,10 @@ You can use the flag `-o`/`--output-directory`
prowler -M csv json-ocsf json-asff -o
```
-???+ note
- Both flags can be used simultaneously to provide a custom directory and filename. `console prowler -M csv json-ocsf json-asff \ -F -o `
+
+Both flags can be used simultaneously to provide a custom directory and filename. `console prowler -M csv json-ocsf json-asff \ -F -o `
+
## Output timestamp format
By default, the timestamp format of the output files is ISO 8601. This can be changed with the flag `--unix-timestamp` generating the timestamp fields in pure unix timestamp format.
@@ -278,14 +281,16 @@ The JSON-OCSF output format implements the [Detection Finding](https://schema.oc
}]
```
-???+ note
- Each finding is a `json` object within a list.
+
+Each finding is a `json` object within a list.
+
### JSON-ASFF
-???+ note
- Only available when using `--security-hub` or `--output-formats json-asff`
+
+Only available when using `--security-hub` or `--output-formats json-asff`
+
The following code is an example output of the [JSON-ASFF](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-findings-format-syntax.html) format:
```json
@@ -354,14 +359,15 @@ The following code is an example output of the [JSON-ASFF](https://docs.aws.amaz
}]
```
-???+ note
- Each finding is a `json` object within a list.
+
+Each finding is a `json` object within a list.
+
### HTML
The following image is an example of the HTML output:
-
+
## V4 Deprecations
Some deprecations have been made to unify formats and improve outputs.
diff --git a/docs/tutorials/scan-unused-services.md b/docs/user-guide/cli/tutorials/scan-unused-services.mdx
similarity index 97%
rename from docs/tutorials/scan-unused-services.md
rename to docs/user-guide/cli/tutorials/scan-unused-services.mdx
index 40120fbae7..32756cdce0 100644
--- a/docs/tutorials/scan-unused-services.md
+++ b/docs/user-guide/cli/tutorials/scan-unused-services.mdx
@@ -1,8 +1,11 @@
-# Scanning Unused Services
+---
+title: 'Scanning Unused Services'
+---
-???+ note
- This feature is currently available only for the AWS provider.
+
+This feature is currently available only for the AWS provider.
+
By default, Prowler scans only actively used cloud services (services with resources deployed). This reduces unnecessary findings in reports. To include unused services in the scan, use the following command:
```console
diff --git a/docs/tutorials/compliance/threatscore.md b/docs/user-guide/compliance/tutorials/threatscore.mdx
similarity index 99%
rename from docs/tutorials/compliance/threatscore.md
rename to docs/user-guide/compliance/tutorials/threatscore.mdx
index b6a5c3f970..0a2f2f77b9 100644
--- a/docs/tutorials/compliance/threatscore.md
+++ b/docs/user-guide/compliance/tutorials/threatscore.mdx
@@ -1,4 +1,6 @@
-# Prowler ThreatScore Documentation
+---
+title: "Prowler ThreatScore Documentation"
+---
## Introduction
@@ -480,4 +482,3 @@ rate_i = pass_i / total_i (when total_i > 0)
- Use score trends to identify systematic issues
- Correlate score changes with security incidents or changes
- Adjust weights and risk levels based on lessons learned
-
diff --git a/docs/user-guide/img/add-cloud-provider.png b/docs/user-guide/img/add-cloud-provider.png
new file mode 100644
index 0000000000..dd42e73047
Binary files /dev/null and b/docs/user-guide/img/add-cloud-provider.png differ
diff --git a/docs/user-guide/img/bulk-provider-provisioning.png b/docs/user-guide/img/bulk-provider-provisioning.png
new file mode 100644
index 0000000000..c43c746874
Binary files /dev/null and b/docs/user-guide/img/bulk-provider-provisioning.png differ
diff --git a/docs/user-guide/img/cloud-providers-page.png b/docs/user-guide/img/cloud-providers-page.png
new file mode 100644
index 0000000000..0581e0132f
Binary files /dev/null and b/docs/user-guide/img/cloud-providers-page.png differ
diff --git a/docs/user-guide/img/compliance/compliance-cis-sample1.png b/docs/user-guide/img/compliance/compliance-cis-sample1.png
new file mode 100644
index 0000000000..925e5c80f8
Binary files /dev/null and b/docs/user-guide/img/compliance/compliance-cis-sample1.png differ
diff --git a/docs/user-guide/img/compliance/compliance.png b/docs/user-guide/img/compliance/compliance.png
new file mode 100644
index 0000000000..de5c27fbe3
Binary files /dev/null and b/docs/user-guide/img/compliance/compliance.png differ
diff --git a/docs/user-guide/img/create-slack-app.png b/docs/user-guide/img/create-slack-app.png
new file mode 100644
index 0000000000..dc910634ec
Binary files /dev/null and b/docs/user-guide/img/create-slack-app.png differ
diff --git a/docs/user-guide/img/create-sp.gif b/docs/user-guide/img/create-sp.gif
new file mode 100644
index 0000000000..1ed345bb6a
Binary files /dev/null and b/docs/user-guide/img/create-sp.gif differ
diff --git a/docs/user-guide/img/dashboard/dashboard-banner.png b/docs/user-guide/img/dashboard/dashboard-banner.png
new file mode 100644
index 0000000000..3d6dc92304
Binary files /dev/null and b/docs/user-guide/img/dashboard/dashboard-banner.png differ
diff --git a/docs/user-guide/img/dashboard/dashboard-compliance.png b/docs/user-guide/img/dashboard/dashboard-compliance.png
new file mode 100644
index 0000000000..95fb7179f9
Binary files /dev/null and b/docs/user-guide/img/dashboard/dashboard-compliance.png differ
diff --git a/docs/user-guide/img/dashboard/dashboard-files-scanned.png b/docs/user-guide/img/dashboard/dashboard-files-scanned.png
new file mode 100644
index 0000000000..2629a8ac77
Binary files /dev/null and b/docs/user-guide/img/dashboard/dashboard-files-scanned.png differ
diff --git a/docs/user-guide/img/dashboard/dashboard-overview.png b/docs/user-guide/img/dashboard/dashboard-overview.png
new file mode 100644
index 0000000000..a5a470cb0e
Binary files /dev/null and b/docs/user-guide/img/dashboard/dashboard-overview.png differ
diff --git a/docs/user-guide/img/dashboard/dropdown.png b/docs/user-guide/img/dashboard/dropdown.png
new file mode 100644
index 0000000000..b1df77798e
Binary files /dev/null and b/docs/user-guide/img/dashboard/dropdown.png differ
diff --git a/docs/user-guide/img/fixer.png b/docs/user-guide/img/fixer.png
new file mode 100644
index 0000000000..d794485454
Binary files /dev/null and b/docs/user-guide/img/fixer.png differ
diff --git a/docs/user-guide/img/gcp-auth-methods.png b/docs/user-guide/img/gcp-auth-methods.png
new file mode 100644
index 0000000000..dc8681396e
Binary files /dev/null and b/docs/user-guide/img/gcp-auth-methods.png differ
diff --git a/docs/user-guide/img/gcp-service-account-creds.png b/docs/user-guide/img/gcp-service-account-creds.png
new file mode 100644
index 0000000000..af09776ab1
Binary files /dev/null and b/docs/user-guide/img/gcp-service-account-creds.png differ
diff --git a/docs/user-guide/img/github-app-credentials.png b/docs/user-guide/img/github-app-credentials.png
new file mode 100644
index 0000000000..1a71db4fbd
Binary files /dev/null and b/docs/user-guide/img/github-app-credentials.png differ
diff --git a/docs/user-guide/img/github-auth-methods.png b/docs/user-guide/img/github-auth-methods.png
new file mode 100644
index 0000000000..17414054aa
Binary files /dev/null and b/docs/user-guide/img/github-auth-methods.png differ
diff --git a/docs/user-guide/img/github-oauth-credentials.png b/docs/user-guide/img/github-oauth-credentials.png
new file mode 100644
index 0000000000..5d84c4bf75
Binary files /dev/null and b/docs/user-guide/img/github-oauth-credentials.png differ
diff --git a/docs/user-guide/img/github-pat-credentials.png b/docs/user-guide/img/github-pat-credentials.png
new file mode 100644
index 0000000000..044cbb7996
Binary files /dev/null and b/docs/user-guide/img/github-pat-credentials.png differ
diff --git a/docs/user-guide/img/install-in-slack-workspace.png b/docs/user-guide/img/install-in-slack-workspace.png
new file mode 100644
index 0000000000..649c107cdd
Binary files /dev/null and b/docs/user-guide/img/install-in-slack-workspace.png differ
diff --git a/docs/user-guide/img/integrate-slack-app.png b/docs/user-guide/img/integrate-slack-app.png
new file mode 100644
index 0000000000..beea9ef56b
Binary files /dev/null and b/docs/user-guide/img/integrate-slack-app.png differ
diff --git a/docs/user-guide/img/jira/connection-settings.png b/docs/user-guide/img/jira/connection-settings.png
new file mode 100644
index 0000000000..86ebe73dea
Binary files /dev/null and b/docs/user-guide/img/jira/connection-settings.png differ
diff --git a/docs/user-guide/img/jira/integrations-tab.png b/docs/user-guide/img/jira/integrations-tab.png
new file mode 100644
index 0000000000..e71773fc52
Binary files /dev/null and b/docs/user-guide/img/jira/integrations-tab.png differ
diff --git a/docs/user-guide/img/jira/send-to-jira-modal.png b/docs/user-guide/img/jira/send-to-jira-modal.png
new file mode 100644
index 0000000000..2cf498926a
Binary files /dev/null and b/docs/user-guide/img/jira/send-to-jira-modal.png differ
diff --git a/docs/user-guide/img/lighthouse-architecture.png b/docs/user-guide/img/lighthouse-architecture.png
new file mode 100644
index 0000000000..63202ce7c7
Binary files /dev/null and b/docs/user-guide/img/lighthouse-architecture.png differ
diff --git a/docs/user-guide/img/lighthouse-config.png b/docs/user-guide/img/lighthouse-config.png
new file mode 100644
index 0000000000..8bae46f51b
Binary files /dev/null and b/docs/user-guide/img/lighthouse-config.png differ
diff --git a/docs/user-guide/img/lighthouse-feature1.png b/docs/user-guide/img/lighthouse-feature1.png
new file mode 100644
index 0000000000..4568f5752a
Binary files /dev/null and b/docs/user-guide/img/lighthouse-feature1.png differ
diff --git a/docs/user-guide/img/lighthouse-feature2.png b/docs/user-guide/img/lighthouse-feature2.png
new file mode 100644
index 0000000000..01e72bbaf4
Binary files /dev/null and b/docs/user-guide/img/lighthouse-feature2.png differ
diff --git a/docs/user-guide/img/lighthouse-feature3.png b/docs/user-guide/img/lighthouse-feature3.png
new file mode 100644
index 0000000000..a40177cf18
Binary files /dev/null and b/docs/user-guide/img/lighthouse-feature3.png differ
diff --git a/docs/user-guide/img/lighthouse-intro.png b/docs/user-guide/img/lighthouse-intro.png
new file mode 100644
index 0000000000..38d3f0819c
Binary files /dev/null and b/docs/user-guide/img/lighthouse-intro.png differ
diff --git a/docs/user-guide/img/mutelist-keys.png b/docs/user-guide/img/mutelist-keys.png
new file mode 100644
index 0000000000..0822344376
Binary files /dev/null and b/docs/user-guide/img/mutelist-keys.png differ
diff --git a/docs/user-guide/img/mutelist-row.png b/docs/user-guide/img/mutelist-row.png
new file mode 100644
index 0000000000..0ed7d75a7d
Binary files /dev/null and b/docs/user-guide/img/mutelist-row.png differ
diff --git a/docs/user-guide/img/rbac/invitation_details.png b/docs/user-guide/img/rbac/invitation_details.png
new file mode 100644
index 0000000000..656a698308
Binary files /dev/null and b/docs/user-guide/img/rbac/invitation_details.png differ
diff --git a/docs/user-guide/img/rbac/invitation_details_1.png b/docs/user-guide/img/rbac/invitation_details_1.png
new file mode 100644
index 0000000000..e167db74af
Binary files /dev/null and b/docs/user-guide/img/rbac/invitation_details_1.png differ
diff --git a/docs/user-guide/img/rbac/invitation_edit.png b/docs/user-guide/img/rbac/invitation_edit.png
new file mode 100644
index 0000000000..ef3d81f192
Binary files /dev/null and b/docs/user-guide/img/rbac/invitation_edit.png differ
diff --git a/docs/user-guide/img/rbac/invitation_edit_1.png b/docs/user-guide/img/rbac/invitation_edit_1.png
new file mode 100644
index 0000000000..6d1a1d2223
Binary files /dev/null and b/docs/user-guide/img/rbac/invitation_edit_1.png differ
diff --git a/docs/user-guide/img/rbac/invitation_info.png b/docs/user-guide/img/rbac/invitation_info.png
new file mode 100644
index 0000000000..a6ec05f976
Binary files /dev/null and b/docs/user-guide/img/rbac/invitation_info.png differ
diff --git a/docs/user-guide/img/rbac/invitation_revoke.png b/docs/user-guide/img/rbac/invitation_revoke.png
new file mode 100644
index 0000000000..6c4e042c16
Binary files /dev/null and b/docs/user-guide/img/rbac/invitation_revoke.png differ
diff --git a/docs/user-guide/img/rbac/invitation_sign-up.png b/docs/user-guide/img/rbac/invitation_sign-up.png
new file mode 100644
index 0000000000..f5b67a7762
Binary files /dev/null and b/docs/user-guide/img/rbac/invitation_sign-up.png differ
diff --git a/docs/user-guide/img/rbac/invite.png b/docs/user-guide/img/rbac/invite.png
new file mode 100644
index 0000000000..dd60aba314
Binary files /dev/null and b/docs/user-guide/img/rbac/invite.png differ
diff --git a/docs/user-guide/img/rbac/membership.png b/docs/user-guide/img/rbac/membership.png
new file mode 100644
index 0000000000..e2b96e40f5
Binary files /dev/null and b/docs/user-guide/img/rbac/membership.png differ
diff --git a/docs/user-guide/img/rbac/provider_group.png b/docs/user-guide/img/rbac/provider_group.png
new file mode 100644
index 0000000000..878306e02f
Binary files /dev/null and b/docs/user-guide/img/rbac/provider_group.png differ
diff --git a/docs/user-guide/img/rbac/provider_group_edit.png b/docs/user-guide/img/rbac/provider_group_edit.png
new file mode 100644
index 0000000000..5de9649578
Binary files /dev/null and b/docs/user-guide/img/rbac/provider_group_edit.png differ
diff --git a/docs/user-guide/img/rbac/provider_group_edit_1.png b/docs/user-guide/img/rbac/provider_group_edit_1.png
new file mode 100644
index 0000000000..ed4a090eed
Binary files /dev/null and b/docs/user-guide/img/rbac/provider_group_edit_1.png differ
diff --git a/docs/user-guide/img/rbac/provider_group_remove.png b/docs/user-guide/img/rbac/provider_group_remove.png
new file mode 100644
index 0000000000..580a8533cf
Binary files /dev/null and b/docs/user-guide/img/rbac/provider_group_remove.png differ
diff --git a/docs/user-guide/img/rbac/role_create.png b/docs/user-guide/img/rbac/role_create.png
new file mode 100644
index 0000000000..8dc270f209
Binary files /dev/null and b/docs/user-guide/img/rbac/role_create.png differ
diff --git a/docs/user-guide/img/rbac/role_create_1.png b/docs/user-guide/img/rbac/role_create_1.png
new file mode 100644
index 0000000000..a96b0ac9ef
Binary files /dev/null and b/docs/user-guide/img/rbac/role_create_1.png differ
diff --git a/docs/user-guide/img/rbac/role_edit.png b/docs/user-guide/img/rbac/role_edit.png
new file mode 100644
index 0000000000..775b4b8562
Binary files /dev/null and b/docs/user-guide/img/rbac/role_edit.png differ
diff --git a/docs/user-guide/img/rbac/role_edit_details.png b/docs/user-guide/img/rbac/role_edit_details.png
new file mode 100644
index 0000000000..6170f210b1
Binary files /dev/null and b/docs/user-guide/img/rbac/role_edit_details.png differ
diff --git a/docs/user-guide/img/rbac/role_remove.png b/docs/user-guide/img/rbac/role_remove.png
new file mode 100644
index 0000000000..613f770bd4
Binary files /dev/null and b/docs/user-guide/img/rbac/role_remove.png differ
diff --git a/docs/user-guide/img/rbac/user_edit.png b/docs/user-guide/img/rbac/user_edit.png
new file mode 100644
index 0000000000..421ea93156
Binary files /dev/null and b/docs/user-guide/img/rbac/user_edit.png differ
diff --git a/docs/user-guide/img/rbac/user_edit_details.png b/docs/user-guide/img/rbac/user_edit_details.png
new file mode 100644
index 0000000000..3e4734f142
Binary files /dev/null and b/docs/user-guide/img/rbac/user_edit_details.png differ
diff --git a/docs/user-guide/img/rbac/user_remove.png b/docs/user-guide/img/rbac/user_remove.png
new file mode 100644
index 0000000000..4c368ded66
Binary files /dev/null and b/docs/user-guide/img/rbac/user_remove.png differ
diff --git a/docs/user-guide/img/reporting/html-output.png b/docs/user-guide/img/reporting/html-output.png
new file mode 100644
index 0000000000..00a8b60812
Binary files /dev/null and b/docs/user-guide/img/reporting/html-output.png differ
diff --git a/docs/user-guide/img/s3/s3-cross-account.png b/docs/user-guide/img/s3/s3-cross-account.png
new file mode 100644
index 0000000000..ad34a303fc
Binary files /dev/null and b/docs/user-guide/img/s3/s3-cross-account.png differ
diff --git a/docs/user-guide/img/s3/s3-integration-ui-1.png b/docs/user-guide/img/s3/s3-integration-ui-1.png
new file mode 100644
index 0000000000..1081f20453
Binary files /dev/null and b/docs/user-guide/img/s3/s3-integration-ui-1.png differ
diff --git a/docs/user-guide/img/s3/s3-integration-ui-2.png b/docs/user-guide/img/s3/s3-integration-ui-2.png
new file mode 100644
index 0000000000..618621ce26
Binary files /dev/null and b/docs/user-guide/img/s3/s3-integration-ui-2.png differ
diff --git a/docs/user-guide/img/s3/s3-integration-ui-3.png b/docs/user-guide/img/s3/s3-integration-ui-3.png
new file mode 100644
index 0000000000..6fabbe2ed3
Binary files /dev/null and b/docs/user-guide/img/s3/s3-integration-ui-3.png differ
diff --git a/docs/user-guide/img/s3/s3-integration-ui-4.png b/docs/user-guide/img/s3/s3-integration-ui-4.png
new file mode 100644
index 0000000000..1967eda8af
Binary files /dev/null and b/docs/user-guide/img/s3/s3-integration-ui-4.png differ
diff --git a/docs/user-guide/img/s3/s3-integration-ui-5.png b/docs/user-guide/img/s3/s3-integration-ui-5.png
new file mode 100644
index 0000000000..ffdea752f1
Binary files /dev/null and b/docs/user-guide/img/s3/s3-integration-ui-5.png differ
diff --git a/docs/user-guide/img/s3/s3-integration-ui-6.png b/docs/user-guide/img/s3/s3-integration-ui-6.png
new file mode 100644
index 0000000000..330588e17b
Binary files /dev/null and b/docs/user-guide/img/s3/s3-integration-ui-6.png differ
diff --git a/docs/user-guide/img/s3/s3-integration-ui-7.png b/docs/user-guide/img/s3/s3-integration-ui-7.png
new file mode 100644
index 0000000000..3448f82a48
Binary files /dev/null and b/docs/user-guide/img/s3/s3-integration-ui-7.png differ
diff --git a/docs/user-guide/img/s3/s3-multiple-accounts.png b/docs/user-guide/img/s3/s3-multiple-accounts.png
new file mode 100644
index 0000000000..db30e09841
Binary files /dev/null and b/docs/user-guide/img/s3/s3-multiple-accounts.png differ
diff --git a/docs/user-guide/img/s3/s3-output-folder.png b/docs/user-guide/img/s3/s3-output-folder.png
new file mode 100644
index 0000000000..448687a8b1
Binary files /dev/null and b/docs/user-guide/img/s3/s3-output-folder.png differ
diff --git a/docs/user-guide/img/s3/s3-same-account.png b/docs/user-guide/img/s3/s3-same-account.png
new file mode 100644
index 0000000000..39e586c762
Binary files /dev/null and b/docs/user-guide/img/s3/s3-same-account.png differ
diff --git a/docs/user-guide/img/saml/app-catalog-browse-prowler-add.png b/docs/user-guide/img/saml/app-catalog-browse-prowler-add.png
new file mode 100644
index 0000000000..71c70bb7cd
Binary files /dev/null and b/docs/user-guide/img/saml/app-catalog-browse-prowler-add.png differ
diff --git a/docs/user-guide/img/saml/app-catalog-browse-prowler-configure.png b/docs/user-guide/img/saml/app-catalog-browse-prowler-configure.png
new file mode 100644
index 0000000000..6d5715eb92
Binary files /dev/null and b/docs/user-guide/img/saml/app-catalog-browse-prowler-configure.png differ
diff --git a/docs/user-guide/img/saml/app-catalog-browse-prowler.png b/docs/user-guide/img/saml/app-catalog-browse-prowler.png
new file mode 100644
index 0000000000..5706997980
Binary files /dev/null and b/docs/user-guide/img/saml/app-catalog-browse-prowler.png differ
diff --git a/docs/user-guide/img/saml/app-catalog-browse.png b/docs/user-guide/img/saml/app-catalog-browse.png
new file mode 100644
index 0000000000..d0a9b6926d
Binary files /dev/null and b/docs/user-guide/img/saml/app-catalog-browse.png differ
diff --git a/docs/user-guide/img/saml/idp_config.png b/docs/user-guide/img/saml/idp_config.png
new file mode 100644
index 0000000000..0665b34886
Binary files /dev/null and b/docs/user-guide/img/saml/idp_config.png differ
diff --git a/docs/user-guide/img/saml/saml-signin-1.png b/docs/user-guide/img/saml/saml-signin-1.png
new file mode 100644
index 0000000000..5da2e84711
Binary files /dev/null and b/docs/user-guide/img/saml/saml-signin-1.png differ
diff --git a/docs/user-guide/img/saml/saml-signin-2.png b/docs/user-guide/img/saml/saml-signin-2.png
new file mode 100644
index 0000000000..f0f7082fc9
Binary files /dev/null and b/docs/user-guide/img/saml/saml-signin-2.png differ
diff --git a/docs/user-guide/img/saml/saml-sso-azure-1.png b/docs/user-guide/img/saml/saml-sso-azure-1.png
new file mode 100644
index 0000000000..c714d742e7
Binary files /dev/null and b/docs/user-guide/img/saml/saml-sso-azure-1.png differ
diff --git a/docs/user-guide/img/saml/saml-sso-azure-2.png b/docs/user-guide/img/saml/saml-sso-azure-2.png
new file mode 100644
index 0000000000..483af4548c
Binary files /dev/null and b/docs/user-guide/img/saml/saml-sso-azure-2.png differ
diff --git a/docs/user-guide/img/saml/saml-sso-azure-3.png b/docs/user-guide/img/saml/saml-sso-azure-3.png
new file mode 100644
index 0000000000..7983694c5c
Binary files /dev/null and b/docs/user-guide/img/saml/saml-sso-azure-3.png differ
diff --git a/docs/user-guide/img/saml/saml-sso-azure-4.png b/docs/user-guide/img/saml/saml-sso-azure-4.png
new file mode 100644
index 0000000000..f6c6029343
Binary files /dev/null and b/docs/user-guide/img/saml/saml-sso-azure-4.png differ
diff --git a/docs/user-guide/img/saml/saml-sso-azure-5.png b/docs/user-guide/img/saml/saml-sso-azure-5.png
new file mode 100644
index 0000000000..6dbeb6e65d
Binary files /dev/null and b/docs/user-guide/img/saml/saml-sso-azure-5.png differ
diff --git a/docs/user-guide/img/saml/saml-sso-azure-6.png b/docs/user-guide/img/saml/saml-sso-azure-6.png
new file mode 100644
index 0000000000..b351004a87
Binary files /dev/null and b/docs/user-guide/img/saml/saml-sso-azure-6.png differ
diff --git a/docs/user-guide/img/saml/saml-sso-azure-7.png b/docs/user-guide/img/saml/saml-sso-azure-7.png
new file mode 100644
index 0000000000..76551bef06
Binary files /dev/null and b/docs/user-guide/img/saml/saml-sso-azure-7.png differ
diff --git a/docs/user-guide/img/saml/saml-sso-azure-8.png b/docs/user-guide/img/saml/saml-sso-azure-8.png
new file mode 100644
index 0000000000..5dd2f1e1ef
Binary files /dev/null and b/docs/user-guide/img/saml/saml-sso-azure-8.png differ
diff --git a/docs/user-guide/img/saml/saml-sso-azure-9.png b/docs/user-guide/img/saml/saml-sso-azure-9.png
new file mode 100644
index 0000000000..130dd5e7cd
Binary files /dev/null and b/docs/user-guide/img/saml/saml-sso-azure-9.png differ
diff --git a/docs/user-guide/img/saml/saml-step-1.png b/docs/user-guide/img/saml/saml-step-1.png
new file mode 100644
index 0000000000..d505c2597c
Binary files /dev/null and b/docs/user-guide/img/saml/saml-step-1.png differ
diff --git a/docs/user-guide/img/saml/saml-step-2.png b/docs/user-guide/img/saml/saml-step-2.png
new file mode 100644
index 0000000000..ddb036c98d
Binary files /dev/null and b/docs/user-guide/img/saml/saml-step-2.png differ
diff --git a/docs/user-guide/img/saml/saml-step-3.png b/docs/user-guide/img/saml/saml-step-3.png
new file mode 100644
index 0000000000..2b8dfbd845
Binary files /dev/null and b/docs/user-guide/img/saml/saml-step-3.png differ
diff --git a/docs/user-guide/img/saml/saml-step-4.png b/docs/user-guide/img/saml/saml-step-4.png
new file mode 100644
index 0000000000..cca0987c50
Binary files /dev/null and b/docs/user-guide/img/saml/saml-step-4.png differ
diff --git a/docs/user-guide/img/saml/saml-step-remove.png b/docs/user-guide/img/saml/saml-step-remove.png
new file mode 100644
index 0000000000..f0868691af
Binary files /dev/null and b/docs/user-guide/img/saml/saml-step-remove.png differ
diff --git a/docs/user-guide/img/saml/saml_attribute_statements.png b/docs/user-guide/img/saml/saml_attribute_statements.png
new file mode 100644
index 0000000000..62d6366131
Binary files /dev/null and b/docs/user-guide/img/saml/saml_attribute_statements.png differ
diff --git a/docs/user-guide/img/security-hub/create-integration.png b/docs/user-guide/img/security-hub/create-integration.png
new file mode 100644
index 0000000000..145e68d201
Binary files /dev/null and b/docs/user-guide/img/security-hub/create-integration.png differ
diff --git a/docs/user-guide/img/security-hub/integration-settings.png b/docs/user-guide/img/security-hub/integration-settings.png
new file mode 100644
index 0000000000..3a32bf0830
Binary files /dev/null and b/docs/user-guide/img/security-hub/integration-settings.png differ
diff --git a/docs/user-guide/img/security-hub/integrations-tab.png b/docs/user-guide/img/security-hub/integrations-tab.png
new file mode 100644
index 0000000000..9d11cae33a
Binary files /dev/null and b/docs/user-guide/img/security-hub/integrations-tab.png differ
diff --git a/docs/user-guide/img/slack-app-token.png b/docs/user-guide/img/slack-app-token.png
new file mode 100644
index 0000000000..550970503b
Binary files /dev/null and b/docs/user-guide/img/slack-app-token.png differ
diff --git a/docs/user-guide/img/slack-prowler-message.png b/docs/user-guide/img/slack-prowler-message.png
new file mode 100644
index 0000000000..1151a7be7f
Binary files /dev/null and b/docs/user-guide/img/slack-prowler-message.png differ
diff --git a/docs/user-guide/img/social-login/social_login_buttons.png b/docs/user-guide/img/social-login/social_login_buttons.png
new file mode 100644
index 0000000000..476081e0fc
Binary files /dev/null and b/docs/user-guide/img/social-login/social_login_buttons.png differ
diff --git a/docs/user-guide/img/social-login/social_login_buttons_disabled.png b/docs/user-guide/img/social-login/social_login_buttons_disabled.png
new file mode 100644
index 0000000000..7b11a7802d
Binary files /dev/null and b/docs/user-guide/img/social-login/social_login_buttons_disabled.png differ
diff --git a/docs/tutorials/aws/authentication.md b/docs/user-guide/providers/aws/authentication.mdx
similarity index 55%
rename from docs/tutorials/aws/authentication.md
rename to docs/user-guide/providers/aws/authentication.mdx
index c7d96aa17e..8814cb213d 100644
--- a/docs/tutorials/aws/authentication.md
+++ b/docs/user-guide/providers/aws/authentication.mdx
@@ -1,4 +1,6 @@
-# AWS Authentication in Prowler
+---
+title: 'AWS Authentication in Prowler'
+---
Prowler requires AWS credentials to function properly. Authentication is available through the following methods:
@@ -21,45 +23,44 @@ For certain checks, additional read-only permissions are required. Attach the fo
This method grants permanent access and is the recommended setup for production environments.
-=== "CloudFormation"
-
+
+
1. Download the [Prowler Scan Role Template](https://raw.githubusercontent.com/prowler-cloud/prowler/refs/heads/master/permissions/templates/cloudformation/prowler-scan-role.yml)
- 
+ 
- 
+ 
2. Open the [AWS Console](https://console.aws.amazon.com), search for **CloudFormation**
- 
+ 
3. Go to **Stacks** and click "Create stack" > "With new resources (standard)"
- 
+ 
4. In **Specify Template**, choose "Upload a template file" and select the downloaded file
- 
- 
+ 
+ 
5. Click "Next", provide a stack name and the **External ID** shown in the Prowler Cloud setup screen
- 
- 
+ 
+ 
!!! info
An **External ID** is required when assuming the *ProwlerScan* role to comply with AWS [confused deputy prevention](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html).
6. Acknowledge the IAM resource creation warning and proceed
- 
+ 
7. Click "Submit" to deploy the stack
- 
-
-=== "Terraform"
-
+ 
+
+
To provision the scan role using Terraform:
1. Run the following commands:
@@ -69,37 +70,26 @@ This method grants permanent access and is the recommended setup for production
terraform plan
terraform apply
```
-
- 2. During `plan` and `apply`, provide the **External ID** when prompted, which is available in the Prowler Cloud or Prowler App UI:
-
- 
-
- > 💡 Note: Terraform will use the AWS credentials of the default profile.
+
+
---
## Credentials
-=== "Long term credentials"
+
+
1. Go to the [AWS Console](https://console.aws.amazon.com), open **CloudShell**
- 
+ 
2. Run:
```bash
aws iam create-access-key
```
-
- 3. Copy the output containing:
-
- - `AccessKeyId`
- - `SecretAccessKey`
-
- 
-
-=== "Short term credentials (Recommended)"
-
+
+
Use the [AWS Access Portal](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtogetcredentials.html) or the CLI:
1. Retrieve short-term credentials for the IAM identity using this command:
@@ -108,8 +98,9 @@ This method grants permanent access and is the recommended setup for production
aws sts get-session-token --duration-seconds 900
```
- ???+ note
- Check the aws documentation [here](https://docs.aws.amazon.com/IAM/latest/UserGuide/sts_example_sts_GetSessionToken_section.html)
+
+ Check the aws documentation [here](https://docs.aws.amazon.com/IAM/latest/UserGuide/sts_example_sts_GetSessionToken_section.html)
+
2. Copy the output containing:
@@ -118,13 +109,15 @@ This method grants permanent access and is the recommended setup for production
- `SessionToken`
> Sample output:
- ```json
- {
- "Credentials": {
- "AccessKeyId": "ASIAIOSFODNN7EXAMPLE",
- "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY",
- "SessionToken": "AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/LTo6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3zrkuWJOgQs8IZZaIv2BXIa2R4OlgkBN9bkUDNCJiBeb/AXlzBBko7b15fjrBs2+cTQtpZ3CYWFXG8C5zqx37wnOE49mRl/+OtkIKGO7fAE",
- "Expiration": "2020-05-19T18:06:10+00:00"
- }
+ ```json
+ {
+ "Credentials": {
+ "AccessKeyId": "ASIAIOSFODNN7EXAMPLE",
+ "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY",
+ "SessionToken": "AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/LTo6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3zrkuWJOgQs8IZZaIv2BXIa2R4OlgkBN9bkUDNCJiBeb/AXlzBBko7b15fjrBs2+cTQtpZ3CYWFXG8C5zqx37wnOE49mRl/+OtkIKGO7fAE",
+ "Expiration": "2020-05-19T18:06:10+00:00"
}
- ```
+ }
+ ```
+
+
diff --git a/docs/tutorials/aws/boto3-configuration.md b/docs/user-guide/providers/aws/boto3-configuration.mdx
similarity index 97%
rename from docs/tutorials/aws/boto3-configuration.md
rename to docs/user-guide/providers/aws/boto3-configuration.mdx
index 9703695034..69d839025e 100644
--- a/docs/tutorials/aws/boto3-configuration.md
+++ b/docs/user-guide/providers/aws/boto3-configuration.mdx
@@ -1,4 +1,6 @@
-# Boto3 Retrier Configuration in Prowler
+---
+title: "Boto3 Retrier Configuration in Prowler"
+---
Prowler's AWS Provider leverages Boto3's [Standard](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/retries.html) retry mode to automatically retry client calls to AWS services when encountering errors or exceptions.
diff --git a/docs/tutorials/aws/cloudshell.md b/docs/user-guide/providers/aws/cloudshell.mdx
similarity index 77%
rename from docs/tutorials/aws/cloudshell.md
rename to docs/user-guide/providers/aws/cloudshell.mdx
index da72937d1b..7374fb1fbf 100644
--- a/docs/tutorials/aws/cloudshell.md
+++ b/docs/user-guide/providers/aws/cloudshell.mdx
@@ -1,4 +1,6 @@
-# Installing Prowler in AWS CloudShell
+---
+title: 'Installing Prowler in AWS CloudShell'
+---
## Following the migration of AWS CloudShell from Amazon Linux 2 to Amazon Linux 2023
@@ -43,7 +45,9 @@ poetry install
python prowler-cli.py -v
```
-???+ important
- Starting from Poetry v2.0.0, `poetry shell` has been deprecated in favor of `poetry env activate`.
+
+Starting from Poetry v2.0.0, `poetry shell` has been deprecated in favor of `poetry env activate`.
- If your Poetry version is below v2.0.0, continue using `poetry shell` to activate your environment. For further guidance, refer to the Poetry Environment Activation Guide https://python-poetry.org/docs/managing-environments/#activating-the-environment.
+If your Poetry version is below v2.0.0, continue using `poetry shell` to activate your environment. For further guidance, refer to the Poetry Environment Activation Guide https://python-poetry.org/docs/managing-environments/#activating-the-environment.
+
+
diff --git a/docs/tutorials/aws/getting-started-aws.md b/docs/user-guide/providers/aws/getting-started-aws.mdx
similarity index 66%
rename from docs/tutorials/aws/getting-started-aws.md
rename to docs/user-guide/providers/aws/getting-started-aws.mdx
index 10bcd01131..e6cc636a42 100644
--- a/docs/tutorials/aws/getting-started-aws.md
+++ b/docs/user-guide/providers/aws/getting-started-aws.mdx
@@ -1,4 +1,6 @@
-# Getting Started With AWS on Prowler
+---
+title: 'Getting Started With AWS on Prowler'
+---
## Prowler App
@@ -11,31 +13,31 @@
1. Log in to the [AWS Console](https://console.aws.amazon.com)
2. Locate your AWS account ID in the top-right dropdown menu
-
+
### Step 2: Access Prowler Cloud or Prowler App
-1. Navigate to [Prowler Cloud](https://cloud.prowler.com/) or launch [Prowler App](../prowler-app.md)
+1. Navigate to [Prowler Cloud](https://cloud.prowler.com/) or launch [Prowler App](/user-guide/tutorials/prowler-app)
2. Go to "Configuration" > "Cloud Providers"
- 
+ 
3. Click "Add Cloud Provider"
- 
+ 
4. Select "Amazon Web Services"
- 
+ 
5. Enter your AWS Account ID and optionally provide a friendly alias
- 
+ 
6. Choose the preferred authentication method (next step)
- 
+ 
### Step 3: Set Up AWS Authentication
@@ -61,26 +63,26 @@ Before proceeding, choose the preferred authentication mode:
This method grants permanent access and is the recommended setup for production environments.
-
+
-For detailed instructions on how to create the role, see [Authentication > Assume Role](./authentication.md#assume-role-recommended).
+For detailed instructions on how to create the role, see [Authentication > Assume Role](/user-guide/providers/aws/authentication#assume-role-recommended).
8. Once the role is created, go to the **IAM Console**, click on the "ProwlerScan" role to open its details:
- 
+ 
9. Copy the **Role ARN**
- 
+ 
10. Paste the ARN into the corresponding field in Prowler Cloud or Prowler App
- 
+ 
11. Click "Next", then "Launch Scan"
- 
- 
+ 
+ 
---
@@ -88,17 +90,17 @@ For detailed instructions on how to create the role, see [Authentication > Assum
AWS accounts can also be configured using static credentials (not recommended for long-term use):
-
+
-For detailed instructions on how to create the credentials, see [Authentication > Credentials](./authentication.md#credentials).
+For detailed instructions on how to create the credentials, see [Authentication > Credentials](/user-guide/providers/aws/authentication#credentials).
1. Complete the form in Prowler Cloud or Prowler App and click "Next"
- 
+ 
2. Click "Launch Scan"
- 
+ 
---
@@ -122,7 +124,7 @@ export AWS_SESSION_TOKEN="XXXXXXXXX"
These credentials must be associated with a user or role with the necessary permissions to perform security checks.
-More details on Assume Role settings from the CLI in [Assume Role](./role-assumption.md) page.
+More details on Assume Role settings from the CLI in [Assume Role](/user-guide/providers/aws/role-assumption) page.
### AWS Profiles
diff --git a/docs/user-guide/providers/aws/img/add-account-id.png b/docs/user-guide/providers/aws/img/add-account-id.png
new file mode 100644
index 0000000000..bfded597a9
Binary files /dev/null and b/docs/user-guide/providers/aws/img/add-account-id.png differ
diff --git a/docs/user-guide/providers/aws/img/assume-role-overview.png b/docs/user-guide/providers/aws/img/assume-role-overview.png
new file mode 100644
index 0000000000..d99ea0564e
Binary files /dev/null and b/docs/user-guide/providers/aws/img/assume-role-overview.png differ
diff --git a/docs/user-guide/providers/aws/img/aws-account-id.png b/docs/user-guide/providers/aws/img/aws-account-id.png
new file mode 100644
index 0000000000..ea7c96efc4
Binary files /dev/null and b/docs/user-guide/providers/aws/img/aws-account-id.png differ
diff --git a/docs/user-guide/providers/aws/img/aws-cloudshell.png b/docs/user-guide/providers/aws/img/aws-cloudshell.png
new file mode 100644
index 0000000000..91e66c4ed3
Binary files /dev/null and b/docs/user-guide/providers/aws/img/aws-cloudshell.png differ
diff --git a/docs/user-guide/providers/aws/img/cloudformation-nav.png b/docs/user-guide/providers/aws/img/cloudformation-nav.png
new file mode 100644
index 0000000000..3ea375a34c
Binary files /dev/null and b/docs/user-guide/providers/aws/img/cloudformation-nav.png differ
diff --git a/docs/user-guide/providers/aws/img/cloudshell-output.png b/docs/user-guide/providers/aws/img/cloudshell-output.png
new file mode 100644
index 0000000000..85a8493724
Binary files /dev/null and b/docs/user-guide/providers/aws/img/cloudshell-output.png differ
diff --git a/docs/user-guide/providers/aws/img/connect-via-credentials.png b/docs/user-guide/providers/aws/img/connect-via-credentials.png
new file mode 100644
index 0000000000..4e3ba9e7f8
Binary files /dev/null and b/docs/user-guide/providers/aws/img/connect-via-credentials.png differ
diff --git a/docs/user-guide/providers/aws/img/create-stack.png b/docs/user-guide/providers/aws/img/create-stack.png
new file mode 100644
index 0000000000..ab95304bb8
Binary files /dev/null and b/docs/user-guide/providers/aws/img/create-stack.png differ
diff --git a/docs/user-guide/providers/aws/img/download-role-template.png b/docs/user-guide/providers/aws/img/download-role-template.png
new file mode 100644
index 0000000000..755e480ba9
Binary files /dev/null and b/docs/user-guide/providers/aws/img/download-role-template.png differ
diff --git a/docs/user-guide/providers/aws/img/enable-2.png b/docs/user-guide/providers/aws/img/enable-2.png
new file mode 100644
index 0000000000..d5246b689d
Binary files /dev/null and b/docs/user-guide/providers/aws/img/enable-2.png differ
diff --git a/docs/user-guide/providers/aws/img/enable-partner-integration-2.png b/docs/user-guide/providers/aws/img/enable-partner-integration-2.png
new file mode 100644
index 0000000000..1bda7a0304
Binary files /dev/null and b/docs/user-guide/providers/aws/img/enable-partner-integration-2.png differ
diff --git a/docs/user-guide/providers/aws/img/enable-partner-integration-3.png b/docs/user-guide/providers/aws/img/enable-partner-integration-3.png
new file mode 100644
index 0000000000..3cc7c4ed8e
Binary files /dev/null and b/docs/user-guide/providers/aws/img/enable-partner-integration-3.png differ
diff --git a/docs/user-guide/providers/aws/img/enable-partner-integration-4.png b/docs/user-guide/providers/aws/img/enable-partner-integration-4.png
new file mode 100644
index 0000000000..e94dce8bbc
Binary files /dev/null and b/docs/user-guide/providers/aws/img/enable-partner-integration-4.png differ
diff --git a/docs/user-guide/providers/aws/img/enable-partner-integration.png b/docs/user-guide/providers/aws/img/enable-partner-integration.png
new file mode 100644
index 0000000000..415a873599
Binary files /dev/null and b/docs/user-guide/providers/aws/img/enable-partner-integration.png differ
diff --git a/docs/user-guide/providers/aws/img/enable.png b/docs/user-guide/providers/aws/img/enable.png
new file mode 100644
index 0000000000..4065ef8f3e
Binary files /dev/null and b/docs/user-guide/providers/aws/img/enable.png differ
diff --git a/docs/user-guide/providers/aws/img/fill-stack-data.png b/docs/user-guide/providers/aws/img/fill-stack-data.png
new file mode 100644
index 0000000000..7c7214f0be
Binary files /dev/null and b/docs/user-guide/providers/aws/img/fill-stack-data.png differ
diff --git a/docs/user-guide/providers/aws/img/finding-details.png b/docs/user-guide/providers/aws/img/finding-details.png
new file mode 100644
index 0000000000..34515e5637
Binary files /dev/null and b/docs/user-guide/providers/aws/img/finding-details.png differ
diff --git a/docs/user-guide/providers/aws/img/findings.png b/docs/user-guide/providers/aws/img/findings.png
new file mode 100644
index 0000000000..88c506b28a
Binary files /dev/null and b/docs/user-guide/providers/aws/img/findings.png differ
diff --git a/docs/user-guide/providers/aws/img/get-external-id-prowler-cloud.png b/docs/user-guide/providers/aws/img/get-external-id-prowler-cloud.png
new file mode 100644
index 0000000000..720557a06e
Binary files /dev/null and b/docs/user-guide/providers/aws/img/get-external-id-prowler-cloud.png differ
diff --git a/docs/user-guide/providers/aws/img/get-role-arn.png b/docs/user-guide/providers/aws/img/get-role-arn.png
new file mode 100644
index 0000000000..1add60580a
Binary files /dev/null and b/docs/user-guide/providers/aws/img/get-role-arn.png differ
diff --git a/docs/user-guide/providers/aws/img/launch-scan-button-prowler-cloud.png b/docs/user-guide/providers/aws/img/launch-scan-button-prowler-cloud.png
new file mode 100644
index 0000000000..06b7e37a85
Binary files /dev/null and b/docs/user-guide/providers/aws/img/launch-scan-button-prowler-cloud.png differ
diff --git a/docs/user-guide/providers/aws/img/next-button-prowler-cloud.png b/docs/user-guide/providers/aws/img/next-button-prowler-cloud.png
new file mode 100644
index 0000000000..f41437c17e
Binary files /dev/null and b/docs/user-guide/providers/aws/img/next-button-prowler-cloud.png differ
diff --git a/docs/user-guide/providers/aws/img/next-cloudformation-template.png b/docs/user-guide/providers/aws/img/next-cloudformation-template.png
new file mode 100644
index 0000000000..1f646f90b8
Binary files /dev/null and b/docs/user-guide/providers/aws/img/next-cloudformation-template.png differ
diff --git a/docs/user-guide/providers/aws/img/paste-role-arn-prowler.png b/docs/user-guide/providers/aws/img/paste-role-arn-prowler.png
new file mode 100644
index 0000000000..82d7165334
Binary files /dev/null and b/docs/user-guide/providers/aws/img/paste-role-arn-prowler.png differ
diff --git a/docs/user-guide/providers/aws/img/prowler-cloud-credentials-next.png b/docs/user-guide/providers/aws/img/prowler-cloud-credentials-next.png
new file mode 100644
index 0000000000..0f73b00905
Binary files /dev/null and b/docs/user-guide/providers/aws/img/prowler-cloud-credentials-next.png differ
diff --git a/docs/user-guide/providers/aws/img/prowler-cloud-external-id.png b/docs/user-guide/providers/aws/img/prowler-cloud-external-id.png
new file mode 100644
index 0000000000..79fb1b19e3
Binary files /dev/null and b/docs/user-guide/providers/aws/img/prowler-cloud-external-id.png differ
diff --git a/docs/user-guide/providers/aws/img/prowler-scan-pre-info.png b/docs/user-guide/providers/aws/img/prowler-scan-pre-info.png
new file mode 100644
index 0000000000..950a45f3c1
Binary files /dev/null and b/docs/user-guide/providers/aws/img/prowler-scan-pre-info.png differ
diff --git a/docs/user-guide/providers/aws/img/prowler-scan-role-template.png b/docs/user-guide/providers/aws/img/prowler-scan-role-template.png
new file mode 100644
index 0000000000..34847eb2d7
Binary files /dev/null and b/docs/user-guide/providers/aws/img/prowler-scan-role-template.png differ
diff --git a/docs/tutorials/aws/img/select-auth-method.png b/docs/user-guide/providers/aws/img/select-auth-method.png
similarity index 100%
rename from docs/tutorials/aws/img/select-auth-method.png
rename to docs/user-guide/providers/aws/img/select-auth-method.png
diff --git a/docs/user-guide/providers/aws/img/select-aws.png b/docs/user-guide/providers/aws/img/select-aws.png
new file mode 100644
index 0000000000..f7d08ae628
Binary files /dev/null and b/docs/user-guide/providers/aws/img/select-aws.png differ
diff --git a/docs/user-guide/providers/aws/img/stack-creation-second-step.png b/docs/user-guide/providers/aws/img/stack-creation-second-step.png
new file mode 100644
index 0000000000..fb4c6a27b0
Binary files /dev/null and b/docs/user-guide/providers/aws/img/stack-creation-second-step.png differ
diff --git a/docs/user-guide/providers/aws/img/submit-third-page.png b/docs/user-guide/providers/aws/img/submit-third-page.png
new file mode 100644
index 0000000000..7bbb1db8b8
Binary files /dev/null and b/docs/user-guide/providers/aws/img/submit-third-page.png differ
diff --git a/docs/user-guide/providers/aws/img/upload-template-file.png b/docs/user-guide/providers/aws/img/upload-template-file.png
new file mode 100644
index 0000000000..6455cee381
Binary files /dev/null and b/docs/user-guide/providers/aws/img/upload-template-file.png differ
diff --git a/docs/user-guide/providers/aws/img/upload-template-from-downloads.png b/docs/user-guide/providers/aws/img/upload-template-from-downloads.png
new file mode 100644
index 0000000000..3d9bbc6716
Binary files /dev/null and b/docs/user-guide/providers/aws/img/upload-template-from-downloads.png differ
diff --git a/docs/tutorials/aws/multiaccount.md b/docs/user-guide/providers/aws/multiaccount.mdx
similarity index 86%
rename from docs/tutorials/aws/multiaccount.md
rename to docs/user-guide/providers/aws/multiaccount.mdx
index 8d5a1e6023..29c6b8da9c 100644
--- a/docs/tutorials/aws/multiaccount.md
+++ b/docs/user-guide/providers/aws/multiaccount.mdx
@@ -1,6 +1,8 @@
-# Scanning Multiple AWS Accounts with Prowler
+---
+title: 'Scanning Multiple AWS Accounts with Prowler'
+---
-Prowler enables security scanning across multiple AWS accounts by utilizing the [Assume Role feature](role-assumption.md) and [integration with AWS Organizations feature](organizations.md).
+Prowler enables security scanning across multiple AWS accounts by utilizing the [Assume Role feature](/user-guide/providers/aws/role-assumption) and [integration with AWS Organizations feature](/user-guide/providers/aws/organizations).
This approach allows execution from a single account with permissions to assume roles in the target accounts.
@@ -64,7 +66,7 @@ ACCOUNTS_IN_ORG=$(aws organizations list-accounts --query Accounts[?Status==`ACT
- Step 2: Run Prowler with Assumed Roles
-Use Prowler to assume roles across accounts in parallel. Modify to match the role that exists in all accounts and to your AWS Organizations Management account ID.
+Use Prowler to assume roles across accounts in parallel. Modify `` to match the role that exists in all accounts and `` to your AWS Organizations Management account ID.
```
ROLE_TO_ASSUME=
diff --git a/docs/tutorials/aws/organizations.md b/docs/user-guide/providers/aws/organizations.mdx
similarity index 84%
rename from docs/tutorials/aws/organizations.md
rename to docs/user-guide/providers/aws/organizations.mdx
index 4a5b9a50ae..54be28c171 100644
--- a/docs/tutorials/aws/organizations.md
+++ b/docs/user-guide/providers/aws/organizations.mdx
@@ -1,4 +1,6 @@
-# AWS Organizations in Prowler
+---
+title: 'AWS Organizations in Prowler'
+---
Prowler can integrate with AWS Organizations to manage the visibility and onboarding of accounts centrally.
@@ -24,9 +26,10 @@ These details will be included alongside each security finding in the output.
To retrieve AWS Organizations account details, use the `-O`/`--organizations-role ` argument. If this argument is not provided, Prowler will attempt to fetch the data automatically—provided the AWS account is a delegated administrator for the AWS Organization.
-???+ note
- For more information on AWS Organizations delegated administrator, refer to the official documentation [here](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_delegate_policies.html).
+
+For more information on AWS Organizations delegated administrator, refer to the official documentation [here](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_delegate_policies.html).
+
The following command is an example:
```shell
@@ -34,9 +37,10 @@ prowler aws \
-O arn:aws:iam:::role/
```
-???+ note
- Ensure the IAM role used in your AWS Organizations management account has the following permissions:`organizations:DescribeAccount` and `organizations:ListTagsForResource`.
+
+Ensure the IAM role used in your AWS Organizations management account has the following permissions:`organizations:DescribeAccount` and `organizations:ListTagsForResource`.
+
Prowler will scan the AWS account and get the account details from AWS Organizations.
### Handling JSON Output
@@ -72,11 +76,12 @@ When using Infrastructure as Code (IaC), Terraform is recommended to manage this
- **Use the official CloudFormation template** provided by Prowler.
- Target specific Organizational Units (OUs) or the entire Organization.
-???+ note
- A detailed community article this implementation is based on is available here:
- [Deploy IAM Roles Across an AWS Organization as Code (Unicrons)](https://unicrons.cloud/en/2024/10/14/deploy-iam-roles-across-an-aws-organization-as-code/)
- This guide has been adapted with permission and aligned with Prowler’s IAM role requirements.
+
+A detailed community article this implementation is based on is available here:
+[Deploy IAM Roles Across an AWS Organization as Code (Unicrons)](https://unicrons.cloud/en/2024/10/14/deploy-iam-roles-across-an-aws-organization-as-code/)
+This guide has been adapted with permission and aligned with Prowler’s IAM role requirements.
+
---
### Step-by-Step Guide Using Terraform
@@ -144,5 +149,7 @@ When encountering issues during deployment or needing to target specific OUs or
done
```
-???+ note
- This same loop structure can be adapted to scan a predefined list of accounts using a variable like the following: `ACCOUNTS_LIST='11111111111 2222222222 333333333'`
+
+This same loop structure can be adapted to scan a predefined list of accounts using a variable like the following: `ACCOUNTS_LIST='11111111111 2222222222 333333333'`
+
+
diff --git a/docs/tutorials/aws/regions-and-partitions.md b/docs/user-guide/providers/aws/regions-and-partitions.mdx
similarity index 79%
rename from docs/tutorials/aws/regions-and-partitions.md
rename to docs/user-guide/providers/aws/regions-and-partitions.mdx
index 89c0dd3eb2..2676a02ef2 100644
--- a/docs/tutorials/aws/regions-and-partitions.md
+++ b/docs/user-guide/providers/aws/regions-and-partitions.mdx
@@ -1,4 +1,6 @@
-# AWS Regions and Partitions
+---
+title: 'AWS Regions and Partitions'
+---
By default Prowler is able to scan the following AWS partitions:
@@ -6,9 +8,10 @@ By default Prowler is able to scan the following AWS partitions:
- China: `aws-cn`
- GovCloud (US): `aws-us-gov`
-???+ note
- To check the available regions for each partition and service, refer to: [aws\_regions\_by\_service.json](https://github.com/prowler-cloud/prowler/blob/master/prowler/providers/aws/aws_regions_by_service.json)
+
+To check the available regions for each partition and service, refer to: [aws\_regions\_by\_service.json](https://github.com/prowler-cloud/prowler/blob/master/prowler/providers/aws/aws_regions_by_service.json)
+
## Scanning AWS China and GovCloud Partitions in Prowler
When scanning the China (`aws-cn`) or GovCloud (`aws-us-gov`), ensure one of the following:
@@ -17,9 +20,10 @@ When scanning the China (`aws-cn`) or GovCloud (`aws-us-gov`), ensure one of the
- Specify the regions to audit within that partition using the `-f/--region` flag.
-???+ note
- Refer to: https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html#configuring-credentials for more information about the AWS credential configuration.
+
+Refer to: https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html#configuring-credentials for more information about the AWS credential configuration.
+
### Scanning Specific Regions
To scan a particular AWS region with Prowler, use:
@@ -53,9 +57,10 @@ To scan an account in the AWS China partition (`aws-cn`):
region = cn-north-1
```
-???+ note
- With this configuration, all partition regions will be scanned without needing the `-f/--region` flag
+
+With this configuration, all partition regions will be scanned without needing the `-f/--region` flag
+
### AWS GovCloud (US)
To scan an account in the AWS GovCloud (US) partition (`aws-us-gov`):
@@ -75,9 +80,10 @@ To scan an account in the AWS GovCloud (US) partition (`aws-us-gov`):
region = us-gov-east-1
```
-???+ note
- With this configuration, all partition regions will be scanned without needing the `-f/--region` flag
+
+With this configuration, all partition regions will be scanned without needing the `-f/--region` flag
+
### AWS ISO (US \& Europe)
The AWS ISO partitions—commonly referred to as "secret partitions"—are air-gapped from the Internet, and Prowler does not have a built-in way to scan them. To audit an AWS ISO partition, manually update [aws\_regions\_by\_service.json](https://github.com/prowler-cloud/prowler/blob/master/prowler/providers/aws/aws_regions_by_service.json) to include the partition, region, and services. For example:
diff --git a/docs/tutorials/aws/resource-arn-based-scan.md b/docs/user-guide/providers/aws/resource-arn-based-scan.mdx
similarity index 93%
rename from docs/tutorials/aws/resource-arn-based-scan.md
rename to docs/user-guide/providers/aws/resource-arn-based-scan.mdx
index 648d60898b..6969242561 100644
--- a/docs/tutorials/aws/resource-arn-based-scan.md
+++ b/docs/user-guide/providers/aws/resource-arn-based-scan.mdx
@@ -1,4 +1,6 @@
-# Resource ARN-based Scanning
+---
+title: 'Resource ARN-based Scanning'
+---
Prowler enables scanning of resources based on specific AWS Resource ARNs.
diff --git a/docs/tutorials/aws/role-assumption.md b/docs/user-guide/providers/aws/role-assumption.mdx
similarity index 74%
rename from docs/tutorials/aws/role-assumption.md
rename to docs/user-guide/providers/aws/role-assumption.mdx
index 17fb3c2727..3a2461b50b 100644
--- a/docs/tutorials/aws/role-assumption.md
+++ b/docs/user-guide/providers/aws/role-assumption.mdx
@@ -1,4 +1,6 @@
-# AWS Assume Role in Prowler (CLI)
+---
+title: 'AWS Assume Role in Prowler (CLI)'
+---
## Authentication Overview
@@ -54,9 +56,10 @@ Prowler allows you to specify a custom Role Session name using the following fla
prowler aws --role-session-name
```
-???+ note
- If not specified, it defaults to `ProwlerAssessmentSession`.
+
+If not specified, it defaults to `ProwlerAssessmentSession`.
+
## Role MFA Authentication
If your IAM Role is configured with Multi-Factor Authentication (MFA), use `--mfa` along with `-R`/`--role `. Prowler will prompt you to input the following values to obtain a temporary session for the IAM Role provided:
@@ -68,7 +71,9 @@ If your IAM Role is configured with Multi-Factor Authentication (MFA), use `--mf
To create an IAM role that can be assumed in one or multiple AWS accounts, use either a CloudFormation Stack or StackSet and adapt the provided [template](https://github.com/prowler-cloud/prowler/blob/master/permissions/create_role_to_assume_cfn.yaml).
-???+ note
- **Session Duration Considerations**: Depending on the number of checks performed and the size of your infrastructure, Prowler may require more than 1 hour to complete. Use the `-T ` option to allow up to 12 hours (43,200 seconds). If you need more than 1 hour, modify the _“Maximum CLI/API session duration”_ setting for the role. Learn more [here](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session).
+
+**Session Duration Considerations**: Depending on the number of checks performed and the size of your infrastructure, Prowler may require more than 1 hour to complete. Use the `-T ` option to allow up to 12 hours (43,200 seconds). If you need more than 1 hour, modify the _“Maximum CLI/API session duration”_ setting for the role. Learn more [here](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session).
- ⚠️ Important: If assuming roles via role chaining, there is a hard limit of 1 hour. Whenever possible, avoid role chaining to prevent session expiration issues. More details are available in footnote 1 below the table in the [AWS IAM guide](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html).
+⚠️ Important: If assuming roles via role chaining, there is a hard limit of 1 hour. Whenever possible, avoid role chaining to prevent session expiration issues. More details are available in footnote 1 below the table in the [AWS IAM guide](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html).
+
+
diff --git a/docs/tutorials/aws/s3.md b/docs/user-guide/providers/aws/s3.mdx
similarity index 60%
rename from docs/tutorials/aws/s3.md
rename to docs/user-guide/providers/aws/s3.mdx
index 54b0f5f11c..ef559a7118 100644
--- a/docs/tutorials/aws/s3.md
+++ b/docs/user-guide/providers/aws/s3.mdx
@@ -1,4 +1,6 @@
-# Sending Reports to an AWS S3 Bucket
+---
+title: 'Sending Reports to an AWS S3 Bucket'
+---
To save reports directly in an S3 bucket, use: `-B`/`--output-bucket`.
@@ -25,8 +27,11 @@ By default, Prowler sends HTML, JSON, and CSV output formats. To specify a singl
prowler aws -M csv -B my-bucket
```
-???+ note
- If you prefer using the initial credentials instead of the assumed role credentials for uploading reports, use `-D`/`--output-bucket-no-assume` instead of `-B`/`--output-bucket`.
+
+If you prefer using the initial credentials instead of the assumed role credentials for uploading reports, use `-D`/`--output-bucket-no-assume` instead of `-B`/`--output-bucket`.
-???+ warning
- Ensure the credentials used have write permissions for the `s3:PutObject` where reports will be uploaded.
+
+
+Ensure the credentials used have write permissions for the `s3:PutObject` where reports will be uploaded.
+
+
diff --git a/docs/tutorials/aws/securityhub.md b/docs/user-guide/providers/aws/securityhub.mdx
similarity index 67%
rename from docs/tutorials/aws/securityhub.md
rename to docs/user-guide/providers/aws/securityhub.mdx
index 050896763b..62959592af 100644
--- a/docs/tutorials/aws/securityhub.md
+++ b/docs/user-guide/providers/aws/securityhub.mdx
@@ -1,4 +1,6 @@
-# AWS Security Hub Integration with Prowler
+---
+title: 'AWS Security Hub Integration with Prowler'
+---
Prowler natively supports **official integration** with [AWS Security Hub](https://aws.amazon.com/security-hub), allowing security findings to be sent directly. This integration enables **Prowler** to import its findings into AWS Security Hub.
@@ -14,9 +16,10 @@ Since **AWS Security Hub** is a region-based service, it must be activated in ea
AWS Security Hub can be enabled using either of the following methods:
-???+ note
- Enabling this integration incurs costs in AWS Security Hub. Refer to [this information](https://aws.amazon.com/security-hub/pricing/) for details.
+
+Enabling this integration incurs costs in AWS Security Hub. Refer to [this information](https://aws.amazon.com/security-hub/pricing/) for details.
+
### Using the AWS Management Console
#### Enabling AWS Security Hub for Prowler Integration
@@ -25,11 +28,11 @@ If AWS Security Hub is already enabled, you can proceed to the [next section](#e
1. Enable AWS Security Hub via Console: Open the **AWS Security Hub** console: https://console.aws.amazon.com/securityhub/.
-2. Ensure you are in the correct AWS region, then select “**Go to Security Hub**”. 
+2. Ensure you are in the correct AWS region, then select “**Go to Security Hub**”. 
3. In the “Security Standards” section, review the supported security standards. Select the checkbox for each standard you want to enable, or clear it to disable a standard.
-4. Choose “**Enable Security Hub**”. 
+4. Choose “**Enable Security Hub**”. 
#### Enabling Prowler Integration in AWS Security Hub
@@ -40,15 +43,15 @@ Once **AWS Security Hub** is activated, **Prowler** must be enabled as partner i
1. Enabling AWS Security Hub via Console
Open the **AWS Security Hub** console: https://console.aws.amazon.com/securityhub/.
-2. Select the “**Integrations**” tab from the right-side menu bar. 
+2. Select the “**Integrations**” tab from the right-side menu bar. 
3. Search for “_Prowler_” in the text search box and the **Prowler** integration will appear.
-4. Click “**Accept Findings**” to authorize **AWS Security Hub** to receive findings from **Prowler**. 
+4. Click “**Accept Findings**” to authorize **AWS Security Hub** to receive findings from **Prowler**. 
-5. A new modal will appear to confirm that the integration with **Prowler** is being enabled. 
+5. A new modal will appear to confirm that the integration with **Prowler** is being enabled. 
-6. Click “**Accept Findings**”, to authorize **AWS Security Hub** to receive findings from Prowler. 
+6. Click “**Accept Findings**”, to authorize **AWS Security Hub** to receive findings from Prowler. 
### Using AWS CLI
@@ -62,9 +65,10 @@ Run the following command to activate AWS Security Hub in the desired region:
aws securityhub enable-security-hub --region
```
-???+ note
- This command requires the `securityhub:EnableSecurityHub` permission. Ensure you set the correct AWS region where you want to enable AWS Security Hub.
+
+This command requires the `securityhub:EnableSecurityHub` permission. Ensure you set the correct AWS region where you want to enable AWS Security Hub.
+
**Step 2: Enable Prowler Integration**
Once **AWS Security Hub** is activated, **Prowler** must be enabled as partner integration to allow security findings to be sent to it. Run the following AWS CLI commands:
@@ -73,9 +77,10 @@ Once **AWS Security Hub** is activated, **Prowler** must be enabled as partner i
aws securityhub enable-import-findings-for-product --region eu-west-1 --product-arn arn:aws:securityhub:::product/prowler/prowler
```
-???+ note
- Specify the AWS region where you want to enable the integration. Ensure the region is correctly set within the ARN value. This command requires the`securityhub:securityhub:EnableImportFindingsForProduct` permission.
+
+Specify the AWS region where you want to enable the integration. Ensure the region is correctly set within the ARN value. This command requires the`securityhub:securityhub:EnableImportFindingsForProduct` permission.
+
## Sending Findings to AWS Security Hub
Once AWS Security Hub is enabled, findings can be sent using the following commands:
@@ -92,13 +97,14 @@ For a specific region (e.g., eu-west-1):
prowler --security-hub --region eu-west-1
```
-???+ note
- It is recommended to send only fails to Security Hub and that is possible adding `--status FAIL` to the command. You can use, instead of the `--status FAIL` argument, the `--send-sh-only-fails` argument to save all the findings in the Prowler outputs but just to send FAIL findings to AWS Security Hub.
+
+It is recommended to send only fails to Security Hub and that is possible adding `--status FAIL` to the command. You can use, instead of the `--status FAIL` argument, the `--send-sh-only-fails` argument to save all the findings in the Prowler outputs but just to send FAIL findings to AWS Security Hub.
- Since Prowler perform checks to all regions by default you may need to filter by region when running Security Hub integration, as shown in the example above. Remember to enable Security Hub in the region or regions you need by calling `aws securityhub enable-security-hub --region ` and run Prowler with the option `-f/--region ` (if no region is used it will try to push findings in all regions hubs). Prowler will send findings to the Security Hub on the region where the scanned resource is located.
+Since Prowler perform checks to all regions by default you may need to filter by region when running Security Hub integration, as shown in the example above. Remember to enable Security Hub in the region or regions you need by calling `aws securityhub enable-security-hub --region ` and run Prowler with the option `-f/--region ` (if no region is used it will try to push findings in all regions hubs). Prowler will send findings to the Security Hub on the region where the scanned resource is located.
- To have updated findings in Security Hub you have to run Prowler periodically. Once a day or every certain amount of hours.
+To have updated findings in Security Hub you have to run Prowler periodically. Once a day or every certain amount of hours.
+
### Viewing Prowler Findings in AWS Security Hub
After enabling **AWS Security Hub**, findings from **Prowler** will be available in the configured AWS regions. Reviewing Prowler Findings in **AWS Security Hub**:
@@ -107,11 +113,11 @@ After enabling **AWS Security Hub**, findings from **Prowler** will be available
Open the **AWS Security Hub** console: https://console.aws.amazon.com/securityhub/.
-2. Select the “**Findings**” tab from the right-side menu bar. 
+2. Select the “**Findings**” tab from the right-side menu bar. 
3. Use the search box filters and apply the “**Product Name**” filter with the value _Prowler_ to display findings sent by **Prowler**.
-4. Click the check “**Title**” to access its detailed view, including its history and status. 
+4. Click the check “**Title**” to access its detailed view, including its history and status. 
#### Compliance Information
@@ -131,9 +137,10 @@ To send findings to Security Hub, use the `-R` flag in the Prowler command:
prowler --security-hub --role arn:aws:iam::123456789012:role/ProwlerExecutionRole
```
-???+ note
- The specified IAM role must have the necessary permissions to send findings to Security Hub. For details on the required permissions, refer to the IAM policy: [prowler-additions-policy.json](https://github.com/prowler-cloud/prowler/blob/master/permissions/prowler-additions-policy.json)
+
+The specified IAM role must have the necessary permissions to send findings to Security Hub. For details on the required permissions, refer to the IAM policy: [prowler-additions-policy.json](https://github.com/prowler-cloud/prowler/blob/master/permissions/prowler-additions-policy.json)
+
## Sending Only Failed Findings to AWS Security Hub
When using **AWS Security Hub** integration, **Prowler** allows sending only failed findings (`FAIL`), helping reduce **AWS Security Hub** usage costs. To enable this, add the `--status FAIL` flag to the Prowler command:
diff --git a/docs/tutorials/aws/tag-based-scan.md b/docs/user-guide/providers/aws/tag-based-scan.mdx
similarity index 91%
rename from docs/tutorials/aws/tag-based-scan.md
rename to docs/user-guide/providers/aws/tag-based-scan.mdx
index 365c5ad13c..4f0e9a11fb 100644
--- a/docs/tutorials/aws/tag-based-scan.md
+++ b/docs/user-guide/providers/aws/tag-based-scan.mdx
@@ -1,4 +1,6 @@
-# Tag-based scan
+---
+title: 'Tag-based scan'
+---
Prowler provides the capability to scan only resources containing specific tags. To execute this, use the designated flag `--resource-tags` followed by the tags `Key=Value`, separated by spaces.
diff --git a/docs/tutorials/aws/threat-detection.md b/docs/user-guide/providers/aws/threat-detection.mdx
similarity index 91%
rename from docs/tutorials/aws/threat-detection.md
rename to docs/user-guide/providers/aws/threat-detection.mdx
index e26df45890..0d69d87940 100644
--- a/docs/tutorials/aws/threat-detection.md
+++ b/docs/user-guide/providers/aws/threat-detection.mdx
@@ -1,4 +1,6 @@
-# Threat Detection in AWS with Prowler
+---
+title: 'Threat Detection in AWS with Prowler'
+---
Prowler enables threat detection in AWS by analyzing CloudTrail log records. To execute threat detection checks, use the following command:
@@ -12,9 +14,10 @@ This command runs checks to detect:
* `cloudtrail_threat_detection_enumeration`: Enumeration attacks
* `cloudtrail_threat_detection_llm_jacking`: LLM Jacking attacks
-???+ note
- Threat detection checks are executed only when the `--category threat-detection` flag is used, due to performance considerations.
+
+Threat detection checks are executed only when the `--category threat-detection` flag is used, due to performance considerations.
+
## Config File for Threat Detection
To manage the behavior of threat detection checks, edit the configuration file located in `config.yaml` file from `/prowler/config`. The following attributes can be modified, all related to threat detection:
diff --git a/docs/user-guide/providers/aws/v2_to_v3_checks_mapping.mdx b/docs/user-guide/providers/aws/v2_to_v3_checks_mapping.mdx
new file mode 100644
index 0000000000..8937465cf7
--- /dev/null
+++ b/docs/user-guide/providers/aws/v2_to_v3_checks_mapping.mdx
@@ -0,0 +1,258 @@
+---
+title: 'Check Mapping Prowler v4/v3 to v2'
+---
+
+Prowler v3 and v4 introduce distinct identifiers while preserving the checks originally implemented in v2. This change was made because, in previous versions, check names were primarily derived from the CIS Benchmark for AWS. Starting with v3 and v4, all checks are independent of any security framework and have unique names and IDs.
+
+For more details on the updated compliance implementation in Prowler v4 and v3, refer to the [Compliance](/user-guide/cli/tutorials/compliance) section.
+
+```
+checks_v4_v3_to_v2_mapping = {
+ "accessanalyzer_enabled_without_findings": "extra769",
+ "account_maintain_current_contact_details": "check117",
+ "account_security_contact_information_is_registered": "check118",
+ "account_security_questions_are_registered_in_the_aws_account": "check115",
+ "acm_certificates_expiration_check": "extra730",
+ "acm_certificates_transparency_logs_enabled": "extra724",
+ "apigateway_restapi_authorizers_enabled": "extra746",
+ "apigateway_restapi_client_certificate_enabled": "extra743",
+ "apigateway_restapi_public": "extra745",
+ "apigateway_restapi_logging_enabled": "extra722",
+ "apigateway_restapi_waf_acl_attached": "extra744",
+ “apigatewayv2_api_access_logging_enabled": "extra7156",
+ "apigatewayv2_api_authorizers_enabled": "extra7157",
+ "appstream_fleet_default_internet_access_disabled": "extra7193",
+ "appstream_fleet_maximum_session_duration": "extra7190",
+ "appstream_fleet_session_disconnect_timeout": "extra7191",
+ "appstream_fleet_session_idle_disconnect_timeout": "extra7192",
+ "autoscaling_find_secrets_ec2_launch_configuration": "extra775",
+ "awslambda_function_invoke_api_operations_cloudtrail_logging_enabled": "extra720",
+ "awslambda_function_no_secrets_in_code": "extra760",
+ "awslambda_function_no_secrets_in_variables": "extra759",
+ "awslambda_function_not_publicly_accessible": "extra798",
+ "awslambda_function_url_cors_policy": "extra7180",
+ "awslambda_function_url_public": "extra7179",
+ "awslambda_function_using_supported_runtimes": "extra762",
+ "cloudformation_stack_outputs_find_secrets": "extra742",
+ "cloudformation_stacks_termination_protection_enabled": "extra7154",
+ "cloudfront_distributions_field_level_encryption_enabled": "extra767",
+ "cloudfront_distributions_geo_restrictions_enabled": "extra732",
+ "cloudfront_distributions_https_enabled": "extra738",
+ "cloudfront_distributions_logging_enabled": "extra714",
+ "cloudfront_distributions_using_deprecated_ssl_protocols": "extra791",
+ "cloudfront_distributions_using_waf": "extra773",
+ "cloudtrail_cloudwatch_logging_enabled": "check24",
+ "cloudtrail_kms_encryption_enabled": "check27",
+ "cloudtrail_log_file_validation_enabled": "check22",
+ "cloudtrail_logs_s3_bucket_access_logging_enabled": "check26",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible": "check23",
+ "cloudtrail_multi_region_enabled": "check21",
+ "cloudtrail_s3_dataevents_read_enabled": "extra7196",
+ "cloudtrail_s3_dataevents_write_enabled": "extra725",
+ "cloudwatch_changes_to_network_acls_alarm_configured": "check311",
+ "cloudwatch_changes_to_network_gateways_alarm_configured": "check312",
+ "cloudwatch_changes_to_network_route_tables_alarm_configured": "check313",
+ "cloudwatch_changes_to_vpcs_alarm_configured": "check314",
+ "cloudwatch_cross_account_sharing_disabled": "extra7144",
+ "cloudwatch_log_group_kms_encryption_enabled": "extra7164",
+ "cloudwatch_log_group_retention_policy_specific_days_enabled": "extra7162",
+ "cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled": "check39",
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled": "check35",
+ "cloudwatch_log_metric_filter_authentication_failures": "check36",
+ "cloudwatch_log_metric_filter_aws_organizations_changes": "extra7197",
+ "cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk": "check37",
+ "cloudwatch_log_metric_filter_for_s3_bucket_policy_changes": "check38",
+ "cloudwatch_log_metric_filter_policy_changes": "check34",
+ "cloudwatch_log_metric_filter_root_usage": "check33",
+ "cloudwatch_log_metric_filter_security_group_changes": "check310",
+ "cloudwatch_log_metric_filter_sign_in_without_mfa": "check32",
+ "cloudwatch_log_metric_filter_unauthorized_api_calls": "check31",
+ "codeartifact_packages_external_public_publishing_disabled": "extra7195",
+ "codebuild_project_older_90_days": "extra7174",
+ "codebuild_project_user_controlled_buildspec": "extra7175",
+ "config_recorder_all_regions_enabled": "check25",
+ "directoryservice_directory_log_forwarding_enabled": "extra7181",
+ "directoryservice_directory_monitor_notifications": "extra7182",
+ "directoryservice_directory_snapshots_limit": "extra7184",
+ "directoryservice_ldap_certificate_expiration": "extra7183",
+ "directoryservice_radius_server_security_protocol": "extra7188",
+ "directoryservice_supported_mfa_radius_enabled": "extra7189",
+ "dynamodb_accelerator_cluster_encryption_enabled": "extra7165",
+ "dynamodb_tables_kms_cmk_encryption_enabled": "extra7128",
+ "dynamodb_tables_pitr_enabled": "extra7151",
+ "ec2_ami_public": "extra76",
+ "ec2_ebs_default_encryption": "extra761",
+ "ec2_ebs_public_snapshot": "extra72",
+ "ec2_ebs_snapshots_encrypted": "extra740",
+ "ec2_ebs_volume_encryption": "extra729",
+ "ec2_elastic_ip_shodan": "extra7102",
+ "ec2_elastic_ip_unassigned": "extra7146",
+ "ec2_instance_imdsv2_enabled": "extra786",
+ "ec2_instance_internet_facing_with_instance_profile": "extra770",
+ "ec2_instance_managed_by_ssm": "extra7124",
+ "ec2_instance_older_than_specific_days": "extra758",
+ "ec2_instance_profile_attached": "check119",
+ "ec2_instance_public_ip": "extra710",
+ "ec2_instance_secrets_user_data": "extra741",
+ "ec2_networkacl_allow_ingress_any_port": "extra7138",
+ "ec2_networkacl_allow_ingress_tcp_port_22": "check45",
+ "ec2_networkacl_allow_ingress_tcp_port_3389": "check46",
+ "ec2_securitygroup_allow_ingress_from_internet_to_all_ports": "extra748",
+ "ec2_securitygroup_allow_ingress_from_internet_to_any_port": "extra74",
+ "ec2_securitygroup_allow_ingress_from_internet_to_port_mongodb_27017_27018": "extra753",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_ftp_port_20_21": "extra7134",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22": "check41",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_3389": "check42",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_cassandra_7199_9160_8888": "extra754",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_elasticsearch_kibana_9200_9300_5601": "extra779",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_kafka_9092": "extra7135",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_memcached_11211": "extra755",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_mysql_3306": "extra750",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_oracle_1521_2483": "extra749",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_postgres_5432": "extra751",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_redis_6379": "extra752",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_sql_server_1433_1434": "extra7137",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_telnet_23": "extra7136",
+ "ec2_securitygroup_allow_wide_open_public_ipv4": "extra778",
+ "ec2_securitygroup_default_restrict_traffic": "check43",
+ "ec2_securitygroup_from_launch_wizard": "extra7173",
+ "ec2_securitygroup_not_used": "extra75",
+ "ec2_securitygroup_with_many_ingress_egress_rules": "extra777",
+ "ecr_repositories_lifecycle_policy_enabled": "extra7194",
+ "ecr_repositories_not_publicly_accessible": "extra77",
+ "ecr_repositories_scan_images_on_push_enabled": "extra765",
+ "ecr_repositories_scan_vulnerabilities_in_latest_image": "extra776",
+ "ecs_task_definitions_no_environment_secrets": "extra768",
+ "efs_encryption_at_rest_enabled": "extra7161",
+ "efs_have_backup_enabled": "extra7148",
+ "efs_not_publicly_accessible": "extra7143",
+ "eks_cluster_kms_cmk_encryption_in_secrets_enabled": "extra797",
+ "eks_control_plane_endpoint_access_restricted": "extra796",
+ "eks_control_plane_logging_all_types_enabled": "extra794",
+ "eks_endpoints_not_publicly_accessible": "extra795",
+ "elb_insecure_ssl_ciphers": "extra792",
+ "elb_internet_facing": "extra79",
+ "elb_logging_enabled": "extra717",
+ "elb_ssl_listeners": "extra793",
+ "elbv2_deletion_protection": "extra7150",
+ "elbv2_desync_mitigation_mode": "extra7155",
+ "elbv2_insecure_ssl_ciphers": "extra792",
+ "elbv2_internet_facing": "extra79",
+ "elbv2_listeners_underneath": "extra7158",
+ "elbv2_logging_enabled": "extra717",
+ "elbv2_ssl_listeners": "extra793",
+ "elbv2_waf_acl_attached": "extra7129",
+ "emr_cluster_account_public_block_enabled": "extra7178",
+ "emr_cluster_master_nodes_no_public_ip": "extra7176",
+ "emr_cluster_publicly_accesible": "extra7177",
+ "glacier_vaults_policy_public_access": "extra7147",
+ "glue_data_catalogs_connection_passwords_encryption_enabled": "extra7117",
+ "glue_data_catalogs_metadata_encryption_enabled": "extra7116",
+ "glue_database_connections_ssl_enabled": "extra7115",
+ "glue_development_endpoints_cloudwatch_logs_encryption_enabled": "extra7119",
+ "glue_development_endpoints_job_bookmark_encryption_enabled": "extra7121",
+ "glue_development_endpoints_s3_encryption_enabled": "extra7114",
+ "glue_etl_jobs_amazon_s3_encryption_enabled": "extra7118",
+ "glue_etl_jobs_cloudwatch_logs_encryption_enabled": "extra7120",
+ "glue_etl_jobs_job_bookmark_encryption_enabled": "extra7122",
+ "guardduty_is_enabled": "extra713",
+ "guardduty_no_high_severity_findings": "extra7139",
+ "iam_administrator_access_with_mfa": "extra71",
+ "iam_avoid_root_usage": "check11",
+ "iam_check_saml_providers_sts": "extra733",
+ "iam_customer_attached_policy_no_administrative_privileges": "subset of check122",
+ "iam_customer_unattached_policy_no_administrative_privileges": "subset of check122",
+ "iam_no_custom_policy_permissive_role_assumption": "extra7100",
+ "iam_no_expired_server_certificates_stored": "extra7199",
+ "iam_no_root_access_key": "check112",
+ "iam_password_policy_expires_passwords_within_90_days_or_less": "check111",
+ "iam_password_policy_lowercase": "check16",
+ "iam_password_policy_minimum_length_14": "check19",
+ "iam_password_policy_number": "check18",
+ "iam_password_policy_reuse_24": "check110",
+ "iam_password_policy_symbol": "check17",
+ "iam_password_policy_uppercase": "check15",
+ "iam_policy_allows_privilege_escalation": "extra7185",
+ "iam_policy_attached_only_to_group_or_roles": "check116",
+ "iam_root_hardware_mfa_enabled": "check114",
+ "iam_root_mfa_enabled": "check113",
+ "iam_rotate_access_key_90_days": "check14",
+ "iam_support_role_created": "check120",
+ "iam_user_accesskey_unused": "subset of check13,extra774,extra7198",
+ "iam_user_console_access_unused": "subset of check13,extra774,extra7198",
+ "iam_user_hardware_mfa_enabled": "extra7125",
+ "iam_user_mfa_enabled_console_access": "check12",
+ "iam_user_no_setup_initial_access_key": "check121",
+ "iam_user_two_active_access_key": "extra7123",
+ "iam_role_cross_service_confused_deputy_prevention": "extra7201",
+ "kms_cmk_are_used": "extra7126",
+ "kms_cmk_rotation_enabled": "check28",
+ "kms_key_not_publicly_accessible": "extra736",
+ "macie_is_enabled": "extra712",
+ "opensearch_service_domains_audit_logging_enabled": "extra7101",
+ "opensearch_service_domains_cloudwatch_logging_enabled": "extra715",
+ "opensearch_service_domains_encryption_at_rest_enabled": "extra781",
+ "opensearch_service_domains_https_communications_enforced": "extra783",
+ "opensearch_service_domains_internal_user_database_enabled": "extra784",
+ "opensearch_service_domains_node_to_node_encryption_enabled": "extra782",
+ "opensearch_service_domains_not_publicly_accessible": "extra716",
+ "opensearch_service_domains_updated_to_the_latest_service_software_version": "extra785",
+ "opensearch_service_domains_use_cognito_authentication_for_kibana": "extra780",
+ "rds_instance_backup_enabled": "extra739",
+ "rds_instance_deletion_protection": "extra7113",
+ "rds_instance_enhanced_monitoring_enabled": "extra7132",
+ "rds_instance_integration_cloudwatch_logs": "extra747",
+ "rds_instance_minor_version_upgrade_enabled": "extra7131",
+ "rds_instance_multi_az": "extra7133",
+ "rds_instance_no_public_access": "extra78",
+ "rds_instance_storage_encrypted": "extra735",
+ "rds_snapshots_public_access": "extra723",
+ "redshift_cluster_audit_logging": "extra721",
+ "redshift_cluster_automated_snapshot": "extra7149",
+ "redshift_cluster_automatic_upgrades": "extra7160",
+ "redshift_cluster_public_access": "extra711",
+ "route53_domains_privacy_protection_enabled": "extra7152",
+ "route53_domains_transferlock_enabled": "extra7153",
+ "route53_public_hosted_zones_cloudwatch_logging_enabled": "extra719",
+ "s3_account_level_public_access_blocks": "extra7186",
+ "s3_bucket_acl_prohibited": "extra7172",
+ "s3_bucket_default_encryption": "extra734",
+ "s3_bucket_no_mfa_delete": "extra7200",
+ "s3_bucket_object_versioning": "extra763",
+ "s3_bucket_policy_public_write_access": "extra771",
+ "s3_bucket_public_access": "extra73",
+ "s3_bucket_secure_transport_policy": "extra764",
+ "s3_bucket_server_access_logging_enabled": "extra718",
+ "sagemaker_models_network_isolation_enabled": "extra7105",
+ "sagemaker_models_vpc_settings_configured": "extra7106",
+ "sagemaker_notebook_instance_encryption_enabled": "extra7112",
+ "sagemaker_notebook_instance_root_access_disabled": "extra7103",
+ "sagemaker_notebook_instance_vpc_settings_configured": "extra7104",
+ "sagemaker_notebook_instance_without_direct_internet_access_configured": "extra7111",
+ "sagemaker_training_jobs_intercontainer_encryption_enabled": "extra7107",
+ "sagemaker_training_jobs_network_isolation_enabled": "extra7109",
+ "sagemaker_training_jobs_volume_and_output_encryption_enabled": "extra7108",
+ "sagemaker_training_jobs_vpc_settings_configured": "extra7110",
+ "secretsmanager_automatic_rotation_enabled": "extra7163",
+ "securityhub_enabled": "extra799",
+ "shield_advanced_protection_in_associated_elastic_ips": "extra7166",
+ "shield_advanced_protection_in_classic_load_balancers": "extra7171",
+ "shield_advanced_protection_in_cloudfront_distributions": "extra7167",
+ "shield_advanced_protection_in_global_accelerators": "extra7169",
+ "shield_advanced_protection_in_internet_facing_load_balancers": "extra7170",
+ "shield_advanced_protection_in_route53_hosted_zones": "extra7168",
+ "sns_topics_kms_encryption_at_rest_enabled": "extra7130",
+ "sns_topics_not_publicly_accessible": "extra731",
+ "sqs_queues_not_publicly_accessible": "extra727",
+ "sqs_queues_server_side_encryption_enabled": "extra728",
+ "ssm_document_secrets": "extra7141",
+ "ssm_documents_set_as_public": "extra7140",
+ "ssm_managed_compliant_patching": "extra7127",
+ "trustedadvisor_errors_and_warnings": "extra726",
+ "vpc_endpoint_connections_trust_boundaries": "extra789",
+ "vpc_endpoint_services_allowed_principals_trust_boundaries": "extra790",
+ "vpc_flow_logs_enabled": "check29",
+ "vpc_peering_routing_tables_with_least_privilege": "check44",
+ "workspaces_volume_encryption_enabled": "extra7187",
+}
+```
diff --git a/docs/tutorials/azure/authentication.md b/docs/user-guide/providers/azure/authentication.mdx
similarity index 67%
rename from docs/tutorials/azure/authentication.md
rename to docs/user-guide/providers/azure/authentication.mdx
index 65d0156174..4e33da0775 100644
--- a/docs/tutorials/azure/authentication.md
+++ b/docs/user-guide/providers/azure/authentication.mdx
@@ -1,4 +1,6 @@
-# Azure Authentication in Prowler
+---
+title: 'Azure Authentication in Prowler'
+---
Prowler for Azure supports multiple authentication types. Authentication methods vary between Prowler App and Prowler CLI:
@@ -29,19 +31,20 @@ Assign the following Microsoft Graph permissions:
- `Policy.Read.All`
- `UserAuthenticationMethod.Read.All` (optional, for multifactor authentication (MFA) checks)
-???+ note
- Replace `Directory.Read.All` with `Domain.Read.All` for more restrictive permissions. Note that Entra checks related to DirectoryRoles and GetUsers will not run with this permission.
-
-=== "Azure Portal"
+
+Replace `Directory.Read.All` with `Domain.Read.All` for more restrictive permissions. Note that Entra checks related to DirectoryRoles and GetUsers will not run with this permission.
+
+
+
1. Go to your App Registration > "API permissions"
- 
+ 
2. Click "+ Add a permission" > "Microsoft Graph" > "Application permissions"
- 
- 
+ 
+ 
3. Search and select:
@@ -49,27 +52,20 @@ Assign the following Microsoft Graph permissions:
- `Policy.Read.All`
- `UserAuthenticationMethod.Read.All`
- 
+ 
4. Click "Add permissions", then grant admin consent
- 
-
-=== "Azure CLI"
-
+ 
+
+
1. To grant permissions to a Service Principal, execute the following command in a terminal:
- ```console
- az ad app permission add --id {appId} --api 00000003-0000-0000-c000-000000000000 --api-permissions 7ab1d382-f21e-4acd-a863-ba3e13f7da61=Role 246dd0d5-5bd0-4def-940b-0421030a5b68=Role 38d9df27-64da-44fd-b7c5-a6fbac20248f=Role
- ```
-
- 2. Once the permissions are assigned, admin consent is required to finalize the changes. An administrator should run:
-
- ```console
- az ad app permission admin-consent --id {appId}
- ```
-
-
+ ```console
+ az ad app permission add --id {appId} --api 00000003-0000-0000-c000-000000000000 --api-permissions 7ab1d382-f21e-4acd-a863-ba3e13f7da61=Role 246dd0d5-5bd0-4def-940b-0421030a5b68=Role 38d9df27-64da-44fd-b7c5-a6fbac20248f=Role
+ ```
+
+
### Subscription Scope Permissions
These permissions are required to perform security checks against Azure resources. The following **RBAC roles** must be assigned per subscription to the entity used by Prowler:
@@ -79,96 +75,73 @@ These permissions are required to perform security checks against Azure resource
#### Assigning "Reader" Role at the Subscription Level
-By default, Prowler scans all accessible subscriptions. If you need to audit specific subscriptions, you must assign the necessary role `Reader` for each one. For streamlined and less repetitive role assignments in multi-subscription environments, refer to the [following section](subscriptions.md#recommendation-for-managing-multiple-subscriptions).
-
-=== "Azure Portal"
+By default, Prowler scans all accessible subscriptions. If you need to audit specific subscriptions, you must assign the necessary role `Reader` for each one. For streamlined and less repetitive role assignments in multi-subscription environments, refer to the [following section](/user-guide/providers/azure/subscriptions#recommendation-for-managing-multiple-subscriptions).
+
+
1. To grant Prowler access to scan a specific Azure subscription, follow these steps in Azure Portal:
Navigate to the subscription you want to audit with Prowler.
- 1. In the left menu, select “Access control (IAM)”.
+ 1. In the left menu, select "Access control (IAM)".
- 2. Click “+ Add” and select “Add role assignment”.
+ 2. Click "+ Add" and select "Add role assignment".
- 3. In the search bar, enter `Reader`, select it and click “Next”.
+ 3. In the search bar, enter `Reader`, select it and click "Next".
- 4. In the “Members” tab, click “+ Select members”, then add the accounts to assign this role.
+ 4. In the "Members" tab, click "+ Select members", then add the accounts to assign this role.
- 5. Click “Review + assign” to finalize and apply the role assignment.
-
- 
-
-=== "Azure CLI"
+ 5. Click "Review + assign" to finalize and apply the role assignment.
+ 
+
+
1. Open a terminal and execute the following command to assign the `Reader` role to the identity that is going to be assumed by Prowler:
```console
az role assignment create --role "Reader" --assignee --scope /subscriptions/
```
-
- 2. If the command is executed successfully, the output is going to be similar to the following:
-
- ```json
- {
- "condition": null,
- "conditionVersion": null,
- "createdBy": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
- "createdOn": "YYYY-MM-DDTHH:MM:SS.SSSSSS+00:00",
- "delegatedManagedIdentityResourceId": null,
- "description": null,
- "id": "/subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/providers/Microsoft.Authorization/roleAssignments/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
- "name": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
- "principalId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
- "principalName": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
- "principalType": "ServicePrincipal",
- "roleDefinitionId": "/subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/providers/Microsoft.Authorization/roleDefinitions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
- "roleDefinitionName": "Reader",
- "scope": "/subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
- "type": "Microsoft.Authorization/roleAssignments",
- "updatedBy": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
- "updatedOn": "YYYY-MM-DDTHH:MM:SS.SSSSSS+00:00"
- }
- ```
-
+
+
#### Assigning "ProwlerRole" Permissions at the Subscription Level
Some read-only permissions required for specific security checks are not included in the built-in Reader role. To support these checks, Prowler utilizes a custom role, defined in [prowler-azure-custom-role](https://github.com/prowler-cloud/prowler/blob/master/permissions/prowler-azure-custom-role.json). Once created, this role can be assigned following the same process as the `Reader` role.
-The checks requiring this `ProwlerRole` can be found in this [section](../../tutorials/azure/authentication.md#checks-requiring-prowlerrole).
-
-=== "Azure Portal"
+The checks requiring this `ProwlerRole` can be found in this [section](/user-guide/providers/azure/authentication#checks-requiring-prowlerrole).
+
+
1. Download the [Prowler Azure Custom Role](https://github.com/prowler-cloud/prowler/blob/master/permissions/prowler-azure-custom-role.json)
- 
+ 
2. Modify `assignableScopes` to match your Subscription ID (e.g. `/subscriptions/xxxx-xxxx-xxxx-xxxx`)
3. Go to your Azure Subscription > "Access control (IAM)"
- 
+ 
4. Click "+ Add" > "Add custom role", choose "Start from JSON" and upload the modified file
- 
+ 
5. Click "Review + Create" to finish
- 
+ 
6. Return to "Access control (IAM)" > "+ Add" > "Add role assignment"
- Assign the `Reader` role to the Application created in the previous step
- Then repeat the same process assigning the custom `ProwlerRole`
- 
+ 
- ???+ note
+
The `assignableScopes` field in the JSON custom role file must be updated to reflect the correct subscription or management group. Use one of the following formats: `/subscriptions/` or `/providers/Microsoft.Management/managementGroups/`.
-=== "Azure CLI"
-
-1. To create a new custom role, open a terminal and execute the following command:
+
+
+
+ 1. To create a new custom role, open a terminal and execute the following command:
```console
az role definition create --role-definition '{ 640ms lun 16 dic 17:04:17 2024
@@ -217,17 +190,20 @@ The checks requiring this `ProwlerRole` can be found in this [section](../../tut
"updatedOn": "YYYY-MM-DDTHH:MM:SS.SSSSSS+00:00"
}
```
+
+
### Additional Resources
For more detailed guidance on subscription management and permissions:
-- [Azure subscription permissions](subscriptions.md)
-- [Create Prowler Service Principal](create-prowler-service-principal.md)
+- [Azure subscription permissions](/user-guide/providers/azure/subscriptions)
+- [Create Prowler Service Principal](/user-guide/providers/azure/create-prowler-service-principal)
-???+ warning
- Some permissions in `ProwlerRole` involve **write access**. If a `ReadOnly` lock is attached to certain resources, you may encounter errors, and findings for those checks will not be available.
+
+ Some permissions in `ProwlerRole` involve **write access**. If a `ReadOnly` lock is attached to certain resources, you may encounter errors, and findings for those checks will not be available.
+
#### Checks Requiring `ProwlerRole`
The following security checks require the `ProwlerRole` permissions for execution. Ensure the role is assigned to the identity assumed by Prowler before running these checks:
@@ -242,7 +218,7 @@ The following security checks require the `ProwlerRole` permissions for executio
This method is required for Prowler App and recommended for Prowler CLI.
### Creating the Service Principal
-For more information, see [Creating Prowler Service Principal](create-prowler-service-principal.md).
+For more information, see [Creating Prowler Service Principal](/user-guide/providers/azure/create-prowler-service-principal).
### Environment Variables (CLI)
diff --git a/docs/tutorials/azure/create-prowler-service-principal.md b/docs/user-guide/providers/azure/create-prowler-service-principal.mdx
similarity index 69%
rename from docs/tutorials/azure/create-prowler-service-principal.md
rename to docs/user-guide/providers/azure/create-prowler-service-principal.mdx
index 3d2145f7c2..6a7b5a0912 100644
--- a/docs/tutorials/azure/create-prowler-service-principal.md
+++ b/docs/user-guide/providers/azure/create-prowler-service-principal.mdx
@@ -1,29 +1,31 @@
-# Creating a Prowler Service Principal Application
+---
+title: 'Creating a Prowler Service Principal Application'
+---
To enable Prowler to assume an identity for scanning with the required privileges, a Service Principal must be created. This Service Principal authenticates against Azure and retrieves necessary metadata for checks.
Service Principal Applications can be created using either the Azure Portal or the Azure CLI.
-
+
## Creating a Service Principal via Azure Portal / Entra Admin Center
1. Access **Microsoft Entra ID** in the [Azure Portal](https://portal.azure.com)
- 
+ 
2. Navigate to "Manage" > "App registrations"
- 
+ 
3. Click "+ New registration", complete the form, and click "Register"
- 
+ 
4. Go to "Certificates & secrets" > "+ New client secret"
- 
- 
+ 
+ 
5. Fill in the required fields and click "Add", then copy the generated value
@@ -59,4 +61,4 @@ To create a Service Principal using the Azure CLI, follow these steps:
## Assigning Proper Permissions
-Go to [Assigning Proper Permissions](./authentication.md#required-permissions) to learn how to assign the necessary permissions to the Service Principal.
\ No newline at end of file
+Go to [Assigning Proper Permissions](/user-guide/providers/azure/authentication#required-permissions) to learn how to assign the necessary permissions to the Service Principal.
diff --git a/docs/tutorials/azure/getting-started-azure.md b/docs/user-guide/providers/azure/getting-started-azure.mdx
similarity index 64%
rename from docs/tutorials/azure/getting-started-azure.md
rename to docs/user-guide/providers/azure/getting-started-azure.mdx
index 6c6a6338fe..f9f37b9f9b 100644
--- a/docs/tutorials/azure/getting-started-azure.md
+++ b/docs/user-guide/providers/azure/getting-started-azure.mdx
@@ -1,4 +1,6 @@
-# Getting Started With Azure on Prowler
+---
+title: 'Getting Started With Azure on Prowler'
+---
## Prowler App
@@ -6,14 +8,17 @@
> Walkthrough video onboarding an Azure Subscription using Service Principal.
-???+ note "Government Cloud Support"
- Government cloud subscriptions (Azure Government) are not currently supported, but we expect to add support for them in the near future.
+
+**Government Cloud Support**
+Government cloud subscriptions (Azure Government) are not currently supported, but we expect to add support for them in the near future.
+
+
### Prerequisites
Before setting up Azure in Prowler App, you need to create a Service Principal with proper permissions.
-For detailed instructions on how to create the Service Principal and configure permissions, see [Authentication > Service Principal](./authentication.md#service-principal-application-authentication-recommended).
+For detailed instructions on how to create the Service Principal and configure permissions, see [Authentication > Service Principal](/user-guide/providers/azure/authentication#service-principal-application-authentication-recommended).
---
@@ -22,53 +27,53 @@ For detailed instructions on how to create the Service Principal and configure p
1. Go to the [Azure Portal](https://portal.azure.com/#home) and search for `Subscriptions`
2. Locate and copy your Subscription ID
- 
- 
+ 
+ 
---
### Step 2: Access Prowler App
-1. Navigate to [Prowler Cloud](https://cloud.prowler.com/) or launch [Prowler App](../prowler-app.md)
+1. Navigate to [Prowler Cloud](https://cloud.prowler.com/) or launch [Prowler App](/user-guide/tutorials/prowler-app)
2. Navigate to `Configuration` > `Cloud Providers`
- 
+ 
3. Click on `Add Cloud Provider`
- 
+ 
4. Select `Microsoft Azure`
- 
+ 
5. Add the Subscription ID and an optional alias, then click `Next`
- 
+ 
### Step 3: Add Credentials to Prowler App
-Having completed the [Service Principal setup from the Authentication guide](./authentication.md#service-principal-application-authentication-recommended):
+Having completed the [Service Principal setup from the Authentication guide](/user-guide/providers/azure/authentication#service-principal-application-authentication-recommended):
1. Go to your App Registration overview and copy the `Client ID` and `Tenant ID`
- 
+ 
2. Go to Prowler App and paste:
- `Client ID`
- `Tenant ID`
- - `Client Secret` from [earlier](./authentication.md#service-principal-application-authentication-recommended)
+ - `Client Secret` from [earlier](/user-guide/providers/azure/authentication#service-principal-application-authentication-recommended)
- 
+ 
3. Click `Next`
- 
+ 
4. Click "Launch Scan"
- 
+ 
---
@@ -78,7 +83,7 @@ Having completed the [Service Principal setup from the Authentication guide](./a
To authenticate with Azure, Prowler CLI supports multiple authentication methods. Choose the method that best suits your environment.
-For detailed authentication setup instructions, see [Authentication](./authentication.md).
+For detailed authentication setup instructions, see [Authentication](/user-guide/providers/azure/authentication).
**Service Principal (Recommended)**
diff --git a/docs/user-guide/providers/azure/img/add-api-permission.png b/docs/user-guide/providers/azure/img/add-api-permission.png
new file mode 100644
index 0000000000..9fa3d02b47
Binary files /dev/null and b/docs/user-guide/providers/azure/img/add-api-permission.png differ
diff --git a/docs/user-guide/providers/azure/img/add-credentials-azure-prowler-cloud.png b/docs/user-guide/providers/azure/img/add-credentials-azure-prowler-cloud.png
new file mode 100644
index 0000000000..48b722a200
Binary files /dev/null and b/docs/user-guide/providers/azure/img/add-credentials-azure-prowler-cloud.png differ
diff --git a/docs/user-guide/providers/azure/img/add-custom-role-json.png b/docs/user-guide/providers/azure/img/add-custom-role-json.png
new file mode 100644
index 0000000000..92e7d18bc7
Binary files /dev/null and b/docs/user-guide/providers/azure/img/add-custom-role-json.png differ
diff --git a/docs/user-guide/providers/azure/img/add-custom-role.png b/docs/user-guide/providers/azure/img/add-custom-role.png
new file mode 100644
index 0000000000..0f00f05619
Binary files /dev/null and b/docs/user-guide/providers/azure/img/add-custom-role.png differ
diff --git a/docs/user-guide/providers/azure/img/add-reader-role.png b/docs/user-guide/providers/azure/img/add-reader-role.png
new file mode 100644
index 0000000000..110ae1645d
Binary files /dev/null and b/docs/user-guide/providers/azure/img/add-reader-role.png differ
diff --git a/docs/user-guide/providers/azure/img/add-role-assigment.png b/docs/user-guide/providers/azure/img/add-role-assigment.png
new file mode 100644
index 0000000000..3037911aaf
Binary files /dev/null and b/docs/user-guide/providers/azure/img/add-role-assigment.png differ
diff --git a/docs/user-guide/providers/azure/img/add-subscription-id.png b/docs/user-guide/providers/azure/img/add-subscription-id.png
new file mode 100644
index 0000000000..235fd377b8
Binary files /dev/null and b/docs/user-guide/providers/azure/img/add-subscription-id.png differ
diff --git a/docs/tutorials/azure/img/api-permissions-page.png b/docs/user-guide/providers/azure/img/api-permissions-page.png
similarity index 100%
rename from docs/tutorials/azure/img/api-permissions-page.png
rename to docs/user-guide/providers/azure/img/api-permissions-page.png
diff --git a/docs/user-guide/providers/azure/img/api-permissions-result.png b/docs/user-guide/providers/azure/img/api-permissions-result.png
new file mode 100644
index 0000000000..26a7f83587
Binary files /dev/null and b/docs/user-guide/providers/azure/img/api-permissions-result.png differ
diff --git a/docs/tutorials/azure/img/app-overview.png b/docs/user-guide/providers/azure/img/app-overview.png
similarity index 100%
rename from docs/tutorials/azure/img/app-overview.png
rename to docs/user-guide/providers/azure/img/app-overview.png
diff --git a/docs/tutorials/azure/img/app-registration-menu.png b/docs/user-guide/providers/azure/img/app-registration-menu.png
similarity index 100%
rename from docs/tutorials/azure/img/app-registration-menu.png
rename to docs/user-guide/providers/azure/img/app-registration-menu.png
diff --git a/docs/user-guide/providers/azure/img/application-permissions-inside-graph.png b/docs/user-guide/providers/azure/img/application-permissions-inside-graph.png
new file mode 100644
index 0000000000..58f0846d4f
Binary files /dev/null and b/docs/user-guide/providers/azure/img/application-permissions-inside-graph.png differ
diff --git a/docs/tutorials/azure/img/certificates-and-secrets.png b/docs/user-guide/providers/azure/img/certificates-and-secrets.png
similarity index 100%
rename from docs/tutorials/azure/img/certificates-and-secrets.png
rename to docs/user-guide/providers/azure/img/certificates-and-secrets.png
diff --git a/docs/user-guide/providers/azure/img/click-add-permissions.png b/docs/user-guide/providers/azure/img/click-add-permissions.png
new file mode 100644
index 0000000000..f4f30fd591
Binary files /dev/null and b/docs/user-guide/providers/azure/img/click-add-permissions.png differ
diff --git a/docs/user-guide/providers/azure/img/click-next-azure.png b/docs/user-guide/providers/azure/img/click-next-azure.png
new file mode 100644
index 0000000000..4e2e90cd98
Binary files /dev/null and b/docs/user-guide/providers/azure/img/click-next-azure.png differ
diff --git a/docs/user-guide/providers/azure/img/domain-permission.png b/docs/user-guide/providers/azure/img/domain-permission.png
new file mode 100644
index 0000000000..2d442bac46
Binary files /dev/null and b/docs/user-guide/providers/azure/img/domain-permission.png differ
diff --git a/docs/user-guide/providers/azure/img/download-prowler-role.png b/docs/user-guide/providers/azure/img/download-prowler-role.png
new file mode 100644
index 0000000000..ef03f7e6ef
Binary files /dev/null and b/docs/user-guide/providers/azure/img/download-prowler-role.png differ
diff --git a/docs/user-guide/providers/azure/img/get-subscription-id.png b/docs/user-guide/providers/azure/img/get-subscription-id.png
new file mode 100644
index 0000000000..2d4cfa4b2e
Binary files /dev/null and b/docs/user-guide/providers/azure/img/get-subscription-id.png differ
diff --git a/docs/tutorials/azure/img/grant-admin-consent.png b/docs/user-guide/providers/azure/img/grant-admin-consent.png
similarity index 100%
rename from docs/tutorials/azure/img/grant-admin-consent.png
rename to docs/user-guide/providers/azure/img/grant-admin-consent.png
diff --git a/docs/user-guide/providers/azure/img/iam-azure-page.png b/docs/user-guide/providers/azure/img/iam-azure-page.png
new file mode 100644
index 0000000000..db87f9e7ce
Binary files /dev/null and b/docs/user-guide/providers/azure/img/iam-azure-page.png differ
diff --git a/docs/tutorials/azure/img/launch-scan.png b/docs/user-guide/providers/azure/img/launch-scan.png
similarity index 100%
rename from docs/tutorials/azure/img/launch-scan.png
rename to docs/user-guide/providers/azure/img/launch-scan.png
diff --git a/docs/user-guide/providers/azure/img/member-select-app-prowler.png b/docs/user-guide/providers/azure/img/member-select-app-prowler.png
new file mode 100644
index 0000000000..e95984263a
Binary files /dev/null and b/docs/user-guide/providers/azure/img/member-select-app-prowler.png differ
diff --git a/docs/user-guide/providers/azure/img/microsoft-graph-detail.png b/docs/user-guide/providers/azure/img/microsoft-graph-detail.png
new file mode 100644
index 0000000000..888a2e551e
Binary files /dev/null and b/docs/user-guide/providers/azure/img/microsoft-graph-detail.png differ
diff --git a/docs/tutorials/azure/img/new-client-secret.png b/docs/user-guide/providers/azure/img/new-client-secret.png
similarity index 100%
rename from docs/tutorials/azure/img/new-client-secret.png
rename to docs/user-guide/providers/azure/img/new-client-secret.png
diff --git a/docs/tutorials/azure/img/new-registration.png b/docs/user-guide/providers/azure/img/new-registration.png
similarity index 100%
rename from docs/tutorials/azure/img/new-registration.png
rename to docs/user-guide/providers/azure/img/new-registration.png
diff --git a/docs/user-guide/providers/azure/img/policy-permission.png b/docs/user-guide/providers/azure/img/policy-permission.png
new file mode 100644
index 0000000000..dce61b7caf
Binary files /dev/null and b/docs/user-guide/providers/azure/img/policy-permission.png differ
diff --git a/docs/user-guide/providers/azure/img/prowler-app-registration.png b/docs/user-guide/providers/azure/img/prowler-app-registration.png
new file mode 100644
index 0000000000..9a2e521702
Binary files /dev/null and b/docs/user-guide/providers/azure/img/prowler-app-registration.png differ
diff --git a/docs/user-guide/providers/azure/img/review-and-assign-last-step.png b/docs/user-guide/providers/azure/img/review-and-assign-last-step.png
new file mode 100644
index 0000000000..768c58f536
Binary files /dev/null and b/docs/user-guide/providers/azure/img/review-and-assign-last-step.png differ
diff --git a/docs/user-guide/providers/azure/img/review-and-create.png b/docs/user-guide/providers/azure/img/review-and-create.png
new file mode 100644
index 0000000000..8ef0ec24b7
Binary files /dev/null and b/docs/user-guide/providers/azure/img/review-and-create.png differ
diff --git a/docs/user-guide/providers/azure/img/search-microsoft-entra-id.png b/docs/user-guide/providers/azure/img/search-microsoft-entra-id.png
new file mode 100644
index 0000000000..f5fc7170eb
Binary files /dev/null and b/docs/user-guide/providers/azure/img/search-microsoft-entra-id.png differ
diff --git a/docs/user-guide/providers/azure/img/search-subscriptions.png b/docs/user-guide/providers/azure/img/search-subscriptions.png
new file mode 100644
index 0000000000..c9b3d2e017
Binary files /dev/null and b/docs/user-guide/providers/azure/img/search-subscriptions.png differ
diff --git a/docs/user-guide/providers/azure/img/select-azure-prowler-cloud.png b/docs/user-guide/providers/azure/img/select-azure-prowler-cloud.png
new file mode 100644
index 0000000000..2b8b473d0a
Binary files /dev/null and b/docs/user-guide/providers/azure/img/select-azure-prowler-cloud.png differ
diff --git a/docs/user-guide/providers/azure/img/select-custom-role-prowler.png b/docs/user-guide/providers/azure/img/select-custom-role-prowler.png
new file mode 100644
index 0000000000..219455ce12
Binary files /dev/null and b/docs/user-guide/providers/azure/img/select-custom-role-prowler.png differ
diff --git a/docs/user-guide/providers/azure/img/select-members-iam.png b/docs/user-guide/providers/azure/img/select-members-iam.png
new file mode 100644
index 0000000000..a7d0999a98
Binary files /dev/null and b/docs/user-guide/providers/azure/img/select-members-iam.png differ
diff --git a/docs/user-guide/providers/azure/img/subscription-page-azure.png b/docs/user-guide/providers/azure/img/subscription-page-azure.png
new file mode 100644
index 0000000000..98bc1a0b26
Binary files /dev/null and b/docs/user-guide/providers/azure/img/subscription-page-azure.png differ
diff --git a/docs/user-guide/providers/azure/img/user-permission.png b/docs/user-guide/providers/azure/img/user-permission.png
new file mode 100644
index 0000000000..4a402fe161
Binary files /dev/null and b/docs/user-guide/providers/azure/img/user-permission.png differ
diff --git a/docs/tutorials/azure/subscriptions.md b/docs/user-guide/providers/azure/subscriptions.mdx
similarity index 78%
rename from docs/tutorials/azure/subscriptions.md
rename to docs/user-guide/providers/azure/subscriptions.mdx
index 914a707bbf..8fa6c73740 100644
--- a/docs/tutorials/azure/subscriptions.md
+++ b/docs/user-guide/providers/azure/subscriptions.mdx
@@ -1,4 +1,6 @@
-# Azure Subscription Scope
+---
+title: 'Azure Subscription Scope'
+---
Prowler performs security scans within the subscription scope in Azure. To execute checks, it requires appropriate permissions to access the subscription and retrieve necessary metadata.
@@ -14,11 +16,12 @@ prowler azure --az-cli-auth --subscription-ids
+The multi-subscription feature is available only in the CLI. In Prowler App, each scan is limited to a single subscription.
+
## Assigning Permissions for Subscription Scans
-Check the [Authentication > Subscription Scope Permissions](authentication.md#subscription-scope-permissions) guide for more information on how to assign permissions for subscription scans.
+Check the [Authentication > Subscription Scope Permissions](/user-guide/providers/azure/authentication#subscription-scope-permissions) guide for more information on how to assign permissions for subscription scans.
## Recommendation for Managing Multiple Subscriptions
@@ -26,10 +29,10 @@ Scanning multiple subscriptions requires creating and assigning roles for each,
1. **Create a Management Group**: Follow the [official guide](https://learn.microsoft.com/en-us/azure/governance/management-groups/create-management-group-portal) to create a new management group.
- 
+ 
2. **Assign Roles**: Assign necessary roles to the management group, similar to the [role assignment process](#assigning-permissions-for-subscription-scans).
Role assignment should be done at the management group level instead of per subscription.
-3. **Add Subscriptions**: Add all subscriptions you want to audit to the newly created management group. 
+3. **Add Subscriptions**: Add all subscriptions you want to audit to the newly created management group. 
diff --git a/docs/tutorials/azure/use-non-default-cloud.md b/docs/user-guide/providers/azure/use-non-default-cloud.mdx
similarity index 92%
rename from docs/tutorials/azure/use-non-default-cloud.md
rename to docs/user-guide/providers/azure/use-non-default-cloud.mdx
index 420e635631..d4c5848d6e 100644
--- a/docs/tutorials/azure/use-non-default-cloud.md
+++ b/docs/user-guide/providers/azure/use-non-default-cloud.mdx
@@ -1,4 +1,6 @@
-# Using Non-Default Azure Regions
+---
+title: 'Using Non-Default Azure Regions'
+---
Microsoft offers cloud environments that comply with regional regulations. These clouds are available for use based on your requirements. By default, Prowler utilizes the commercial `AzureCloud` environment. (To list all available Azure clouds, use `az cloud list --output table`).
diff --git a/docs/tutorials/gcp/authentication.md b/docs/user-guide/providers/gcp/authentication.mdx
similarity index 83%
rename from docs/tutorials/gcp/authentication.md
rename to docs/user-guide/providers/gcp/authentication.mdx
index c222510989..7eea8ac5dd 100644
--- a/docs/tutorials/gcp/authentication.md
+++ b/docs/user-guide/providers/gcp/authentication.mdx
@@ -1,4 +1,6 @@
-# GCP Authentication in Prowler
+---
+title: 'GCP Authentication in Prowler'
+---
Prowler for Google Cloud supports multiple authentication methods. To use a specific method, configure the appropriate credentials during execution:
@@ -39,10 +41,11 @@ At least one project must have the following configurations:
export GOOGLE_CLOUD_QUOTA_PROJECT=
```
-???+ note
- Prowler will scan the GCP project associated with the credentials.
+
+Prowler will scan the GCP project associated with the credentials.
+
## Application Default Credentials (User Credentials)
This method uses the Google Cloud CLI to authenticate and is suitable for development and testing environments.
@@ -51,11 +54,11 @@ This method uses the Google Cloud CLI to authenticate and is suitable for develo
1. In the [GCP Console](https://console.cloud.google.com/), click on "Activate Cloud Shell"
- 
+ 
2. Click "Authorize Cloud Shell"
- 
+ 
3. Run the following command:
@@ -65,23 +68,23 @@ This method uses the Google Cloud CLI to authenticate and is suitable for develo
- Type `Y` when prompted
- 
+ 
4. Open the authentication URL provided in a browser and select your Google account
- 
+ 
5. Follow the steps to obtain the authentication code
- 
+ 
6. Paste the authentication code back in Cloud Shell
- 
+ 
7. Use `cat ` to view the temporary credentials file
- 
+ 
8. Extract the following values for Prowler Cloud/App:
@@ -89,7 +92,7 @@ This method uses the Google Cloud CLI to authenticate and is suitable for develo
- `client_secret`
- `refresh_token`
- 
+ 
### Using with Prowler CLI
@@ -134,12 +137,13 @@ export CLOUDSDK_AUTH_ACCESS_TOKEN=$(gcloud auth print-access-token)
prowler gcp --project-ids
```
-???+ note
- When using this method, also set the default project explicitly:
- ```bash
- export GOOGLE_CLOUD_PROJECT=
- ```
+
+When using this method, also set the default project explicitly:
+```bash
+export GOOGLE_CLOUD_PROJECT=
+```
+
## Service Account Impersonation
To impersonate a GCP service account, use the `--impersonate-service-account` argument followed by the service account email:
diff --git a/docs/tutorials/gcp/getting-started-gcp.md b/docs/user-guide/providers/gcp/getting-started-gcp.mdx
similarity index 69%
rename from docs/tutorials/gcp/getting-started-gcp.md
rename to docs/user-guide/providers/gcp/getting-started-gcp.mdx
index 81d640cf59..218272793a 100644
--- a/docs/tutorials/gcp/getting-started-gcp.md
+++ b/docs/user-guide/providers/gcp/getting-started-gcp.mdx
@@ -1,4 +1,6 @@
-# Getting Started With GCP on Prowler
+---
+title: 'Getting Started With GCP on Prowler'
+---
## Prowler App
@@ -7,26 +9,26 @@
1. Go to the [GCP Console](https://console.cloud.google.com/)
2. Locate the Project ID on the welcome screen
-
+
### Step 2: Access Prowler Cloud or Prowler App
-1. Navigate to [Prowler Cloud](https://cloud.prowler.com/) or launch [Prowler App](../prowler-app.md)
+1. Navigate to [Prowler Cloud](https://cloud.prowler.com/) or launch [Prowler App](/user-guide/tutorials/prowler-app)
2. Go to "Configuration" > "Cloud Providers"
- 
+ 
3. Click "Add Cloud Provider"
- 
+ 
4. Select "Google Cloud Platform"
- 
+ 
5. Add the Project ID and optionally provide a provider alias, then click "Next"
- 
+ 
### Step 3: Set Up GCP Authentication
@@ -44,7 +46,7 @@ Choose the preferred authentication mode before proceeding:
* Stable and auditable
* Recommended for production
-For detailed instructions on how to set up authentication, see [Authentication](./authentication.md).
+For detailed instructions on how to set up authentication, see [Authentication](/user-guide/providers/gcp/authentication).
6. Once credentials are configured, return to Prowler App and enter the required values:
@@ -58,11 +60,11 @@ For detailed instructions on how to set up authentication, see [Authentication](
- `client_secret`
- `refresh_token`
- 
+ 
7. Click "Next", then "Launch Scan"
- 
+ 
---
@@ -77,13 +79,15 @@ Prowler follows the same credential search process as [Google authentication lib
3. [User credentials set up by using the Google Cloud CLI](https://cloud.google.com/docs/authentication/application-default-credentials#personal)
4. [Attached service account (e.g., Cloud Run, GCE, Cloud Functions)](https://cloud.google.com/docs/authentication/application-default-credentials#attached-sa)
-???+ note
- The credentials must belong to a user or service account with the necessary permissions.
- For detailed instructions on how to set the permissions, see [Authentication > Required Permissions](./authentication.md#required-permissions).
+
+The credentials must belong to a user or service account with the necessary permissions.
+For detailed instructions on how to set the permissions, see [Authentication > Required Permissions](/user-guide/providers/gcp/authentication#required-permissions).
-???+ note
- Prowler will use the enabled Google Cloud APIs to get the information needed to perform the checks.
+
+
+Prowler will use the enabled Google Cloud APIs to get the information needed to perform the checks.
+
### Configure GCP Credentials
To authenticate with GCP, use one of the following methods:
@@ -100,7 +104,7 @@ export GOOGLE_APPLICATION_CREDENTIALS="/path/to/credentials.json"
These credentials must belong to a user or service account with the necessary permissions to perform security checks.
-For more authentication details, see the [Authentication](./authentication.md) page.
+For more authentication details, see the [Authentication](/user-guide/providers/gcp/authentication) page.
### Project Specification
@@ -118,4 +122,4 @@ For service account impersonation, use the `--impersonate-service-account` flag:
prowler gcp --impersonate-service-account
```
-More details on authentication methods in the [Authentication](./authentication.md) page.
+More details on authentication methods in the [Authentication](/user-guide/providers/gcp/authentication) page.
diff --git a/docs/user-guide/providers/gcp/img/access-console.png b/docs/user-guide/providers/gcp/img/access-console.png
new file mode 100644
index 0000000000..9a7814e7b1
Binary files /dev/null and b/docs/user-guide/providers/gcp/img/access-console.png differ
diff --git a/docs/user-guide/providers/gcp/img/add-project-id.png b/docs/user-guide/providers/gcp/img/add-project-id.png
new file mode 100644
index 0000000000..41b2971a06
Binary files /dev/null and b/docs/user-guide/providers/gcp/img/add-project-id.png differ
diff --git a/docs/user-guide/providers/gcp/img/authorize-cloud-shell.png b/docs/user-guide/providers/gcp/img/authorize-cloud-shell.png
new file mode 100644
index 0000000000..88fc6bcbf9
Binary files /dev/null and b/docs/user-guide/providers/gcp/img/authorize-cloud-shell.png differ
diff --git a/docs/user-guide/providers/gcp/img/copy-auth-code.png b/docs/user-guide/providers/gcp/img/copy-auth-code.png
new file mode 100644
index 0000000000..a8d0496603
Binary files /dev/null and b/docs/user-guide/providers/gcp/img/copy-auth-code.png differ
diff --git a/docs/user-guide/providers/gcp/img/enter-auth-code.png b/docs/user-guide/providers/gcp/img/enter-auth-code.png
new file mode 100644
index 0000000000..03f80e29c4
Binary files /dev/null and b/docs/user-guide/providers/gcp/img/enter-auth-code.png differ
diff --git a/docs/user-guide/providers/gcp/img/enter-credentials-prowler-cloud.png b/docs/user-guide/providers/gcp/img/enter-credentials-prowler-cloud.png
new file mode 100644
index 0000000000..286af1c643
Binary files /dev/null and b/docs/user-guide/providers/gcp/img/enter-credentials-prowler-cloud.png differ
diff --git a/docs/user-guide/providers/gcp/img/get-needed-values-auth.png b/docs/user-guide/providers/gcp/img/get-needed-values-auth.png
new file mode 100644
index 0000000000..95953e1098
Binary files /dev/null and b/docs/user-guide/providers/gcp/img/get-needed-values-auth.png differ
diff --git a/docs/user-guide/providers/gcp/img/get-temp-file-credentials.png b/docs/user-guide/providers/gcp/img/get-temp-file-credentials.png
new file mode 100644
index 0000000000..ce7160ee87
Binary files /dev/null and b/docs/user-guide/providers/gcp/img/get-temp-file-credentials.png differ
diff --git a/docs/tutorials/gcp/img/launch-scan.png b/docs/user-guide/providers/gcp/img/launch-scan.png
similarity index 100%
rename from docs/tutorials/gcp/img/launch-scan.png
rename to docs/user-guide/providers/gcp/img/launch-scan.png
diff --git a/docs/user-guide/providers/gcp/img/open-link-console.png b/docs/user-guide/providers/gcp/img/open-link-console.png
new file mode 100644
index 0000000000..05a1b61ce8
Binary files /dev/null and b/docs/user-guide/providers/gcp/img/open-link-console.png differ
diff --git a/docs/user-guide/providers/gcp/img/project-id-console.png b/docs/user-guide/providers/gcp/img/project-id-console.png
new file mode 100644
index 0000000000..7701509f32
Binary files /dev/null and b/docs/user-guide/providers/gcp/img/project-id-console.png differ
diff --git a/docs/user-guide/providers/gcp/img/run-gcloud-auth.png b/docs/user-guide/providers/gcp/img/run-gcloud-auth.png
new file mode 100644
index 0000000000..853fe33892
Binary files /dev/null and b/docs/user-guide/providers/gcp/img/run-gcloud-auth.png differ
diff --git a/docs/user-guide/providers/gcp/img/select-gcp.png b/docs/user-guide/providers/gcp/img/select-gcp.png
new file mode 100644
index 0000000000..0aed14394c
Binary files /dev/null and b/docs/user-guide/providers/gcp/img/select-gcp.png differ
diff --git a/docs/user-guide/providers/gcp/img/take-account-email.png b/docs/user-guide/providers/gcp/img/take-account-email.png
new file mode 100644
index 0000000000..4076bb7fc0
Binary files /dev/null and b/docs/user-guide/providers/gcp/img/take-account-email.png differ
diff --git a/docs/user-guide/providers/gcp/organization.mdx b/docs/user-guide/providers/gcp/organization.mdx
new file mode 100644
index 0000000000..6f4f7658e5
--- /dev/null
+++ b/docs/user-guide/providers/gcp/organization.mdx
@@ -0,0 +1,29 @@
+---
+title: 'Scanning a Specific GCP Organization'
+---
+
+By default, Prowler scans all Google Cloud projects accessible to the authenticated user.
+
+To limit the scan to projects within a specific Google Cloud organization, use the `--organization-id` option with the GCP organization’s ID:
+
+```console
+prowler gcp --organization-id organization-id
+```
+
+
+Ensure the credentials used have one of the following roles at the organization level:
+Cloud Asset Viewer (`roles/cloudasset.viewer`), or Cloud Asset Owner (`roles/cloudasset.owner`).
+
+
+
+With this option, Prowler retrieves all projects under the specified Google Cloud organization, including those organized within folders and nested subfolders. This ensures full visibility across the entire organization’s hierarchy.
+
+
+
+To obtain the Google Cloud organization ID, use:
+
+```console
+gcloud organizations list
+```
+
+
diff --git a/docs/tutorials/gcp/projects.md b/docs/user-guide/providers/gcp/projects.mdx
similarity index 95%
rename from docs/tutorials/gcp/projects.md
rename to docs/user-guide/providers/gcp/projects.mdx
index 6af86aaa0e..5cae802c4a 100644
--- a/docs/tutorials/gcp/projects.md
+++ b/docs/user-guide/providers/gcp/projects.mdx
@@ -1,4 +1,6 @@
-# GCP Project Scanning in Prowler
+---
+title: 'GCP Project Scanning in Prowler'
+---
By default, Prowler operates in a multi-project mode, scanning all Google Cloud projects accessible to the authenticated user.
diff --git a/docs/tutorials/gcp/retry-configuration.md b/docs/user-guide/providers/gcp/retry-configuration.mdx
similarity index 98%
rename from docs/tutorials/gcp/retry-configuration.md
rename to docs/user-guide/providers/gcp/retry-configuration.mdx
index e358844abe..42edd1324d 100644
--- a/docs/tutorials/gcp/retry-configuration.md
+++ b/docs/user-guide/providers/gcp/retry-configuration.mdx
@@ -1,4 +1,6 @@
-# GCP Retry Configuration in Prowler
+---
+title: "GCP Retry Configuration in Prowler"
+---
Prowler's GCP Provider uses Google Cloud Python SDK's integrated retry mechanism to automatically retry API calls when encountering rate limiting errors (HTTP 429).
diff --git a/docs/tutorials/github/authentication.md b/docs/user-guide/providers/github/authentication.mdx
similarity index 77%
rename from docs/tutorials/github/authentication.md
rename to docs/user-guide/providers/github/authentication.mdx
index 76ebfe9484..d76a0a1cb5 100644
--- a/docs/tutorials/github/authentication.md
+++ b/docs/user-guide/providers/github/authentication.mdx
@@ -1,10 +1,12 @@
-# GitHub Authentication in Prowler
+---
+title: 'GitHub Authentication in Prowler'
+---
Prowler supports multiple methods to [authenticate with GitHub](https://docs.github.com/en/rest/authentication/authenticating-to-the-rest-api). These include:
-- [Personal Access Token (PAT)](./authentication.md#personal-access-token-pat)
-- [OAuth App Token](./authentication.md#oauth-app-token)
-- [GitHub App Credentials](./authentication.md#github-app-credentials)
+- [Personal Access Token (PAT)](/user-guide/providers/github/authentication#personal-access-token-pat)
+- [OAuth App Token](/user-guide/providers/github/authentication#oauth-app-token)
+- [GitHub App Credentials](/user-guide/providers/github/authentication#github-app-credentials)
This flexibility enables scanning and analysis of GitHub accounts, including repositories, organizations, and applications, using the method that best suits the use case.
@@ -12,9 +14,12 @@ This flexibility enables scanning and analysis of GitHub accounts, including rep
Personal Access Tokens provide the simplest GitHub authentication method, but it can only access resources owned by a single user or organization.
-???+ warning "Classic Tokens Deprecated"
- GitHub has deprecated Personal Access Tokens (classic) in favor of fine-grained Personal Access Tokens. We recommend using fine-grained tokens as they provide better security through more granular permissions and resource-specific access control.
+
+**Classic Tokens Deprecated**
+GitHub has deprecated Personal Access Tokens (classic) in favor of fine-grained Personal Access Tokens. We recommend using fine-grained tokens as they provide better security through more granular permissions and resource-specific access control.
+
+
#### **Option 1: Create a Fine-Grained Personal Access Token (Recommended)**
1. **Navigate to GitHub Settings**
@@ -36,9 +41,12 @@ Personal Access Tokens provide the simplest GitHub authentication method, but it
- **Expiration**: Set an appropriate expiration date (recommended: 90 days or less)
- **Repository access**: Choose "All repositories" or "Only select repositories" based on your needs
- ???+ note "Public repositories"
+
+ **Public repositories**
+
Even if you select 'Only select repositories', the token will have access to the public repositories that you own or are a member of.
+
5. **Configure Token Permissions**
To enable Prowler functionality, configure the following permissions:
@@ -59,13 +67,16 @@ Personal Access Tokens provide the simplest GitHub authentication method, but it
- Copy the generated token immediately (GitHub displays tokens only once)
- Store tokens securely using environment variables
-
+
#### **Option 2: Create a Classic Personal Access Token (Not Recommended)**
-???+ warning "Security Risk"
- Classic tokens provide broad permissions that may exceed what Prowler actually needs. Use fine-grained tokens instead for better security.
+
+**Security Risk**
+Classic tokens provide broad permissions that may exceed what Prowler actually needs. Use fine-grained tokens instead for better security.
+
+
1. **Navigate to GitHub Settings**
- Open [GitHub](https://github.com) and sign in
- Click the profile picture in the top right corner
@@ -133,10 +144,19 @@ GitHub Apps provide the recommended integration method for accessing multiple re
2. **Create New GitHub App**
- Click "New GitHub App"
- Complete the required fields:
- - **GitHub App name**: Unique application name
- - **Homepage URL**: Application homepage
- - **Webhook URL**: Webhook payload URL (optional)
- - **Permissions**: Application permission requirements
+ - **GitHub App name**: Choose a unique, descriptive name (e.g., "Prowler Security Scanner")
+ - **Homepage URL**: Enter your organization's website or the Prowler documentation URL (e.g., `https://prowler.com` or `https://docs.prowler.com`). This is just for reference and doesn't affect functionality.
+ - **Webhook URL**: Leave blank or uncheck "Active" under Webhook. Prowler doesn't require webhooks since it performs on-demand scans rather than responding to GitHub events.
+ - **Webhook secret**: Leave blank (not needed for Prowler)
+ - **Permissions**: Configure in the next step (see below)
+
+
+ **About Homepage URL and Webhooks**
+
+ The Homepage URL is purely informational and can be any valid URL - it's just displayed to users who view the app. Use your company website, your GitHub organization URL, or even `https://docs.prowler.com`.
+
+ Webhooks are **not required** for Prowler. Since Prowler performs on-demand security scans when you run it (rather than automatically responding to GitHub events), you can safely disable webhooks or leave the URL blank.
+
3. **Configure Permissions**
To enable Prowler functionality, configure these permissions:
@@ -208,4 +228,3 @@ Choose the appropriate method based on use case:
### Organization Settings
- Some organizations restrict third-party applications
- Contact organization administrator if access is denied
-
diff --git a/docs/tutorials/github/getting-started-github.md b/docs/user-guide/providers/github/getting-started-github.mdx
similarity index 59%
rename from docs/tutorials/github/getting-started-github.md
rename to docs/user-guide/providers/github/getting-started-github.mdx
index 598e777182..41d472df61 100644
--- a/docs/tutorials/github/getting-started-github.md
+++ b/docs/user-guide/providers/github/getting-started-github.mdx
@@ -1,4 +1,6 @@
-# Getting Started with GitHub
+---
+title: 'Getting Started with GitHub'
+---
## Prowler App
@@ -8,49 +10,48 @@
### Step 1: Access Prowler Cloud/App
-1. Navigate to [Prowler Cloud](https://cloud.prowler.com/) or launch [Prowler App](../prowler-app.md)
+1. Navigate to [Prowler Cloud](https://cloud.prowler.com/) or launch [Prowler App](/user-guide/tutorials/prowler-app)
2. Go to "Configuration" > "Cloud Providers"
- 
+ 
3. Click "Add Cloud Provider"
- 
+ 
4. Select "GitHub"
- 
+ 
5. Add the GitHub Account ID (username or organization name) and an optional alias, then click "Next"
- 
+ 
### Step 2: Choose the preferred authentication method
6. Choose the preferred authentication method:
- 
+ 
7. Configure the authentication method:
-=== "Personal Access Token"
- 
+
+
+ 
- For more details on how to create a Personal Access Token, see [Authentication > Personal Access Token](./authentication.md#personal-access-token-pat).
-
-=== "OAuth App Token"
-
- 
-
- For more details on how to create an OAuth App Token, see [Authentication > OAuth App Token](./authentication.md#oauth-app-token).
-
-=== "GitHub App"
-
- 
-
- For more details on how to create a GitHub App, see [Authentication > GitHub App](./authentication.md#github-app-credentials).
+ For more details on how to create a Personal Access Token, see [Authentication > Personal Access Token](/user-guide/providers/github/authentication#personal-access-token-pat).
+
+
+ 
+ For more details on how to create an OAuth App Token, see [Authentication > OAuth App Token](/user-guide/providers/github/authentication#oauth-app-token).
+
+
+ 
+ For more details on how to create a GitHub App, see [Authentication > GitHub App](/user-guide/providers/github/authentication#github-app-credentials).
+
+
## Prowler CLI
### Automatic Login Method Detection
@@ -61,10 +62,11 @@ If no login method is explicitly provided, Prowler will automatically attempt to
2. `GITHUB_OAUTH_APP_TOKEN`
3. `GITHUB_APP_ID` and `GITHUB_APP_KEY` (where the key is the content of the private key file)
-???+ note
- Ensure the corresponding environment variables are set up before running Prowler for automatic detection when not specifying the login method.
+
+Ensure the corresponding environment variables are set up before running Prowler for automatic detection when not specifying the login method.
-For more details on how to set up authentication with GitHub, see [Authentication > GitHub](./authentication.md).
+
+For more details on how to set up authentication with GitHub, see [Authentication > GitHub](/user-guide/providers/github/authentication).
### Personal Access Token (PAT)
diff --git a/docs/user-guide/providers/github/img/add-github-account-id.png b/docs/user-guide/providers/github/img/add-github-account-id.png
new file mode 100644
index 0000000000..899d772c60
Binary files /dev/null and b/docs/user-guide/providers/github/img/add-github-account-id.png differ
diff --git a/docs/user-guide/providers/github/img/auth-github-app.png b/docs/user-guide/providers/github/img/auth-github-app.png
new file mode 100644
index 0000000000..ce7555f081
Binary files /dev/null and b/docs/user-guide/providers/github/img/auth-github-app.png differ
diff --git a/docs/user-guide/providers/github/img/auth-oauth.png b/docs/user-guide/providers/github/img/auth-oauth.png
new file mode 100644
index 0000000000..fd38330aa4
Binary files /dev/null and b/docs/user-guide/providers/github/img/auth-oauth.png differ
diff --git a/docs/user-guide/providers/github/img/auth-pat.png b/docs/user-guide/providers/github/img/auth-pat.png
new file mode 100644
index 0000000000..573640851e
Binary files /dev/null and b/docs/user-guide/providers/github/img/auth-pat.png differ
diff --git a/docs/user-guide/providers/github/img/github-pat-permissions.png b/docs/user-guide/providers/github/img/github-pat-permissions.png
new file mode 100644
index 0000000000..d666c70baa
Binary files /dev/null and b/docs/user-guide/providers/github/img/github-pat-permissions.png differ
diff --git a/docs/user-guide/providers/github/img/select-auth-method.png b/docs/user-guide/providers/github/img/select-auth-method.png
new file mode 100644
index 0000000000..cab2c844ce
Binary files /dev/null and b/docs/user-guide/providers/github/img/select-auth-method.png differ
diff --git a/docs/user-guide/providers/github/img/select-github.png b/docs/user-guide/providers/github/img/select-github.png
new file mode 100644
index 0000000000..5208e658d0
Binary files /dev/null and b/docs/user-guide/providers/github/img/select-github.png differ
diff --git a/docs/tutorials/iac/authentication.md b/docs/user-guide/providers/iac/authentication.mdx
similarity index 95%
rename from docs/tutorials/iac/authentication.md
rename to docs/user-guide/providers/iac/authentication.mdx
index 9258e8cc91..cea25ec02f 100644
--- a/docs/tutorials/iac/authentication.md
+++ b/docs/user-guide/providers/iac/authentication.mdx
@@ -1,4 +1,6 @@
-# IaC Authentication in Prowler
+---
+title: "IaC Authentication in Prowler"
+---
Prowler's Infrastructure as Code (IaC) provider enables you to scan local or remote infrastructure code for security and compliance issues using [Trivy](https://trivy.dev/). This provider supports a wide range of IaC frameworks and requires no cloud authentication for local scans.
diff --git a/docs/tutorials/iac/getting-started-iac.md b/docs/user-guide/providers/iac/getting-started-iac.mdx
similarity index 91%
rename from docs/tutorials/iac/getting-started-iac.md
rename to docs/user-guide/providers/iac/getting-started-iac.mdx
index 1e4d3db189..a3efb0f2df 100644
--- a/docs/tutorials/iac/getting-started-iac.md
+++ b/docs/user-guide/providers/iac/getting-started-iac.mdx
@@ -1,4 +1,6 @@
-# Getting Started with the IaC Provider
+---
+title: "Getting Started with the IaC Provider"
+---
Prowler's Infrastructure as Code (IaC) provider enables scanning of local or remote infrastructure code for security and compliance issues using [Trivy](https://trivy.dev/). This provider supports a wide range of IaC frameworks, allowing assessment of code before deployment.
@@ -16,8 +18,8 @@ The IaC provider leverages [Trivy](https://trivy.dev/latest/docs/scanner/vulnera
- The IaC provider scans local directories (or specified paths) for supported IaC files, or scans remote repositories.
- No cloud credentials or authentication are required for local scans.
- For remote repository scans, authentication can be provided via [git URL](https://git-scm.com/docs/git-clone#_git_urls), CLI flags or environment variables.
- - Check the [IaC Authentication](./authentication.md) page for more details.
-- Mutelist logic is handled by Trivy, not Prowler.
+ - Check the [IaC Authentication](/user-guide/providers/iac/authentication) page for more details.
+- Mutelist logic ([filtering](https://trivy.dev/latest/docs/configuration/filtering/)) is handled by Trivy, not Prowler.
- Results are output in the same formats as other Prowler providers (CSV, JSON, HTML, etc.).
## Prowler CLI
diff --git a/docs/tutorials/kubernetes/in-cluster.md b/docs/user-guide/providers/kubernetes/in-cluster.mdx
similarity index 51%
rename from docs/tutorials/kubernetes/in-cluster.md
rename to docs/user-guide/providers/kubernetes/in-cluster.mdx
index ac645c0010..8367cb1c85 100644
--- a/docs/tutorials/kubernetes/in-cluster.md
+++ b/docs/user-guide/providers/kubernetes/in-cluster.mdx
@@ -1,4 +1,6 @@
-# In-Cluster Execution
+---
+title: 'In-Cluster Execution'
+---
For in-cluster execution, use the supplied yaml files inside `/kubernetes`:
@@ -18,21 +20,26 @@ kubectl get pods --namespace prowler-ns --> prowler-XXXXX
kubectl logs prowler-XXXXX --namespace prowler-ns
```
-???+ note
- By default, `prowler` will scan all namespaces in your active Kubernetes context. Use the [`--namespace`](https://docs.prowler.com/projects/prowler-open-source/en/latest/tutorials/kubernetes/namespace/) flag to specify the namespace(s) to be scanned.
+
+By default, `prowler` will scan all namespaces in your active Kubernetes context. Use the [`--namespace`](https://docs.prowler.com/projects/prowler-open-source/en/latest/tutorials/kubernetes/namespace/) flag to specify the namespace(s) to be scanned.
-???+ tip "Identifying the cluster in reports"
- When running in in-cluster mode, the Kubernetes API does not expose the actual cluster name by default.
+
+
+**Identifying the cluster in reports**
- To uniquely identify the cluster in logs and reports, you can:
+When running in in-cluster mode, the Kubernetes API does not expose the actual cluster name by default.
- - Use the `--cluster-name` flag to manually set the cluster name:
- ```bash
- prowler -p kubernetes --cluster-name production-cluster
- ```
- - Or set the `CLUSTER_NAME` environment variable:
- ```yaml
- env:
- - name: CLUSTER_NAME
- value: production-cluster
- ```
+To uniquely identify the cluster in logs and reports, you can:
+
+- Use the `--cluster-name` flag to manually set the cluster name:
+```bash
+prowler -p kubernetes --cluster-name production-cluster
+```
+- Or set the `CLUSTER_NAME` environment variable:
+```yaml
+env:
+ - name: CLUSTER_NAME
+ value: production-cluster
+```
+
+
diff --git a/docs/tutorials/kubernetes/misc.md b/docs/user-guide/providers/kubernetes/misc.mdx
similarity index 97%
rename from docs/tutorials/kubernetes/misc.md
rename to docs/user-guide/providers/kubernetes/misc.mdx
index c91f7c5702..49d80ea69a 100644
--- a/docs/tutorials/kubernetes/misc.md
+++ b/docs/user-guide/providers/kubernetes/misc.mdx
@@ -1,4 +1,6 @@
-# Miscellaneous
+---
+title: 'Miscellaneous'
+---
## Context Filtering in Prowler
diff --git a/docs/user-guide/providers/kubernetes/outside-cluster.mdx b/docs/user-guide/providers/kubernetes/outside-cluster.mdx
new file mode 100644
index 0000000000..8c45e7607e
--- /dev/null
+++ b/docs/user-guide/providers/kubernetes/outside-cluster.mdx
@@ -0,0 +1,22 @@
+---
+title: 'Non In-Cluster Execution'
+---
+
+For execution outside the cluster environment, specify the location of the [kubeconfig](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) file using the following argument:
+
+```console
+prowler kubernetes --kubeconfig-file /path/to/kubeconfig
+```
+
+
+If no `--kubeconfig-file` is provided, Prowler will use the default KubeConfig file location (`~/.kube/config`).
+
+
+
+`prowler` will scan the active Kubernetes context by default. Use the [`--context`](https://docs.prowler.com/projects/prowler-open-source/en/latest/tutorials/kubernetes/context/) flag to specify the context to be scanned.
+
+
+
+By default, `prowler` will scan all namespaces in your active Kubernetes context. Use the [`--namespace`](https://docs.prowler.com/projects/prowler-open-source/en/latest/tutorials/kubernetes/namespace/) flag to specify the namespace(s) to be scanned.
+
+
diff --git a/docs/tutorials/llm/getting-started-llm.md b/docs/user-guide/providers/llm/getting-started-llm.mdx
similarity index 98%
rename from docs/tutorials/llm/getting-started-llm.md
rename to docs/user-guide/providers/llm/getting-started-llm.mdx
index de497bc873..94256b3ee2 100644
--- a/docs/tutorials/llm/getting-started-llm.md
+++ b/docs/user-guide/providers/llm/getting-started-llm.mdx
@@ -1,4 +1,6 @@
-# Getting Started With LLM on Prowler
+---
+title: "Getting Started With LLM on Prowler"
+---
## Overview
@@ -139,4 +141,3 @@ redteam:
- id: mitre:atlas
numTests: 5
```
-
diff --git a/docs/tutorials/microsoft365/authentication.md b/docs/user-guide/providers/microsoft365/authentication.mdx
similarity index 51%
rename from docs/tutorials/microsoft365/authentication.md
rename to docs/user-guide/providers/microsoft365/authentication.mdx
index 429245706b..a569008d52 100644
--- a/docs/tutorials/microsoft365/authentication.md
+++ b/docs/user-guide/providers/microsoft365/authentication.mdx
@@ -1,22 +1,26 @@
-# Microsoft 365 Authentication in Prowler
+---
+title: "Microsoft 365 Authentication in Prowler"
+---
Prowler for Microsoft 365 supports multiple authentication types. Authentication methods vary between Prowler App and Prowler CLI:
**Prowler App:**
-- [**Service Principal Application**](#service-principal-authentication-recommended) (**Recommended**)
-- [**Service Principal with User Credentials**](#service-principal-and-user-credentials-authentication) (Deprecated)
+- [**Application Certificate Authentication**](#certificate-based-authentication) (**Recommended**)
+- [**Application Client Secret Authentication**](#client-secret-authentication)
**Prowler CLI:**
-- [**Service Principal Application**](#service-principal-authentication-recommended) (**Recommended**)
-- [**Interactive browser authentication**](#interactive-browser-authentication)
+- [**Application Certificate Authentication**](#certificate-based-authentication) (**Recommended**)
+- [**Application Client Secret Authentication**](#client-secret-authentication)
+- [**Azure CLI Authentication**](#azure-cli-authentication)
+- [**Interactive Browser Authentication**](#interactive-browser-authentication)
## Required Permissions
To run the full Prowler provider, including PowerShell checks, two types of permission scopes must be set in **Microsoft Entra ID**.
-### Service Principal Authentication Permissions (Recommended)
+### Application Permissions for App-Only Authentication
When using service principal authentication, add these **Application Permissions**:
@@ -32,107 +36,202 @@ When using service principal authentication, add these **Application Permissions
- `Exchange.ManageAsApp` from external API `Office 365 Exchange Online`: Required for Exchange PowerShell module app authentication. The `Global Reader` role must also be assigned to the app.
- `application_access` from external API `Skype and Teams Tenant Admin API`: Required for Teams PowerShell module app authentication.
-???+ note
- `Directory.Read.All` can be replaced with `Domain.Read.All` for more restrictive permissions, but Entra checks related to DirectoryRoles and GetUsers will not run. If using this option, you must also add the `Organization.Read.All` permission to the service principal application for authentication.
+
+`Directory.Read.All` can be replaced with `Domain.Read.All` for more restrictive permissions, but Entra checks related to DirectoryRoles and GetUsers will not run. If using this option, you must also add the `Organization.Read.All` permission to the application registration for authentication.
-???+ note
- This is the **recommended authentication method** because it allows running the full M365 provider including PowerShell checks, providing complete coverage of all available security checks.
+
+
+These permissions enable application-based authentication methods (client secret and certificate). Using certificate-based authentication is the recommended way to run the full M365 provider, including PowerShell checks.
+
### Browser Authentication Permissions
When using browser authentication, permissions are delegated to the user, so the user must have the appropriate permissions rather than the application.
-???+ warning
- With browser authentication, you will only be able to run checks that work through MS Graph API. PowerShell module checks will not be executed.
+
+Browser and Azure CLI authentication methods limit scanning capabilities to checks that operate through Microsoft Graph API. Checks requiring PowerShell modules will not execute, as they need application-level permissions that cannot be delegated through browser authentication.
+
### Step-by-Step Permission Assignment
-#### Create Service Principal Application
+#### Create Application Registration
1. Access **Microsoft Entra ID**
- 
+ 
2. Navigate to "Applications" > "App registrations"
- 
+ 
3. Click "+ New registration", complete the form, and click "Register"
- 
+ 
4. Go to "Certificates & secrets" > "Client secrets" > "+ New client secret"
- 
+ 
5. Fill in the required fields and click "Add", then copy the generated value (this will be `AZURE_CLIENT_SECRET`)
- 
+ 
#### Grant Microsoft Graph API Permissions
1. Go to App Registration > Select your Prowler App > click on "API permissions"
- 
+ 
2. Click "+ Add a permission" > "Microsoft Graph" > "Application permissions"
- 
+ 
3. Search and select the required permissions:
- - `AuditLog.Read.All`: Required for Entra service
- - `Directory.Read.All`: Required for all services
- - `Policy.Read.All`: Required for all services
- - `SharePointTenantSettings.Read.All`: Required for SharePoint service
- 
+ - `AuditLog.Read.All`: Required for Entra service
+ - `Directory.Read.All`: Required for all services
+ - `Policy.Read.All`: Required for all services
+ - `SharePointTenantSettings.Read.All`: Required for SharePoint service
- 
+ 
-4. Click "Add permissions", then click "Grant admin consent for "
+ 
-#### Grant PowerShell Module Permissions (For Service Principal Authentication)
+4. Click "Add permissions", then click "Grant admin consent for ``"
+#### Grant PowerShell Module Permissions
1. **Add Exchange API:**
- - Search and select "Office 365 Exchange Online" API in **APIs my organization uses**
+ - Search and select "Office 365 Exchange Online" API in **APIs my organization uses**
- 
+ 
- - Select "Exchange.ManageAsApp" permission and click "Add permissions"
+ - Select "Exchange.ManageAsApp" permission and click "Add permissions"
- 
+ 
- - Assign `Global Reader` role to the app: Go to `Roles and administrators` > click `here` for directory level assignment
+ - Assign `Global Reader` role to the app: Go to `Roles and administrators` > click `here` for directory level assignment
- 
+ 
- - Search for `Global Reader` and assign it to your application
+ - Search for `Global Reader` and assign it to your application
- 
+ 
2. **Add Teams API:**
- - Search and select "Skype and Teams Tenant Admin API" in **APIs my organization uses**
+ - Search and select "Skype and Teams Tenant Admin API" in **APIs my organization uses**
- 
+ 
- - Select "application_access" permission and click "Add permissions"
+ - Select "application_access" permission and click "Add permissions"
- 
+ 
-3. Click "Grant admin consent for " to grant admin consent
+3. Click "Grant admin consent for ``" to grant admin consent
- 
+ 
+
+Final permissions should look like this:
+
+
+
+
+
+## Application Certificate Authentication (Recommended)
+
+_Available for both Prowler App and Prowler CLI_
+
+**Authentication flag for CLI:** `--certificate-auth`
+
+Certificate-based authentication replaces the client secret with an X.509 certificate that signs Microsoft Entra ID tokens for the Prowler application registration.
+
+This is the recommended approach for production environments because it avoids long-lived secrets, supports the full provider (including PowerShell checks), and simplifies unattended automation. Microsoft also recommends certificate credentials for app-only access, see [Manage certificates for applications](https://learn.microsoft.com/en-us/entra/identity-platform/certificate-credentials).
-## Service Principal Authentication (Recommended)
+### Generate the Certificate
-*Available for both Prowler App and Prowler CLI*
+The service principal needs a certificate that contains the private key locally (for Prowler) and the public key uploaded to Microsoft Entra ID. The following commands show a secure baseline workflow on macOS or Linux using OpenSSL:
+
+```console
+# 1. Create a private key (keep this file private; do not upload it to the portal)
+openssl genrsa -out prowlerm365.key 2048
+
+# 2. Create a self-signed certificate valid for two years
+openssl req -x509 -new -nodes -key prowlerm365.key -sha256 -days 730 -out prowlerm365.cer -subj "/CN=ProwlerM365Cert"
+
+# 3. Package the key and certificate into a passwordless PFX bundle for Prowler
+openssl pkcs12 -export \
+ -out prowlerm365.pfx \
+ -inkey prowlerm365.key \
+ -in prowlerm365.cer \
+ -passout pass:
+```
+
+
+Guard `prowlerm365.key` and `prowlerm365.pfx`. Only upload the `.cer` file to the Entra ID portal. Rotate or revoke the certificate before it expires or if there is any suspicion of exposure.
+
+
+
+If your organization uses a certificate authority, you can replace step 2 with a CSR workflow and import the signed certificate instead.
+
+### Upload the Certificate to Microsoft Entra ID
+
+1. Open **Microsoft Entra ID** > **App registrations** > your application.
+2. Go to **Certificates & secrets** > **Certificates**.
+3. Select **Upload certificate** and choose `prowlerm365.cer`.
+4. Confirm the certificate appears with the expected expiration date.
+
+After the certificate is in place, encode the PFX file so it can be stored in an environment variable (macOS/Linux example):
+
+```console
+base64 -i prowlerm365.pfx -o prowlerm365.pfx.b64
+cat prowlerm365.pfx.b64 | tr -d '\n'
+```
+
+Copy the resulting single-line Base64 string (or the contents of `prowlerm365.pfx.b64`)—you will use it in the next step.
+
+### Provide the Certificate to Prowler
+
+You can supply the private certificate to Prowler in two ways:
+
+- **Environment variables (recommended for headless execution)**
+
+ ```console
+ export AZURE_CLIENT_ID="00000000-0000-0000-0000-000000000000"
+ export AZURE_TENANT_ID="11111111-1111-1111-1111-111111111111"
+ export M365_CERTIFICATE_CONTENT="$(base64 < prowlerm365.pfx | tr -d '\n')"
+ ```
+
+ The `M365_CERTIFICATE_CONTENT` variable must contain a single-line Base64 string. Remove any line breaks or spaces before exporting.
+
+- **Local file path**
+
+ Store the PFX securely and reference it when you run the CLI:
+
+ ```console
+ python3 prowler-cli.py m365 --certificate-auth --certificate-path /secure/path/prowlerm365.pfx
+ ```
+
+ The CLI still needs `AZURE_CLIENT_ID` and `AZURE_TENANT_ID` in the environment when you use `--certificate-path`.
+
+For the **Prowler App**, paste the Base64-encoded PFX in the `certificate_content` field when you configure the provider secrets. The platform persists the encrypted certificate and supplies it during scans.
+
+
+Do not mix certificate authentication with a client secret. Provide either a certificate **or** a secret to the application registration and Prowler configuration.
+
+
+
+
+
+
+## Application Client Secret Authentication
+
+_Available for both Prowler App and Prowler CLI_
**Authentication flag for CLI:** `--sp-env-auth`
-Authenticate using the **Service Principal Application** by configuring the following environment variables:
+Authenticate using a **Microsoft Entra application registration with a client secret** by configuring the following environment variables:
```console
export AZURE_CLIENT_ID="XXXXXXXXX"
@@ -146,13 +245,61 @@ Refer to the [Step-by-Step Permission Assignment](#step-by-step-permission-assig
If the external API permissions described in the mentioned section above are not added only checks that work through MS Graph will be executed. This means that the full provider will not be executed.
-???+ note
- In order to scan all the checks from M365 required permissions to the service principal application must be added. Refer to the [PowerShell Module Permissions](#grant-powershell-module-permissions-for-service-principal-authentication) section for more information.
+This workflow is helpful for initial validation or temporary access. Plan to transition to certificate-based authentication to remove long-lived secrets and keep full provider coverage in unattended environments.
+
+To scan every M365 check, ensure the required permissions are added to the application registration. Refer to the [PowerShell Module Permissions](#grant-powershell-module-permissions-for-app-only-authentication) section for more information.
+
+
+
+### Run Prowler with Certificate Authentication
+
+After the variables or path are in place, run the Microsoft 365 provider as usual:
+
+```console
+python3 prowler-cli.py m365 --certificate-auth --init-modules --log-level ERROR
+```
+
+The command above initializes PowerShell modules if needed. You can combine other standard flags (for example, `--region M365USGovernment` or custom outputs) with `--certificate-auth`.
+
+Prowler prints the certificate thumbprint during execution so you can confirm the correct credential is in use.
+
+
+## Azure CLI Authentication
+
+_Available only for Prowler CLI_
+
+**Authentication flag for CLI:** `--az-cli-auth`
+
+Azure CLI authentication relies on the identity that is already signed in with the Azure CLI. Before running Prowler, make sure you have an active CLI session in the target tenant:
+
+```console
+az login --tenant
+# Optional: enforce the tenant when several are available
+az account set --tenant
+```
+
+If you prefer to reuse the same service principal that powers certificate-based authentication, authenticate it through Azure CLI instead of exporting environment variables. Azure CLI expects the certificate in PEM format; convert the PFX produced earlier and sign in:
+
+```console
+openssl pkcs12 -in prowlerm365.pfx -out prowlerm365.pem -nodes
+az login --service-principal \
+ --username \
+ --password /secure/path/prowlerm365.pem \
+ --tenant
+```
+
+After the CLI session is authenticated, launch Prowler with the Azure CLI flag:
+
+```console
+python3 prowler-cli.py m365 --az-cli-auth
+```
+
+The Azure CLI identity must hold the same Microsoft Graph and external API permissions required for the full provider. Signing in with a user account limits the scan to delegated Microsoft Graph endpoints and skips PowerShell-based checks. Use a service principal with the necessary application permissions to keep complete coverage.
## Interactive Browser Authentication
-*Available only for Prowler CLI*
+_Available only for Prowler CLI_
**Authentication flag:** `--browser-auth`
@@ -167,6 +314,7 @@ Since this is a **delegated permission** authentication method, necessary permis
PowerShell is required to run certain M365 checks.
**Supported versions:**
+
- **PowerShell 7.4 or higher** (7.5 is recommended)
#### Why Is PowerShell 7.4+ Required?
@@ -174,23 +322,24 @@ PowerShell is required to run certain M365 checks.
- **PowerShell 5.1** (default on some Windows systems) does not support required cmdlets.
- Older [cross-platform PowerShell versions](https://learn.microsoft.com/en-us/powershell/scripting/install/powershell-support-lifecycle?view=powershell-7.5) are **unsupported**, leading to potential errors.
-???+ note
- Installing PowerShell is only necessary if you install Prowler via **pip or other sources**. **SDK and API containers include PowerShell by default.**
+
+Installing PowerShell is only necessary if you install Prowler via **pip or other sources**. **SDK and API containers include PowerShell by default.**
+
### Installing PowerShell
Installing PowerShell is different depending on your OS:
-=== "Windows"
-
+
+
[Windows](https://learn.microsoft.com/es-es/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.5#install-powershell-using-winget-recommended): PowerShell must be updated to version 7.4+ for Prowler to function properly. Otherwise, some checks will not show findings and the provider may not function properly. This version of PowerShell is [supported](https://learn.microsoft.com/es-es/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.4#supported-versions-of-windows) on Windows 10, Windows 11, Windows Server 2016 and higher versions.
```console
winget install --id Microsoft.PowerShell --source winget
```
-=== "MacOS"
-
+
+
[MacOS](https://learn.microsoft.com/es-es/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.5#install-the-latest-stable-release-of-powershell): installing PowerShell on MacOS needs to have installed [brew](https://brew.sh/), once installed, simply run the command shown above, Pwsh is only supported in macOS 15 (Sequoia) x64 and Arm64, macOS 14 (Sonoma) x64 and Arm64, macOS 13 (Ventura) x64 and Arm64
```console
@@ -199,8 +348,8 @@ Installing PowerShell is different depending on your OS:
Once it's installed run `pwsh` on your terminal to verify it's working.
-=== "Linux (Ubuntu)"
-
+
+
[Ubuntu](https://learn.microsoft.com/es-es/powershell/scripting/install/install-ubuntu?view=powershell-7.5#installation-via-package-repository-the-package-repository): The required version for installing PowerShell +7.4 on Ubuntu are Ubuntu 22.04 and Ubuntu 24.04.
The recommended way to install it is downloading the package available on PMC.
@@ -239,8 +388,8 @@ Installing PowerShell is different depending on your OS:
pwsh
```
-=== "Linux (Alpine)"
-
+
+
[Alpine](https://learn.microsoft.com/es-es/powershell/scripting/install/install-alpine?view=powershell-7.5#installation-steps): The only supported version for installing PowerShell +7.4 on Alpine is Alpine 3.20. The unique way to install it is downloading the tar.gz package available on [PowerShell github](https://github.com/PowerShell/PowerShell/releases/download/v7.5.0/powershell-7.5.0-linux-musl-x64.tar.gz).
Follow these steps:
@@ -285,8 +434,8 @@ Installing PowerShell is different depending on your OS:
pwsh
```
-=== "Linux (Debian)"
-
+
+
[Debian](https://learn.microsoft.com/es-es/powershell/scripting/install/install-debian?view=powershell-7.5#installation-on-debian-11-or-12-via-the-package-repository): The required version for installing PowerShell +7.4 on Debian are Debian 11 and Debian 12. The recommended way to install it is downloading the package available on PMC.
Follow these steps:
@@ -324,9 +473,8 @@ Installing PowerShell is different depending on your OS:
pwsh
```
-
-=== "Linux (RHEL)"
-
+
+
[Rhel](https://learn.microsoft.com/es-es/powershell/scripting/install/install-rhel?view=powershell-7.5#installation-via-the-package-repository): The required version for installing PowerShell +7.4 on Red Hat are RHEL 8 and RHEL 9. The recommended way to install it is downloading the package available on PMC.
Follow these steps:
@@ -359,8 +507,8 @@ Installing PowerShell is different depending on your OS:
sudo dnf install powershell -y
```
-=== "Docker"
-
+
+
[Docker](https://learn.microsoft.com/es-es/powershell/scripting/install/powershell-in-docker?view=powershell-7.5#use-powershell-in-a-container): The following command download the latest stable versions of PowerShell:
```console
@@ -373,7 +521,8 @@ Installing PowerShell is different depending on your OS:
docker run -it mcr.microsoft.com/dotnet/sdk:9.0 pwsh
```
-
+
+
### Required PowerShell Modules
Prowler relies on several PowerShell cmdlets to retrieve necessary data.
@@ -388,19 +537,20 @@ Example command:
```console
python3 prowler-cli.py m365 --verbose --log-level ERROR --sp-env-auth --init-modules
```
+
If the modules are already installed, running this command will not cause issues—it will simply verify that the necessary modules are available.
-???+ note
- Prowler installs the modules using `-Scope CurrentUser`.
- If you encounter any issues with services not working after the automatic installation, try installing the modules manually using `-Scope AllUsers` (administrator permissions are required for this).
- The command needed to install a module manually is:
- ```powershell
- Install-Module -Name "ModuleName" -Scope AllUsers -Force
- ```
+
+Prowler installs the modules using `-Scope CurrentUser`.
+If you encounter any issues with services not working after the automatic installation, try installing the modules manually using `-Scope AllUsers` (administrator permissions are required for this).
+The command needed to install a module manually is:
+```powershell
+Install-Module -Name "ModuleName" -Scope AllUsers -Force
+```
+
#### Modules Version
+- [MSAL.PS](https://www.powershellgallery.com/packages/MSAL.PS/4.32.0): Required for Exchange module via application authentication.
- [ExchangeOnlineManagement](https://www.powershellgallery.com/packages/ExchangeOnlineManagement/3.6.0) (Minimum version: 3.6.0) Required for checks across Exchange, Defender, and Purview.
- [MicrosoftTeams](https://www.powershellgallery.com/packages/MicrosoftTeams/6.6.0) (Minimum version: 6.6.0) Required for all Teams checks.
-- [MSAL.PS](https://www.powershellgallery.com/packages/MSAL.PS/4.32.0): Required for Exchange module via application authentication.
-- [MSAL.PS](https://www.powershellgallery.com/packages/MSAL.PS/4.32.0): Required for Exchange module via application authentication.
diff --git a/docs/user-guide/providers/microsoft365/getting-started-m365.mdx b/docs/user-guide/providers/microsoft365/getting-started-m365.mdx
new file mode 100644
index 0000000000..19844b9347
--- /dev/null
+++ b/docs/user-guide/providers/microsoft365/getting-started-m365.mdx
@@ -0,0 +1,119 @@
+---
+title: 'Getting Started With Microsoft 365 on Prowler'
+---
+
+
+**Government Cloud Support**
+
+Government cloud accounts or tenants (Microsoft 365 Government) are currently unsupported, but we expect to add support for them in the near future.
+
+
+## Prerequisites
+
+Configure authentication for Microsoft 365 by following the [Microsoft 365 Authentication](/user-guide/providers/microsoft365/authentication) guide. This includes:
+
+- Registering an application in Microsoft Entra ID
+- Granting all required Microsoft Graph and external API permissions
+- Generating the application certificate (recommended) or client secret
+- Setting up PowerShell module permissions (for full security coverage)
+
+## Prowler App
+
+### Step 1: Obtain Domain ID
+
+1. Go to the Entra ID portal, then search for "Domain" or go to Identity > Settings > Domain Names
+
+ 
+
+ 
+
+2. Select the domain to use as unique identifier for the Microsoft 365 account in Prowler App
+
+### Step 2: Access Prowler App
+
+1. Go to [Prowler Cloud](https://cloud.prowler.com/) or launch [Prowler App](/user-guide/tutorials/prowler-app)
+2. Navigate to "Configuration" > "Cloud Providers"
+
+ 
+
+3. Click on "Add Cloud Provider"
+
+ 
+
+4. Select "Microsoft 365"
+
+ 
+
+5. Add the Domain ID and an optional alias, then click "Next"
+
+ 
+
+### Step 3: Select Authentication Method and Provide Credentials
+
+Prowler App now separates Microsoft 365 authentication into two app-only options. After adding the Domain ID, choose the method that matches your setup:
+
+
+
+#### Application Certificate Authentication (Recommended)
+
+1. Copy the Application (client) ID and Tenant ID from the app registration overview page.
+2. Paste both values into the Prowler App form.
+3. Upload the PFX bundle or paste the Base64-encoded certificate (`M365_CERTIFICATE_CONTENT`), then click **Test Connection**.
+
+
+
+Use this method whenever possible to avoid managing client secrets and to unlock every Microsoft 365 check, including those that require PowerShell modules.
+
+#### Application Client Secret Authentication
+
+1. From the app registration, copy the Application (client) ID and Tenant ID.
+2. Paste both values plus the client secret into the Prowler App form.
+3. Click **Test Connection** to validate the credentials.
+
+
+
+
+### Step 4: Launch the Scan
+
+1. Review the summary, then click **Next**.
+
+ 
+
+2. Click **Launch Scan** to start auditing Microsoft 365.
+
+ 
+
+---
+
+## Prowler CLI
+
+Use Prowler CLI to scan Microsoft 365 environments.
+
+### PowerShell Requirements
+
+PowerShell 7.4+ is required for comprehensive Microsoft 365 security coverage. Installation instructions are available in the [Authentication guide](/user-guide/providers/microsoft365/authentication#supported-powershell-versions).
+
+### Authentication Options
+
+Select an authentication method from the [Microsoft 365 Authentication](/user-guide/providers/microsoft365/authentication) guide:
+
+- **Application Certificate Authentication** (recommended): `--certificate-auth`
+- **Application Client Secret Authentication**: `--sp-env-auth`
+- **Azure CLI Authentication**: `--az-cli-auth`
+- **Interactive Browser Authentication**: `--browser-auth`
+
+### Basic Usage
+
+After configuring authentication, run a basic scan:
+
+```console
+prowler m365 --sp-env-auth
+```
+
+For comprehensive scans including PowerShell checks:
+
+```console
+prowler m365 --sp-env-auth --init-modules
+```
+
+---
diff --git a/docs/user-guide/providers/microsoft365/img/add-app-api-permission.png b/docs/user-guide/providers/microsoft365/img/add-app-api-permission.png
new file mode 100644
index 0000000000..f05e113e9e
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/add-app-api-permission.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/add-assginments.png b/docs/user-guide/providers/microsoft365/img/add-assginments.png
new file mode 100644
index 0000000000..af073a1d99
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/add-assginments.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/add-delegated-api-permission.png b/docs/user-guide/providers/microsoft365/img/add-delegated-api-permission.png
new file mode 100644
index 0000000000..8dc7f200df
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/add-delegated-api-permission.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/add-domain-id.png b/docs/user-guide/providers/microsoft365/img/add-domain-id.png
new file mode 100644
index 0000000000..ba1a4cf440
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/add-domain-id.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/api-permissions-page.png b/docs/user-guide/providers/microsoft365/img/api-permissions-page.png
new file mode 100644
index 0000000000..32a7cf2e9e
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/api-permissions-page.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/app-overview.png b/docs/user-guide/providers/microsoft365/img/app-overview.png
new file mode 100644
index 0000000000..1a2cf7b2ab
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/app-overview.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/app-permissions.png b/docs/user-guide/providers/microsoft365/img/app-permissions.png
new file mode 100644
index 0000000000..eb330ee552
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/app-permissions.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/app-registration-menu.png b/docs/user-guide/providers/microsoft365/img/app-registration-menu.png
new file mode 100644
index 0000000000..7f1dffe36e
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/app-registration-menu.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/assign-global-reader-role.png b/docs/user-guide/providers/microsoft365/img/assign-global-reader-role.png
new file mode 100644
index 0000000000..ccd656c54a
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/assign-global-reader-role.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/certificates-and-secrets.png b/docs/user-guide/providers/microsoft365/img/certificates-and-secrets.png
new file mode 100644
index 0000000000..264d7c2f9d
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/certificates-and-secrets.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/click-next-m365.png b/docs/user-guide/providers/microsoft365/img/click-next-m365.png
new file mode 100644
index 0000000000..50fed40735
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/click-next-m365.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/custom-domain-names.png b/docs/user-guide/providers/microsoft365/img/custom-domain-names.png
new file mode 100644
index 0000000000..f0a234c89f
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/custom-domain-names.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/directory-permission-delegated.png b/docs/user-guide/providers/microsoft365/img/directory-permission-delegated.png
new file mode 100644
index 0000000000..cafa05d82c
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/directory-permission-delegated.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/directory-permission.png b/docs/user-guide/providers/microsoft365/img/directory-permission.png
new file mode 100644
index 0000000000..3a539d2d63
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/directory-permission.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/exchange-permission.png b/docs/user-guide/providers/microsoft365/img/exchange-permission.png
new file mode 100644
index 0000000000..29084600c2
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/exchange-permission.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/final-permissions-m365.png b/docs/user-guide/providers/microsoft365/img/final-permissions-m365.png
new file mode 100644
index 0000000000..601f032a8d
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/final-permissions-m365.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/final-permissions.png b/docs/user-guide/providers/microsoft365/img/final-permissions.png
new file mode 100644
index 0000000000..f3bed7981e
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/final-permissions.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/global-reader-role.png b/docs/user-guide/providers/microsoft365/img/global-reader-role.png
new file mode 100644
index 0000000000..270f1f574b
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/global-reader-role.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/global-reader.png b/docs/user-guide/providers/microsoft365/img/global-reader.png
new file mode 100644
index 0000000000..a219e7d07e
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/global-reader.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/grant-admin-consent-delegated.png b/docs/user-guide/providers/microsoft365/img/grant-admin-consent-delegated.png
new file mode 100644
index 0000000000..d87903e271
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/grant-admin-consent-delegated.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/grant-admin-consent-for-role.png b/docs/user-guide/providers/microsoft365/img/grant-admin-consent-for-role.png
new file mode 100644
index 0000000000..773c72b824
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/grant-admin-consent-for-role.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/grant-admin-consent.png b/docs/user-guide/providers/microsoft365/img/grant-admin-consent.png
new file mode 100644
index 0000000000..0b242308f9
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/grant-admin-consent.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/grant-external-api-permissions.png b/docs/user-guide/providers/microsoft365/img/grant-external-api-permissions.png
new file mode 100644
index 0000000000..0492e25dc3
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/grant-external-api-permissions.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/here.png b/docs/user-guide/providers/microsoft365/img/here.png
new file mode 100644
index 0000000000..9c0f947c07
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/here.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/launch-scan.png b/docs/user-guide/providers/microsoft365/img/launch-scan.png
new file mode 100644
index 0000000000..07601cf63a
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/launch-scan.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/m365-credentials.png b/docs/user-guide/providers/microsoft365/img/m365-credentials.png
new file mode 100644
index 0000000000..ab912f9d8e
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/m365-credentials.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/microsoft-entra-id.png b/docs/user-guide/providers/microsoft365/img/microsoft-entra-id.png
new file mode 100644
index 0000000000..11d61387ef
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/microsoft-entra-id.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/new-client-secret.png b/docs/user-guide/providers/microsoft365/img/new-client-secret.png
new file mode 100644
index 0000000000..2a02652351
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/new-client-secret.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/new-registration.png b/docs/user-guide/providers/microsoft365/img/new-registration.png
new file mode 100644
index 0000000000..8366966afa
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/new-registration.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/search-default-domain.png b/docs/user-guide/providers/microsoft365/img/search-default-domain.png
new file mode 100644
index 0000000000..3e0be42b8b
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/search-default-domain.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/search-domain-names.png b/docs/user-guide/providers/microsoft365/img/search-domain-names.png
new file mode 100644
index 0000000000..21cd081afa
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/search-domain-names.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/search-exchange-api.png b/docs/user-guide/providers/microsoft365/img/search-exchange-api.png
new file mode 100644
index 0000000000..5c4514c168
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/search-exchange-api.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/search-skype-teams-tenant-admin-api.png b/docs/user-guide/providers/microsoft365/img/search-skype-teams-tenant-admin-api.png
new file mode 100644
index 0000000000..0009f3c05c
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/search-skype-teams-tenant-admin-api.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/select-m365-prowler-cloud.png b/docs/user-guide/providers/microsoft365/img/select-m365-prowler-cloud.png
new file mode 100644
index 0000000000..6507c89839
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/select-m365-prowler-cloud.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/teams-permission.png b/docs/user-guide/providers/microsoft365/img/teams-permission.png
new file mode 100644
index 0000000000..734a24f184
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/teams-permission.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/user-domains.png b/docs/user-guide/providers/microsoft365/img/user-domains.png
new file mode 100644
index 0000000000..e499a066fc
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/user-domains.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/user-info-page.png b/docs/user-guide/providers/microsoft365/img/user-info-page.png
new file mode 100644
index 0000000000..f0e2152fe0
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/user-info-page.png differ
diff --git a/docs/user-guide/providers/microsoft365/img/user-role-page.png b/docs/user-guide/providers/microsoft365/img/user-role-page.png
new file mode 100644
index 0000000000..53688d59b7
Binary files /dev/null and b/docs/user-guide/providers/microsoft365/img/user-role-page.png differ
diff --git a/docs/tutorials/microsoft365/use-of-powershell.md b/docs/user-guide/providers/microsoft365/use-of-powershell.mdx
similarity index 75%
rename from docs/tutorials/microsoft365/use-of-powershell.md
rename to docs/user-guide/providers/microsoft365/use-of-powershell.mdx
index 5861120b0d..35d0cd00ca 100644
--- a/docs/tutorials/microsoft365/use-of-powershell.md
+++ b/docs/user-guide/providers/microsoft365/use-of-powershell.mdx
@@ -1,12 +1,16 @@
+---
+title: 'Installing PowerShell'
+---
+
PowerShell is required by this provider because it is the only way to retrieve data from certain Microsoft 365 services.
## Installing PowerShell
If you are using Prowler Cloud, you don't need to worry about PowerShell — it is already installed in our infrastructure.
However, if you want to run Prowler on your own, you must have PowerShell installed to execute the full M365 provider and retrieve all findings.
-To learn more about how to install PowerShell and which versions are supported, click [here](../../tutorials/microsoft365/authentication.md#supported-powershell-versions).
+To learn more about how to install PowerShell and which versions are supported, click [here](/user-guide/providers/microsoft365/authentication#supported-powershell-versions).
## Required Modules
The necessary modules will not be installed automatically by Prowler. Nevertheless, if you want Prowler to install them for you, you can execute the provider with the flag `--init-modules`, which will run the script to install and import them.
-If you want to learn more about this process or you are running some issues with this, click [here](../../tutorials/microsoft365/authentication.md#required-powershell-modules).
+If you want to learn more about this process or you are running some issues with this, click [here](/user-guide/providers/microsoft365/authentication#required-powershell-modules).
diff --git a/docs/tutorials/mongodbatlas/authentication.md b/docs/user-guide/providers/mongodbatlas/authentication.mdx
similarity index 73%
rename from docs/tutorials/mongodbatlas/authentication.md
rename to docs/user-guide/providers/mongodbatlas/authentication.mdx
index fd836d7146..f0a6d6408e 100644
--- a/docs/tutorials/mongodbatlas/authentication.md
+++ b/docs/user-guide/providers/mongodbatlas/authentication.mdx
@@ -1,4 +1,6 @@
-# MongoDB Atlas Authentication
+---
+title: 'MongoDB Atlas Authentication'
+---
MongoDB Atlas provider uses [HTTP Digest Authentication with API key pairs consisting of a public key and private key](https://www.mongodb.com/docs/atlas/configure-api-access/#grant-programmatic-access-to-service).
@@ -12,10 +14,11 @@ MongoDB Atlas API keys require appropriate permissions to perform security check
The IP address where Prowler runs must be added to the IP Access List of the MongoDB Atlas organization API key. To skip this step and use the API key across all IP address types, uncheck the "Require IP Access List for the Atlas Administration API" button in Organization Settings. This setting is [enabled by default](https://www.mongodb.com/docs/atlas/configure-api-access/#optional--require-an-ip-access-list-for-the-atlas-administration-api).
-???+ warning
- To ensure the check `organizations_api_access_list_required` passes, enable the API access list for the organization and add the execution IP to the organization's IP Access List. When running checks from Prowler Cloud, add our IP to the IP Access List.
+
+To ensure the check `organizations_api_access_list_required` passes, enable the API access list for the organization and add the execution IP to the organization's IP Access List. When running checks from Prowler Cloud, add our IP to the IP Access List.
-
+
+
## API Key
@@ -25,26 +28,26 @@ The IP address where Prowler runs must be added to the IP Access List of the Mon
- Click "Access Manager" and "Organization Access":
- 
+ 
- Then click the "Applications" tab inside the Access Manager:
- 
+ 
3. **Select API Keys Tab**: Click the "API Keys" tab that appears in the image above
4. **Create API Key**: Click "Create API Key" and provide a description
- 
+ 
5. **Set Permissions**: Recommend project permissions for enhanced security; modify them after creating the key
- 
+ 
6. **Save Credentials**: Record both the public and private keys, then store them securely
- 
+ 
7. **Add IP Access List**: Add the IP address where Prowler runs to the API Key's IP Access List. To skip this step and use the API key for all IP addresses, uncheck the "Require IP Access List for the Atlas Administration API" button in [Organization Settings](#required-permissions), though this is not recommended.
- 
+ 
diff --git a/docs/tutorials/mongodbatlas/getting-started-mongodbatlas.md b/docs/user-guide/providers/mongodbatlas/getting-started-mongodbatlas.mdx
similarity index 94%
rename from docs/tutorials/mongodbatlas/getting-started-mongodbatlas.md
rename to docs/user-guide/providers/mongodbatlas/getting-started-mongodbatlas.mdx
index 53f1bea982..1610187a0b 100644
--- a/docs/tutorials/mongodbatlas/getting-started-mongodbatlas.md
+++ b/docs/user-guide/providers/mongodbatlas/getting-started-mongodbatlas.mdx
@@ -1,4 +1,6 @@
-# Getting Started with MongoDB Atlas
+---
+title: 'Getting Started with MongoDB Atlas'
+---
## Prowler CLI
diff --git a/docs/user-guide/providers/mongodbatlas/img/access-manager.png b/docs/user-guide/providers/mongodbatlas/img/access-manager.png
new file mode 100644
index 0000000000..1f7bf21839
Binary files /dev/null and b/docs/user-guide/providers/mongodbatlas/img/access-manager.png differ
diff --git a/docs/user-guide/providers/mongodbatlas/img/add-ip.png b/docs/user-guide/providers/mongodbatlas/img/add-ip.png
new file mode 100644
index 0000000000..8e6fd8a021
Binary files /dev/null and b/docs/user-guide/providers/mongodbatlas/img/add-ip.png differ
diff --git a/docs/user-guide/providers/mongodbatlas/img/copy-key.png b/docs/user-guide/providers/mongodbatlas/img/copy-key.png
new file mode 100644
index 0000000000..a4624480c5
Binary files /dev/null and b/docs/user-guide/providers/mongodbatlas/img/copy-key.png differ
diff --git a/docs/user-guide/providers/mongodbatlas/img/create-api-key.png b/docs/user-guide/providers/mongodbatlas/img/create-api-key.png
new file mode 100644
index 0000000000..5d73c1236d
Binary files /dev/null and b/docs/user-guide/providers/mongodbatlas/img/create-api-key.png differ
diff --git a/docs/user-guide/providers/mongodbatlas/img/ip-access-list.png b/docs/user-guide/providers/mongodbatlas/img/ip-access-list.png
new file mode 100644
index 0000000000..43d407fd54
Binary files /dev/null and b/docs/user-guide/providers/mongodbatlas/img/ip-access-list.png differ
diff --git a/docs/user-guide/providers/mongodbatlas/img/modify-permission.png b/docs/user-guide/providers/mongodbatlas/img/modify-permission.png
new file mode 100644
index 0000000000..47d186aa1a
Binary files /dev/null and b/docs/user-guide/providers/mongodbatlas/img/modify-permission.png differ
diff --git a/docs/user-guide/providers/mongodbatlas/img/organization-access.png b/docs/user-guide/providers/mongodbatlas/img/organization-access.png
new file mode 100644
index 0000000000..4a0a26e024
Binary files /dev/null and b/docs/user-guide/providers/mongodbatlas/img/organization-access.png differ
diff --git a/docs/user-guide/providers/oci/authentication.mdx b/docs/user-guide/providers/oci/authentication.mdx
new file mode 100644
index 0000000000..2ae73fb3af
--- /dev/null
+++ b/docs/user-guide/providers/oci/authentication.mdx
@@ -0,0 +1,474 @@
+---
+title: 'Oracle Cloud Infrastructure (OCI) Authentication'
+---
+
+This guide covers all authentication methods supported by Prowler for Oracle Cloud Infrastructure (OCI).
+
+## Authentication Methods
+
+Prowler supports the following authentication methods for OCI:
+
+1. **Config File Authentication** (using `~/.oci/config`)
+ - [OCI Session Authentication](#oci-session-authentication) **(Recommended)** - Automatically generates the config file via browser login
+ - [Manual API Key Setup](#setting-up-api-keys) - Manually create the config file with static API keys
+2. [Instance Principal Authentication](#instance-principal-authentication) - For Prowler running inside OCI compute instances
+3. [Environment Variables](#environment-variables) (Limited Support)
+
+**Important Note:** OCI Session Authentication and Manual API Key Setup both use the same config file-based authentication method. The only difference is how the `~/.oci/config` file is generated:
+- **Session Authentication**: Automatically created via browser login with temporary session tokens
+- **Manual Setup**: You manually generate static API keys and create the config file
+
+## OCI Session Authentication
+
+**This is the recommended method for config file authentication** as it automatically generates the config file and doesn't require managing static API keys.
+
+### Prerequisites
+
+You need to have the **OCI CLI installed** to use session authentication.
+
+For installation instructions, see the [OCI CLI Installation Guide](https://docs.oracle.com/en-us/iaas/Content/API/SDKDocs/cliinstall.htm).
+
+Verify your OCI CLI installation:
+```bash
+oci --version
+```
+
+### How It Works
+
+The `oci session authenticate` command uses your browser to authenticate and creates temporary session tokens that are more secure than static API keys.
+
+### Step 1: Authenticate with OCI Session
+
+```bash
+oci session authenticate
+```
+
+This command will:
+1. Open your default browser
+2. Redirect you to OCI Console login
+3. Automatically create/update `~/.oci/config` with session tokens
+4. Store session credentials securely
+
+### Step 2: Add User OCID to Config File
+
+After running `oci session authenticate`, you need to manually add your user OCID to the config file:
+
+**Get your user OCID from the OCI Console:**
+
+Navigate to: **Identity & Security** → **Users** → Click on your username → Copy the OCID
+
+
+
+Direct link: [OCI Console - Users](https://cloud.oracle.com/identity/domains/my-profile)
+
+Or use the OCI CLI:
+```bash
+oci iam user list --all
+```
+
+Edit `~/.oci/config` and add the `user` parameter:
+
+```ini
+[DEFAULT]
+region=us-ashburn-1
+tenancy=ocid1.tenancy.oc1..aaaaaaaexample
+fingerprint=11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:11
+key_file=/Users/yourusername/.oci/sessions/DEFAULT/oci_api_key.pem
+security_token_file=/Users/yourusername/.oci/sessions/DEFAULT/token
+user=ocid1.user.oc1..aaaaaaaexample # Add this line manually
+```
+
+### Step 3: Run Prowler
+
+```bash
+prowler oci
+```
+
+### Advantages of Session Authentication
+
+- **No Manual Key Generation**: No need to generate RSA key pairs manually
+- **Automatic Rotation**: Session tokens expire and can be refreshed
+- **Browser-Based Login**: Uses your existing OCI Console credentials
+- **More Secure**: Temporary credentials reduce the risk of long-term credential exposure
+
+### Session Expiration
+
+Session tokens typically expire after a period of time. When your session expires, simply run:
+
+```bash
+oci session authenticate
+```
+
+## Config File Authentication (Manual API Key Setup)
+
+If you prefer to manually generate API keys instead of using browser-based session authentication, you can create the config file yourself with static API keys.
+
+**Note:** This method uses the same `~/.oci/config` file as session authentication, but with static API keys instead of temporary session tokens.
+
+### Default Configuration
+
+By default, Prowler uses the OCI configuration file located at `~/.oci/config`.
+
+**Config file structure:**
+
+```ini
+[DEFAULT]
+user=ocid1.user.oc1..aaaaaaaexample
+fingerprint=11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:11
+tenancy=ocid1.tenancy.oc1..aaaaaaaexample
+region=us-ashburn-1
+key_file=~/.oci/oci_api_key.pem
+```
+
+**Run Prowler:**
+
+```bash
+prowler oci
+```
+
+### Multiple Profiles
+
+You can define multiple profiles in your config file:
+
+```ini
+[DEFAULT]
+user=ocid1.user.oc1..user1
+fingerprint=11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:11
+tenancy=ocid1.tenancy.oc1..tenancy1
+region=us-ashburn-1
+key_file=~/.oci/oci_api_key.pem
+
+[PRODUCTION]
+user=ocid1.user.oc1..user2
+fingerprint=aa:bb:cc:dd:ee:ff:11:22:33:44:55:66:77:88:99:00
+tenancy=ocid1.tenancy.oc1..tenancy2
+region=us-phoenix-1
+key_file=~/.oci/oci_api_key_prod.pem
+
+[DEVELOPMENT]
+user=ocid1.user.oc1..user3
+fingerprint=99:88:77:66:55:44:33:22:11:00:ff:ee:dd:cc:bb:aa
+tenancy=ocid1.tenancy.oc1..tenancy3
+region=us-ashburn-1
+key_file=~/.oci/oci_api_key_dev.pem
+```
+
+**Use a specific profile:**
+
+```bash
+prowler oci --profile PRODUCTION
+```
+
+### Custom Config File Path
+
+Use a config file from a custom location:
+
+```bash
+prowler oci --config-file /path/to/custom/config
+```
+
+### Setting Up API Keys
+
+#### Option A: Generate API Key Using OCI Console (Simpler)
+
+1. Log in to OCI Console
+2. Navigate to **Identity** → **Users** → Select your user
+3. In the **Resources** section, click **API Keys**
+4. Click **Add API Key**
+5. Select **Generate API Key Pair**
+6. Click **Download Private Key** - save this file as `~/.oci/oci_api_key.pem`
+7. Click **Add**
+8. The console will display a configuration file preview with:
+ - `user` OCID
+ - `fingerprint`
+ - `tenancy` OCID
+ - `region`
+
+9. **Copy the entire configuration snippet** from the console and paste it into `~/.oci/config`
+10. Add the `key_file` parameter pointing to your downloaded private key:
+
+```ini
+[DEFAULT]
+user=ocid1.user.oc1..aaaaaaaexample
+fingerprint=11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:11
+tenancy=ocid1.tenancy.oc1..aaaaaaaexample
+region=us-ashburn-1
+key_file=~/.oci/oci_api_key.pem # Add this line
+```
+
+11. Set proper permissions:
+```bash
+chmod 600 ~/.oci/oci_api_key.pem
+chmod 600 ~/.oci/config
+```
+
+#### Option B: Generate API Key Manually
+
+1. Generate the key pair locally:
+
+```bash
+mkdir -p ~/.oci
+openssl genrsa -out ~/.oci/oci_api_key.pem 2048
+chmod 600 ~/.oci/oci_api_key.pem
+openssl rsa -pubout -in ~/.oci/oci_api_key.pem -out ~/.oci/oci_api_key_public.pem
+```
+
+2. Upload the public key to OCI Console:
+ - Navigate to **Identity** → **Users** → Select your user
+ - In the **Resources** section, click **API Keys**
+ - Click **Add API Key**
+ - Select **Paste Public Key** or **Choose Public Key File**
+ - Paste or upload the contents of `~/.oci/oci_api_key_public.pem`
+ - Click **Add**
+
+3. The console will display the configuration file preview with your user OCID, fingerprint, tenancy OCID, and region.
+
+4. Copy the configuration snippet from the console and create `~/.oci/config`:
+
+```ini
+[DEFAULT]
+user=
+fingerprint=
+tenancy=
+region=
+key_file=~/.oci/oci_api_key.pem
+```
+
+5. Set proper permissions:
+```bash
+chmod 600 ~/.oci/config
+chmod 600 ~/.oci/oci_api_key.pem
+```
+
+#### Test Authentication
+
+After setting up your API keys with either option, test the authentication:
+
+```bash
+prowler oci --list-checks
+```
+
+## Instance Principal Authentication
+
+Instance Principal authentication allows OCI compute instances to authenticate without storing credentials.
+
+**IMPORTANT:** This authentication method **only works when Prowler is running inside an OCI compute instance**. If you're running Prowler from your local machine or outside OCI, use [OCI Session Authentication](#oci-session-authentication) or [Config File Authentication](#config-file-authentication) instead.
+
+### Prerequisites
+
+1. **Prowler must be running on an OCI compute instance**
+2. **Dynamic Group**: Create a dynamic group that includes your compute instance
+3. **Policy**: Create policies granting the dynamic group access to resources
+
+### Step 1: Create Dynamic Group
+
+1. Navigate to **Identity** → **Dynamic Groups**
+2. Click **Create Dynamic Group**
+3. Enter a name (e.g., `prowler-instances`)
+4. Add matching rule:
+ ```
+ instance.compartment.id = 'ocid1.compartment.oc1..example'
+ ```
+ Or for a specific instance:
+ ```
+ instance.id = 'ocid1.instance.oc1..example'
+ ```
+
+### Step 2: Create Policies
+
+Create a policy allowing the dynamic group to read resources:
+
+```
+Allow dynamic-group prowler-instances to inspect all-resources in tenancy
+Allow dynamic-group prowler-instances to read all-resources in tenancy
+Allow dynamic-group prowler-instances to read audit-events in tenancy
+Allow dynamic-group prowler-instances to read cloud-guard-config in tenancy
+```
+
+### Step 3: Run Prowler with Instance Principal
+
+On the compute instance, run:
+
+```bash
+prowler oci --use-instance-principal
+```
+
+### Use Cases for Instance Principal
+
+- **Automated Security Scanning**: Run Prowler on a schedule using cron
+- **CI/CD Pipelines**: Integrate security checks in build pipelines
+- **Centralized Security Monitoring**: Deploy Prowler on a dedicated security instance
+
+## Environment Variables
+
+While OCI SDK supports environment variables, Prowler currently focuses on config file and instance principal authentication for better security and manageability.
+
+If you need to use environment variables, they will be picked up by the OCI SDK:
+
+```bash
+export OCI_CLI_USER=ocid1.user.oc1..example
+export OCI_CLI_FINGERPRINT=11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:11
+export OCI_CLI_TENANCY=ocid1.tenancy.oc1..example
+export OCI_CLI_REGION=us-ashburn-1
+export OCI_CLI_KEY_FILE=~/.oci/oci_api_key.pem
+
+prowler oci
+```
+
+## Security Best Practices
+
+### API Key Security
+
+1. **Rotate API Keys Regularly**
+ - OCI recommends rotating API keys every 90 days
+ - Prowler includes a check for this: `identity_user_api_keys_rotated_90_days`
+
+2. **Use Separate Keys Per Environment**
+ - Development, staging, and production should use different API keys
+ - Use profiles to manage multiple environments
+
+3. **Restrict Key Permissions**
+ - Follow the principle of least privilege
+ - Grant only read permissions for security auditing
+
+4. **Secure Key Storage**
+ ```bash
+ chmod 600 ~/.oci/oci_api_key.pem
+ chmod 600 ~/.oci/config
+ ```
+
+5. **Never Commit Keys to Version Control**
+ - Add `~/.oci/` to `.gitignore`
+ - Use secret management systems for automation
+
+### Instance Principal Security
+
+1. **Use Specific Compartment Matching**
+ ```
+ instance.compartment.id = 'specific-compartment-ocid'
+ ```
+ Instead of:
+ ```
+ ANY {instance.compartment.id = 'ocid1'}
+ ```
+
+2. **Scope Policies Appropriately**
+ - Grant access only to required resources
+ - Use compartment-level policies when possible
+
+3. **Monitor Dynamic Group Membership**
+ - Regularly review which instances belong to security-related dynamic groups
+ - Use Cloud Guard to detect anomalous access patterns
+
+## Troubleshooting
+
+### Common Authentication Errors
+
+#### Error: "ConfigFileNotFound"
+
+**Cause**: OCI config file not found at default location
+
+**Solution**:
+```bash
+# Check if config file exists
+ls -la ~/.oci/config
+
+# Create directory if missing
+mkdir -p ~/.oci
+
+# Specify custom location
+prowler oci --config-file /path/to/config
+```
+
+#### Error: "InvalidKeyOrSignature"
+
+**Cause**: Incorrect API key fingerprint or key file
+
+**Solutions**:
+1. Verify fingerprint matches OCI Console:
+ ```bash
+ openssl rsa -pubout -outform DER -in ~/.oci/oci_api_key.pem | \
+ openssl md5 -c | \
+ awk '{print $2}'
+ ```
+
+2. Check key file path in config:
+ ```ini
+ key_file=~/.oci/oci_api_key.pem # Use absolute path if needed
+ ```
+
+3. Verify key permissions:
+ ```bash
+ chmod 600 ~/.oci/oci_api_key.pem
+ ```
+
+#### Error: "NotAuthenticated"
+
+**Cause**: User OCID, tenancy OCID, or credentials incorrect
+
+**Solutions**:
+1. Verify OCIDs in OCI Console
+2. Check that API key is uploaded to correct user
+3. Ensure user has not been deleted or disabled
+4. Test with OCI CLI:
+ ```bash
+ oci iam region list
+ ```
+
+#### Error: "InstancePrincipalNotEnabled"
+
+**Cause**: Instance Principal not configured correctly
+
+**Solutions**:
+1. Verify dynamic group includes your instance
+2. Check policies grant required permissions
+3. Ensure instance is in the correct compartment
+4. Test with:
+ ```bash
+ oci os ns get --auth instance_principal
+ ```
+
+### Permission Errors
+
+**Error**: "Authorization failed or requested resource not found"
+
+**Cause**: Insufficient IAM permissions
+
+**Solution**: Add required policies (see [Required Permissions](./getting-started-oci.md#required-permissions))
+
+### Configuration Validation
+
+Validate your OCI configuration:
+
+```bash
+# Test OCI CLI connectivity
+oci iam region list --profile DEFAULT
+
+# Test with specific profile
+oci iam region list --profile PRODUCTION
+
+# Test instance principal
+oci iam region list --auth instance_principal
+```
+
+## Testing Authentication
+
+Before running a full Prowler scan, test authentication:
+
+```bash
+# List available checks (requires authentication)
+prowler oci --list-checks
+
+# List available services
+prowler oci --list-services
+
+# Test connection only
+prowler oci --check identity_password_policy_minimum_length_14 --region us-ashburn-1
+```
+
+## Additional Resources
+
+- [OCI SDK Configuration](https://docs.oracle.com/en-us/iaas/Content/API/Concepts/sdkconfig.htm)
+- [OCI API Key Management](https://docs.oracle.com/en-us/iaas/Content/Identity/Tasks/managingcredentials.htm)
+- [OCI Instance Principals](https://docs.oracle.com/en-us/iaas/Content/Identity/Tasks/callingservicesfrominstances.htm)
+- [OCI IAM Policies](https://docs.oracle.com/en-us/iaas/Content/Identity/Concepts/policygetstarted.htm)
diff --git a/docs/user-guide/providers/oci/getting-started-oci.mdx b/docs/user-guide/providers/oci/getting-started-oci.mdx
new file mode 100644
index 0000000000..5d5d824ed2
--- /dev/null
+++ b/docs/user-guide/providers/oci/getting-started-oci.mdx
@@ -0,0 +1,376 @@
+---
+title: 'Getting Started with Oracle Cloud Infrastructure (OCI)'
+---
+
+Prowler supports security scanning of Oracle Cloud Infrastructure (OCI) environments. This guide will help you get started with using Prowler to audit your OCI tenancy.
+
+## Prerequisites
+
+Before you begin, ensure you have:
+
+1. **Prowler installed** with OCI dependencies:
+ ```bash
+ pip install prowler
+ # or for development:
+ poetry install
+ ```
+
+2. **OCI Python SDK** (automatically installed with Prowler):
+ ```bash
+ pip install oci==2.152.1
+ ```
+
+3. **OCI Account Access** with appropriate permissions to read resources in your tenancy.
+
+## Authentication
+
+Prowler supports multiple authentication methods for OCI. For detailed authentication setup, see the [OCI Authentication Guide](./authentication.mdx).
+
+**Note:** OCI Session Authentication and Config File Authentication both use the same `~/.oci/config` file. The difference is how the config file is generated - automatically via browser (session auth) or manually with API keys.
+
+### Quick Start: OCI Session Authentication (Recommended)
+
+The easiest and most secure method is using OCI session authentication, which automatically generates your config file via browser login.
+
+**Prerequisites:** You need to have the **OCI CLI installed**. See the [OCI CLI Installation Guide](https://docs.oracle.com/en-us/iaas/Content/API/SDKDocs/cliinstall.htm) for installation instructions.
+
+1. Authenticate using the OCI CLI:
+ ```bash
+ oci session authenticate
+ ```
+ This will open your browser for OCI Console login and automatically generate the config file.
+
+2. Add your user OCID to `~/.oci/config`:
+
+ **Get your user OCID from the OCI Console:**
+
+ Navigate to: **Identity & Security** → **Users** → Click on your username → Copy the OCID
+
+ 
+
+ Direct link: [OCI Console - Users](https://cloud.oracle.com/identity/domains/my-profile)
+
+ Or use the OCI CLI:
+ ```bash
+ oci iam user list --all
+ ```
+
+ Edit `~/.oci/config` and add the `user` parameter:
+ ```ini
+ [DEFAULT]
+ region=us-ashburn-1
+ tenancy=ocid1.tenancy.oc1..example
+ fingerprint=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx
+ key_file=/Users/yourusername/.oci/sessions/DEFAULT/oci_api_key.pem
+ security_token_file=/Users/yourusername/.oci/sessions/DEFAULT/token
+ user=ocid1.user.oc1..example # Add this line
+ ```
+
+3. Run Prowler:
+ ```bash
+ prowler oci
+ ```
+
+### Alternative: Manual API Key Setup
+
+If you prefer to manually generate API keys instead of using browser-based session authentication, see the detailed instructions in the [Authentication Guide](./authentication.mdx#config-file-authentication-manual-api-key-setup).
+
+**Note:** Both methods use the same `~/.oci/config` file - the difference is that manual setup uses static API keys while session authentication uses temporary session tokens.
+
+#### Using a Specific Profile
+
+If you have multiple profiles in your OCI config:
+
+```bash
+prowler oci --profile production
+```
+
+#### Using a Custom Config File
+
+```bash
+prowler oci --config-file /path/to/custom/config
+```
+
+### 2. Instance Principal Authentication
+
+**IMPORTANT:** This authentication method **only works when Prowler is running inside an OCI compute instance**. If you're running Prowler from your local machine, use [OCI Session Authentication](#quick-start-oci-session-authentication-recommended) instead.
+
+When running Prowler on an OCI Compute instance, you can use Instance Principal authentication:
+
+```bash
+prowler oci --use-instance-principal
+```
+
+**Requirements:**
+- **Prowler must be running on an OCI compute instance**
+- The compute instance must have a dynamic group and policy allowing access to OCI resources
+- Example policy:
+ ```
+ Allow dynamic-group prowler-instances to inspect all-resources in tenancy
+ Allow dynamic-group prowler-instances to read all-resources in tenancy
+ ```
+
+## Basic Usage
+
+### Scan Entire Tenancy
+
+```bash
+prowler oci
+```
+
+### Scan Specific Region
+
+```bash
+prowler oci --region us-phoenix-1
+```
+
+### Scan Specific Compartments
+
+```bash
+prowler oci --compartment-id ocid1.compartment.oc1..example1 ocid1.compartment.oc1..example2
+```
+
+### Run Specific Checks
+
+```bash
+prowler oci --check identity_password_policy_minimum_length_14
+```
+
+### Run Specific Services
+
+```bash
+prowler oci --service identity network
+```
+
+### Compliance Frameworks
+
+Run CIS OCI Foundations Benchmark v3.0:
+
+```bash
+prowler oci --compliance cis_3.0_oci
+```
+
+## Required Permissions
+
+Prowler requires **read-only** permissions to audit your OCI tenancy. Below are the minimum required permissions:
+
+### Tenancy-Level Policy
+
+Create a group `prowler-users` and add your user to it, then create this policy:
+
+```
+Allow group prowler-users to inspect all-resources in tenancy
+Allow group prowler-users to read all-resources in tenancy
+Allow group prowler-users to read audit-events in tenancy
+Allow group prowler-users to read cloud-guard-config in tenancy
+Allow group prowler-users to read cloud-guard-problems in tenancy
+Allow group prowler-users to read cloud-guard-targets in tenancy
+```
+
+### Service-Specific Permissions
+
+For more granular control, you can grant specific permissions:
+
+```
+# Identity
+Allow group prowler-users to inspect users in tenancy
+Allow group prowler-users to inspect groups in tenancy
+Allow group prowler-users to inspect policies in tenancy
+Allow group prowler-users to inspect authentication-policies in tenancy
+Allow group prowler-users to inspect dynamic-groups in tenancy
+
+# Networking
+Allow group prowler-users to inspect vcns in tenancy
+Allow group prowler-users to inspect subnets in tenancy
+Allow group prowler-users to inspect security-lists in tenancy
+Allow group prowler-users to inspect network-security-groups in tenancy
+Allow group prowler-users to inspect route-tables in tenancy
+Allow group prowler-users to inspect dhcp-options in tenancy
+Allow group prowler-users to inspect internet-gateways in tenancy
+Allow group prowler-users to inspect nat-gateways in tenancy
+Allow group prowler-users to inspect service-gateways in tenancy
+
+# Compute
+Allow group prowler-users to inspect instances in tenancy
+Allow group prowler-users to inspect instance-configurations in tenancy
+Allow group prowler-users to inspect boot-volumes in tenancy
+Allow group prowler-users to inspect volume-attachments in tenancy
+
+# Storage
+Allow group prowler-users to inspect buckets in tenancy
+Allow group prowler-users to inspect volumes in tenancy
+Allow group prowler-users to inspect file-systems in tenancy
+
+# Database
+Allow group prowler-users to inspect autonomous-databases in tenancy
+Allow group prowler-users to inspect db-systems in tenancy
+
+# Keys Management
+Allow group prowler-users to inspect vaults in tenancy
+Allow group prowler-users to inspect keys in tenancy
+
+# Monitoring & Events
+Allow group prowler-users to read metrics in tenancy
+Allow group prowler-users to inspect alarms in tenancy
+Allow group prowler-users to inspect ons-topics in tenancy
+Allow group prowler-users to inspect ons-subscriptions in tenancy
+Allow group prowler-users to inspect rules in tenancy
+```
+
+## Output Formats
+
+Prowler supports multiple output formats for OCI:
+
+### JSON
+```bash
+prowler oci --output-formats json
+```
+
+### CSV
+```bash
+prowler oci --output-formats csv
+```
+
+### HTML
+```bash
+prowler oci --output-formats html
+```
+
+### Multiple Formats
+```bash
+prowler oci --output-formats json csv html
+```
+
+## Common Scenarios
+
+### Security Assessment
+
+Full security assessment with CIS compliance:
+
+```bash
+prowler oci \
+ --compliance cis_3.0_oci \
+ --output-formats json html \
+ --output-directory ./oci-assessment-$(date +%Y%m%d)
+```
+
+### Continuous Monitoring
+
+Run specific security-critical checks:
+
+```bash
+prowler oci \
+ --check identity_user_mfa_enabled_console_access \
+ network_security_list_ingress_from_internet_to_ssh_port \
+ objectstorage_bucket_not_publicly_accessible \
+ --output-formats json
+```
+
+### Compartment-Specific Audit
+
+Audit a specific project compartment:
+
+```bash
+prowler oci \
+ --compartment-id ocid1.compartment.oc1..projecta \
+ --profile production \
+ --region us-ashburn-1
+```
+
+## Troubleshooting
+
+### Authentication Issues
+
+**Error: "Could not find a valid config file"**
+- Ensure `~/.oci/config` exists and is properly formatted
+- Verify the path to your API key is correct
+- Check file permissions: `chmod 600 ~/.oci/config ~/.oci/oci_api_key.pem`
+
+**Error: "Invalid key or signature"**
+- Verify the API key fingerprint matches the one in OCI Console
+- Ensure the public key is uploaded to your OCI user account
+- Check that the private key file is accessible
+
+### Permission Issues
+
+**Error: "Authorization failed or requested resource not found"**
+- Verify your user has the required policies (see [Required Permissions](#required-permissions))
+- Check that policies apply to the correct compartments
+- Ensure policies are not restricted by conditions that exclude your user
+
+### Region Issues
+
+**Error: "Invalid region"**
+- Check available regions: `prowler oci --list-regions`
+- Verify your tenancy is subscribed to the region
+- Use the region identifier (e.g., `us-ashburn-1`), not the display name
+
+## Advanced Usage
+
+### Using Mutelist
+
+Create a mutelist file to suppress specific findings:
+
+```yaml
+# oci-mutelist.yaml
+Tenancies:
+ - "ocid1.tenancy.oc1..example":
+ Checks:
+ "identity_password_policy_*":
+ Regions:
+ - "us-ashburn-1"
+ Resources:
+ - "ocid1.user.oc1..example"
+```
+
+Run with mutelist:
+
+```bash
+prowler oci --mutelist-file oci-mutelist.yaml
+```
+
+### Custom Checks Metadata
+
+Override check metadata:
+
+```yaml
+# custom-metadata.yaml
+identity_user_mfa_enabled_console_access:
+ Severity: critical
+ CheckTitle: "Custom: Ensure MFA is enabled for all console users"
+```
+
+Run with custom metadata:
+
+```bash
+prowler oci --custom-checks-metadata-file custom-metadata.yaml
+```
+
+### Filtering by Status
+
+Only show failed checks:
+
+```bash
+prowler oci --status FAIL
+```
+
+### Filtering by Severity
+
+Only show critical and high severity findings:
+
+```bash
+prowler oci --severity critical high
+```
+
+## Next Steps
+
+- Learn about [Compliance Frameworks](/user-guide/cli/tutorials/compliance) in Prowler
+- Review [Prowler Output Formats](/user-guide/cli/tutorials/reporting)
+- Explore [Integrations](/user-guide/cli/tutorials/integrations) with SIEM and ticketing systems
+
+## Additional Resources
+
+- [OCI Documentation](https://docs.oracle.com/en-us/iaas/Content/home.htm)
+- [CIS OCI Foundations Benchmark](https://www.cisecurity.org/benchmark/oracle_cloud)
+- [Prowler Documentation](https://docs.prowler.com)
+- [Prowler GitHub](https://github.com/prowler-cloud/prowler)
diff --git a/docs/user-guide/providers/oci/images/oci-user-ocid.png b/docs/user-guide/providers/oci/images/oci-user-ocid.png
new file mode 100644
index 0000000000..9993f40175
Binary files /dev/null and b/docs/user-guide/providers/oci/images/oci-user-ocid.png differ
diff --git a/docs/user-guide/providers/prowler-app-api-keys.mdx b/docs/user-guide/providers/prowler-app-api-keys.mdx
new file mode 100644
index 0000000000..f7a656e173
--- /dev/null
+++ b/docs/user-guide/providers/prowler-app-api-keys.mdx
@@ -0,0 +1,236 @@
+---
+title: 'API Keys'
+---
+
+API key authentication in Prowler App provides an alternative to JWT tokens and empowers automation, CI/CD pipelines, and third-party integrations. This guide explains how to create, manage, and safeguard API keys when working with the Prowler API.
+
+## API Key Advantages
+
+- **Programmatic access:** Enables automated workflows and scripts to interact with Prowler App.
+- **Long-lived authentication:** Allows optional expiration dates, with a default of 1 year.
+- **Granular control:** Supports multiple keys with distinct names and purposes.
+- **Secure automation:** Simplifies safe integration into CI/CD pipelines and infrastructure-as-code tooling.
+
+## How It Works
+
+API keys provide a secure authentication mechanism for accessing the Prowler API:
+
+1. API keys are created through Prowler App with a user-defined name and optional expiration date.
+2. The full API key appears only once upon creation and cannot be retrieved later.
+3. Each API key consists of a prefix (visible in the interface) and an encrypted secret portion.
+4. Requests include the API key in the header as `Authorization: Api-Key `.
+5. The system updates the Last Used timestamp after each authenticated request.
+6. API keys automatically inherit the RBAC permissions of the creator (see [Permission Inheritance](#permission-inheritance)).
+7. Revocation immediately disables an API key and prevents further access.
+
+### Example curl Request
+
+This example demonstrates how to invoke the Prowler API with an API key.
+
+1. Define the API key as an environment variable to avoid exposing the secret in shell history.
+2. Call the desired endpoint with `curl` and supply the `Authorization` header.
+
+```bash
+export PROWLER_API_KEY="pk_example_redacted"
+
+curl -X GET \
+ -H "Authorization: Api-Key ${PROWLER_API_KEY}" \
+ -H "Content-Type: application/vnd.api+json" \
+ https://api.prowler.com/api/v1/tenants
+```
+
+
+**Authentication Priority**
+
+When a request includes both a JWT token and an API key, the JWT token takes precedence for authentication.
+
+
+
+
+**Security Notice**
+
+API keys are equivalent to passwords and grant the same access level as the creator. Handle every key with password-level safeguards.
+
+
+
+## Required Permissions
+
+Creating, viewing, or managing API keys requires the **MANAGE_ACCOUNT** RBAC permission within the tenant. This permission governs all API key management operations.
+
+Without this permission, the API Keys section remains hidden. Access requests should be routed through the tenant administrator.
+
+For more information about RBAC permissions, refer to the [Prowler App RBAC documentation](/user-guide/tutorials/prowler-app-rbac).
+
+## Creating API Keys
+
+Follow these steps to create an API key in Prowler App:
+
+1. Navigate to **Profile** → **Account** in Prowler App.
+2. Select the **Create API Key** button.
+
+ 
+
+3. Configure the API key settings:
+ * **Name:** Provide a descriptive label with at least 3 characters (examples: "CI Pipeline Production", "Monitoring Script").
+ * **Expiration Date (optional):** Set a custom expiration date. When omitted, the key expires automatically 1 year (365 days) after creation.
+
+ 
+
+4. Select **Create API Key** to generate the key.
+5. **Important:** Copy and securely store the API key immediately. The full value appears only once and cannot be retrieved later.
+
+ 
+
+
+**Save the API Key Immediately**
+
+After the creation dialog closes, only the key prefix remains visible in the interface. Lost keys require generating a replacement and updating dependent applications.
+
+
+
+## Managing API Keys
+
+### Viewing API Keys
+
+The API Keys management interface displays every key associated with the signed-in account:
+
+1. Navigate to **Profile** → **Account**.
+2. Review the list of API keys, which includes:
+ * **Name:** The descriptive label assigned to the key.
+ * **Prefix:** The visible portion of the key for identification (for example, `pk_ABC12345`).
+ * **Email:** The email address of the creator.
+ * **Created:** The timestamp when the key was created.
+ * **Last Used:** The timestamp of the most recent successful authentication.
+ * **Expires:** The configured expiration date.
+ * **Status:** Whether the key is active or revoked.
+
+ 
+
+### Updating API Keys
+
+API keys support limited updates to maintain security:
+
+1. Locate the target API key in the list.
+2. Select **Edit name** from the action menu.
+3. Update the available field:
+ * **Name:** Modify the descriptive label for clearer identification.
+4. Review the fields that cannot be changed:
+ * Prefix, expiration date, and the secret itself remain immutable.
+ * Adjusting those properties requires creating a new API key and revoking the existing one.
+5. Select **Save** to apply the change.
+
+ 
+
+### Actions
+
+Each API key provides management actions through dedicated buttons or the action menu:
+
+| Action | Purpose | Effect | Notes |
+|--------|---------|--------|-------|
+| **Edit Name** | Update the key's descriptive name | Changes the display name only | Does not affect authentication |
+| **Revoke** | Disable the API key | Sets revoked status to true, blocking all authentication | Maintains audit trail and key history |
+
+
+**API Keys Cannot Be Deleted**
+
+For security and audit purposes, API keys cannot be permanently removed from the system. Use the **Revoke** action to disable a key. Revoked keys remain visible for audit purposes but cannot be used for authentication.
+
+
+
+## Permission Inheritance
+
+API keys automatically inherit the RBAC permissions of the creator, ensuring that programmatic access mirrors user-level security boundaries.
+
+### How Permission Inheritance Works
+
+* **Current permissions apply:** When an API key is used, it operates with the creator's current RBAC permissions.
+* **Dynamic updates:** Permission changes on the creator immediately propagate to every associated API key.
+* **User downgrade:** Reduced user permissions result in reduced API key capabilities.
+* **Tenant removal:** Removing a user from a tenant automatically revokes every key for that tenant.
+* **User deletion:** Deleting a user from the application automatically revokes all associated API keys.
+
+
+**Automatic Revocation**
+
+API keys are automatically revoked when the creator is removed from the tenant or deleted from the application. This mechanism ensures that access ends as soon as the user loses access.
+
+
+
+### Best Practices for Permission Management
+
+* **Use service accounts for automation:** Create dedicated user accounts for API-based automation to separate human and programmatic access, ensuring continuity when team members transition.
+* **Review API key ownership regularly:** Confirm that API keys remain associated with appropriate user accounts and document ownership.
+* **Monitor permission changes:** Track user permission updates because every change affects associated API keys.
+* **Plan for user offboarding:** Provision replacement API keys under service accounts before removing users to avoid disruptions.
+
+## Security Best Practices
+
+### Key Storage and Management
+
+* **Never commit API keys to version control:** Add them to `.gitignore` and rely on environment variables or secure secret management systems.
+* **Use secret managers:** Store keys in AWS Secrets Manager, HashiCorp Vault, Azure Key Vault, GitHub Secrets, or equivalent solutions.
+* **Rotate keys regularly:** Create new keys and revoke old ones on a scheduled basis as part of standard security hygiene.
+* **Set expiration dates:** Enforce automatic rotation and reduce risk by applying expiration dates.
+* **Monitor last used timestamps:** Review usage data to identify unused or potentially compromised keys.
+
+### Key Usage
+
+* **Create dedicated keys per application:** Isolate access by assigning separate keys to services, environments, or purposes.
+* **Use descriptive names:** Label keys clearly, such as "ci-pipeline-prod", "monitoring-staging", or "terraform-automation".
+* **Limit key distribution:** Share keys only with team members who require access.
+* **Revoke immediately on breach:** Replace exposed or compromised keys without delay.
+
+### Environment Variables
+
+Store API keys in environment variables rather than hardcoding them in scripts or configuration files. Platform-specific secret management systems (GitHub Secrets, GitLab CI/CD Variables, AWS Secrets Manager, HashiCorp Vault, and similar tools) are recommended for production environments.
+
+### CI/CD Integration Best Practices
+
+When using API keys in CI/CD pipelines:
+
+* **Use pipeline secrets:** Store keys in the CI/CD platform's secret management system.
+* **Mask in logs:** Ensure the platform masks API keys in build and deployment logs.
+* **Create pipeline-specific keys:** Issue separate keys for each pipeline or environment (development, staging, production).
+* **Set shorter expirations:** Apply shorter expiration periods (for example, 90 days) to enforce rotation.
+* **Use service accounts:** Create dedicated user accounts for CI/CD pipelines (see [Permission Inheritance](#permission-inheritance) for automatic revocation details).
+
+## Troubleshooting
+
+### Authentication Fails with "Invalid API Key"
+
+* Verify that the API key is copied correctly with no extra spaces, line breaks, or hidden characters.
+* Ensure the key has not been revoked by checking the Revoked column in the API Keys list.
+* Confirm that the key has not expired by reviewing the expiration date.
+* Confirm that the correct API key format is in use, including both prefix and secret portions.
+* Verify that the key prefix matches what is displayed in Prowler App.
+
+### API Key Not Working After Creation
+
+* Verify that the full API key was copied from the creation dialog, including both the prefix and encrypted portions.
+* Check that the key has not expired by reviewing the expiration date in the management interface.
+* Ensure the key is not revoked by reviewing its status in the API Keys list.
+* Confirm that authentication targets the correct Prowler API environment.
+
+### Last Used Timestamp Not Updating
+
+* The timestamp updates only on successful authentication requests.
+* Authentication failures prevent the timestamp from updating.
+* Verify that requests complete successfully and do not return authentication errors.
+* Check that the request reaches the Prowler API and is not blocked by network policies.
+
+### Need to Retrieve a Lost API Key
+
+* API keys cannot be retrieved after the creation dialog closes for security reasons.
+* Create a new API key to replace the lost one.
+* Update all applications and scripts that rely on the old key with the new value.
+* Revoke the old key after confirming that the new key works to prevent security issues.
+* Consider using a secret management system to avoid future loss.
+
+### Key Was Exposed or Compromised
+
+1. Immediately revoke the compromised key through the API Keys management interface.
+2. Review recent activity for unauthorized access using the Last Used timestamp.
+3. Create a new API key with a different name to replace the compromised one.
+4. Update all legitimate applications with the new key.
+5. Investigate the exposure to prevent similar incidents.
+6. Implement additional security measures or rely on service accounts for better isolation.
diff --git a/docs/integrations/PowerBI.md b/docs/user-guide/tutorials/PowerBI.mdx
similarity index 99%
rename from docs/integrations/PowerBI.md
rename to docs/user-guide/tutorials/PowerBI.mdx
index 7927cdc447..03faedd478 100644
--- a/docs/integrations/PowerBI.md
+++ b/docs/user-guide/tutorials/PowerBI.mdx
@@ -12,7 +12,7 @@
1. Prowler CLI -> Run a Prowler scan using the --compliance option
2. Prowler Cloud/App -> Navigate to the compliance section to download csv outputs

-
+
The template supports the following CIS Benchmarks only:
@@ -113,5 +113,3 @@ The requirement page has the following components:
## Walkthrough Video
[](https://www.youtube.com/watch?v=lfKFkTqBxjU)
-
-
diff --git a/docs/tutorials/bulk-provider-provisioning.md b/docs/user-guide/tutorials/bulk-provider-provisioning.mdx
similarity index 98%
rename from docs/tutorials/bulk-provider-provisioning.md
rename to docs/user-guide/tutorials/bulk-provider-provisioning.mdx
index 8a420c5bac..11e7f14cf8 100644
--- a/docs/tutorials/bulk-provider-provisioning.md
+++ b/docs/user-guide/tutorials/bulk-provider-provisioning.mdx
@@ -1,10 +1,12 @@
-# Bulk Provider Provisioning in Prowler
+---
+title: 'Bulk Provider Provisioning in Prowler'
+---
Prowler enables automated provisioning of multiple cloud providers through the Bulk Provider Provisioning tool. This approach streamlines the onboarding process for organizations managing numerous cloud accounts, subscriptions, and projects across AWS, Azure, GCP, Kubernetes, Microsoft 365, and GitHub.
The tool is available in the Prowler repository at: [util/prowler-bulk-provisioning](https://github.com/prowler-cloud/prowler/tree/master/util/prowler-bulk-provisioning)
-
+
## Overview
diff --git a/docs/tutorials/prowler-app-jira-integration.md b/docs/user-guide/tutorials/prowler-app-jira-integration.mdx
similarity index 90%
rename from docs/tutorials/prowler-app-jira-integration.md
rename to docs/user-guide/tutorials/prowler-app-jira-integration.mdx
index a931a63f77..a4eed1e494 100644
--- a/docs/tutorials/prowler-app-jira-integration.md
+++ b/docs/user-guide/tutorials/prowler-app-jira-integration.mdx
@@ -1,4 +1,6 @@
-# Jira Integration
+---
+title: "Jira Integration"
+---
Prowler App enables automatic export of security findings to Jira, providing seamless integration with Atlassian's work item tracking and project management platform. This comprehensive guide demonstrates how to configure and manage Jira integrations to streamline security incident management and enhance team collaboration across security workflows.
@@ -22,17 +24,20 @@ To configure Jira integration in Prowler App:
1. Navigate to **Integrations** in the Prowler App interface
2. Locate the **Jira** card and click **Manage**, then select **Add integration**
- 
+ 
3. Complete the integration settings:
* **Jira domain:** Enter the Jira domain (e.g., from `https://your-domain.atlassian.net` -> `your-domain`)
* **Email:** Your Jira account email
* **API Token:** API token with the following scopes: `read:jira-user`, `read:jira-work`, `write:jira-work`
- 
+ 
-!!! note "Generate Jira API Token"
- To generate a Jira API token, visit: https://id.atlassian.com/manage-profile/security/api-tokens
+
+**Generate Jira API Token**
+To generate a Jira API token, visit: https://id.atlassian.com/manage-profile/security/api-tokens
+
+
Once configured successfully, the integration is ready to send findings to Jira.
@@ -48,7 +53,7 @@ To manually send individual findings to Jira:
4. Select the Jira integration and project
5. Click **Send to Jira**
- 
+ 
## Integration Status
@@ -83,8 +88,10 @@ Each Jira integration provides management actions through dedicated buttons:
If the Jira issue does not appear in your Jira project, follow these steps to verify the export task status via the API.
-!!! note
- Replace `http://localhost:8080` with the base URL where your Prowler API is accessible (for example, `https://api.yourdomain.com`).
+
+Replace `http://localhost:8080` with the base URL where your Prowler API is accessible (for example, `https://api.yourdomain.com`).
+
+
1) Get an access token (replace email and password):
@@ -111,8 +118,10 @@ curl --location --globoff 'http://localhost:8080/api/v1/tasks?filter[name]=integ
--header 'Authorization: Bearer ACCESS_TOKEN' | jq
```
-!!! note
- If you don’t have `jq` installed, run the command without `| jq`.
+
+If you don't have `jq` installed, run the command without `| jq`.
+
+
3) Share the output so we can help. A typical result will look like:
diff --git a/docs/tutorials/prowler-app-lighthouse.md b/docs/user-guide/tutorials/prowler-app-lighthouse.mdx
similarity index 89%
rename from docs/tutorials/prowler-app-lighthouse.md
rename to docs/user-guide/tutorials/prowler-app-lighthouse.mdx
index 2524818c32..1ea3da3ac5 100644
--- a/docs/tutorials/prowler-app-lighthouse.md
+++ b/docs/user-guide/tutorials/prowler-app-lighthouse.mdx
@@ -1,8 +1,10 @@
-# Prowler Lighthouse AI
+---
+title: 'Prowler Lighthouse AI'
+---
Prowler Lighthouse AI is a Cloud Security Analyst chatbot that helps you understand, prioritize, and remediate security findings in your cloud environments. It's designed to provide security expertise for teams without dedicated resources, acting as your 24/7 virtual cloud security analyst.
-
+
## How It Works
@@ -13,15 +15,17 @@ Here's what's happening behind the scenes:
- The system uses a multi-agent architecture built with [LanggraphJS](https://github.com/langchain-ai/langgraphjs) for LLM logic and [Vercel AI SDK UI](https://sdk.vercel.ai/docs/ai-sdk-ui/overview) for frontend chatbot.
- It uses a ["supervisor" architecture](https://langchain-ai.lang.chat/langgraphjs/tutorials/multi_agent/agent_supervisor/) that interacts with different agents for specialized tasks. For example, `findings_agent` can analyze detected security findings, while `overview_agent` provides a summary of connected cloud accounts.
- The system connects to OpenAI models to understand, fetch the right data, and respond to the user's query.
-???+ note
- Lighthouse AI is tested against `gpt-4o` and `gpt-4o-mini` OpenAI models.
+
+Lighthouse AI is tested against `gpt-4o` and `gpt-4o-mini` OpenAI models.
+
- The supervisor agent is the main contact point. It is what users interact with directly from the chat interface. It coordinates with other agents to answer users' questions comprehensively.
-
+
-???+ note
- All agents can only read relevant security data. They cannot modify your data or access sensitive information like configured secrets or tenant details.
+
+All agents can only read relevant security data. They cannot modify your data or access sensitive information like configured secrets or tenant details.
+
## Set up
Getting started with Prowler Lighthouse AI is easy:
@@ -31,7 +35,7 @@ Getting started with Prowler Lighthouse AI is easy:
3. Select your preferred model. The recommended one for best results is `gpt-4o`.
4. (Optional) Add business context to improve response quality and prioritization.
-
+
### Adding Business Context
@@ -56,7 +60,7 @@ Ask questions in plain English about your security findings. Examples:
- "Show me all S3 buckets with public access."
- "What security issues were found in my production accounts?"
-
+
### Detailed Remediation Guidance
@@ -66,7 +70,7 @@ Get tailored step-by-step instructions for fixing security issues:
- Commands or console steps to implement fixes
- Alternative approaches with different solutions
-
+
### Enhanced Context and Analysis
@@ -76,9 +80,9 @@ Lighthouse AI can provide additional context to help you understand the findings
- Provide risk assessments based on your environment and context
- Connect related findings to show broader security patterns
-
+
-
+
## Important Notes
@@ -178,9 +182,10 @@ Not all Prowler API endpoints are integrated with Lighthouse AI. They are intent
- List OpenAI configuration - `/api/v1/lighthouse-config`
- Retrieve OpenAI key and configuration - `/api/v1/lighthouse-config/{id}`
-???+ note
- Agents only have access to hit GET endpoints. They don't have access to other HTTP methods.
+
+Agents only have access to hit GET endpoints. They don't have access to other HTTP methods.
+
## FAQs
**1. Why only OpenAI models?**
diff --git a/docs/tutorials/prowler-app-mute-findings.md b/docs/user-guide/tutorials/prowler-app-mute-findings.mdx
similarity index 89%
rename from docs/tutorials/prowler-app-mute-findings.md
rename to docs/user-guide/tutorials/prowler-app-mute-findings.mdx
index b169ed2be6..76b85f0e66 100644
--- a/docs/tutorials/prowler-app-mute-findings.md
+++ b/docs/user-guide/tutorials/prowler-app-mute-findings.mdx
@@ -1,4 +1,6 @@
-# Mute Findings (Mutelist)
+---
+title: 'Mute Findings (Mutelist)'
+---
Prowler App allows users to mute specific findings to focus on the most critical security issues. This comprehensive guide demonstrates how to effectively use the Mutelist feature to manage and prioritize security findings.
@@ -19,45 +21,47 @@ Before muting findings, ensure:
- A provider added to the Prowler App
- Understanding of the security implications of muting specific findings
-???+ warning
- Muting findings does not resolve underlying security issues. Review each finding carefully before muting to ensure it represents an acceptable risk or has been properly addressed.
+
+Muting findings does not resolve underlying security issues. Review each finding carefully before muting to ensure it represents an acceptable risk or has been properly addressed.
+
## Step 1: Add a provider
To configure Mutelist:
1. Log into Prowler App
2. Navigate to the providers page
-
+
3. Add a provider, then "Configure Muted Findings" button will be enabled in providers page and scans page
-
-
+
+
## Step 2: Configure Mutelist
1. Open the modal by clicking "Configure Muted Findings" button
-
-1. Provide a valid Mutelist in `YAML` format. More details about Mutelist [here](../tutorials/mutelist.md)
-
+
+1. Provide a valid Mutelist in `YAML` format. More details about Mutelist [here](/user-guide/cli/tutorials/mutelist)
+
If the YAML configuration is invalid, an error message will be displayed
-
-
+
+
## Step 3: Review the Mutelist
1. Once added, the configuration can be removed or updated
-
+
## Step 4: Check muted findings in the scan results
1. Run a new scan
2. Check the muted findings in the scan results
-
+
-???+ note
- The Mutelist configuration takes effect on the next scans.
+
+The Mutelist configuration takes effect on the next scans.
+
## Mutelist Ready To Use Examples
Below are examples for different cloud providers supported by Prowler App. Check how the mutelist works [here](https://docs.prowler.com/projects/prowler-open-source/en/latest/tutorials/mutelist/#how-the-mutelist-works).
@@ -118,9 +122,10 @@ Mutelist:
### Azure Provider
-???+ note
- For Azure provider, the Account ID is the Subscription Name and the Region is the Location.
+
+For Azure provider, the Account ID is the Subscription Name and the Region is the Location.
+
#### Basic Azure Mutelist
```yaml
Mutelist:
@@ -161,9 +166,10 @@ Mutelist:
### GCP Provider
-???+ note
- For GCP provider, the Account ID is the Project ID and the Region is the Zone.
+
+For GCP provider, the Account ID is the Project ID and the Region is the Zone.
+
#### Basic GCP Mutelist
```yaml
Mutelist:
@@ -202,9 +208,10 @@ Mutelist:
```
### Kubernetes Provider
-???+ note
- For Kubernetes provider, the Account ID is the Cluster Name and the Region is the Namespace.
+
+For Kubernetes provider, the Account ID is the Cluster Name and the Region is the Namespace.
+
#### Basic Kubernetes Mutelist
```yaml
Mutelist:
diff --git a/docs/tutorials/prowler-app-rbac.md b/docs/user-guide/tutorials/prowler-app-rbac.mdx
similarity index 64%
rename from docs/tutorials/prowler-app-rbac.md
rename to docs/user-guide/tutorials/prowler-app-rbac.mdx
index 0994f8cd98..8accc77488 100644
--- a/docs/tutorials/prowler-app-rbac.md
+++ b/docs/user-guide/tutorials/prowler-app-rbac.mdx
@@ -1,20 +1,24 @@
-# Managing Users and Role-Based Access Control (RBAC)
+---
+title: 'Managing Users and Role-Based Access Control (RBAC)'
+---
**Prowler App** supports multiple users within a single tenant, enabling seamless collaboration by allowing team members to easily share insights and manage security findings.
[Roles](#roles) help you control user permissions, determining what actions each user can perform and the data they can access within Prowler. By default, each account includes an immutable **admin** role, ensuring that your account always retains administrative access.
-???+ note
- If the account is created without an invitation, a new tenant will be provisioned for it. However, if the account is created through an invitation, the user will join the inviter’s tenant.
+
+If the account is created without an invitation, a new tenant will be provisioned for it. However, if the account is created through an invitation, the user will join the inviter’s tenant.
+
## Membership
To get to User-Invitation Management we will focus on the Membership section.
-???+ note
- **Only users that have the _Invite and Manage Users_ or _admin_ permission can access this section.**
+
+**Only users that have the _Invite and Manage Users_ or _admin_ permission can access this section.**
-
+
+
### Users
@@ -26,11 +30,11 @@ Follow these steps to edit a user of your account:
2. Click the edit button of the user you want to modify.
-
+
3. Edit the user fields you need and save your changes.
-
+
#### Removing a User
@@ -41,43 +45,45 @@ Follow these steps to remove a user of your account:
> **Note: Each user will be able to delete himself and not others, regardless of his permissions.**
-
+
### Invitations
#### Inviting Users
-???+note
- Please be aware that at this time, an email address can only be associated with a single Prowler account_.
+
+Please be aware that at this time, an email address can only be associated with a single Prowler account_.
+
Follow these steps to invite a user to your account:
1. Navigate to **Users** from the side menu.
2. Click the **Invite User** button on the top right-hand corner of the screen.
-
+
3. In the Invite User screen, enter the email address of the user you want to invite.
4. Pick a Role for the user. You can also change the roles for users and pending invites later. To learn more about the roles and what they can do, see [Roles](#roles).
-
+
5. Click the **Send Invitation** button to send the invitation to the user.
6. After clicking you will see a summary of the status of the invitation. You could access this view again from the invitation menu.
-
-
+
+
7. To allow the user to join your Prowler account you will need to share the link with the user. They will only need to access this URL and follow the steps to create a user and complete their registration. **Note: Invitations will expire after 7 days.**
-
+
-???+note
- If you are a [Prowler Cloud](https://cloud.prowler.com/sign-in) user, the invited user will receive an email with the link to accept the invitation.
+
+If you are a [Prowler Cloud](https://cloud.prowler.com/sign-in) user, the invited user will receive an email with the link to accept the invitation.
+
#### Editing Invitation
Follow these steps to edit an invitation:
@@ -86,8 +92,8 @@ Follow these steps to edit an invitation:
2. Click the edit button of the invitation and modify the email, the role or both. **Note: Editing an invitation will not reset its expiration time.**
-
-
+
+
#### Cancelling Invitation
@@ -97,7 +103,7 @@ Follow these steps to cancel an invitation:
2. Click the revoke button of the invitation.
-
+
#### Sending an Invitation Again
@@ -107,9 +113,10 @@ To resend the invitation to the user, it is necessary to explicitly **delete the
The Roles section in Prowler is designed to facilitate the assignment of custom user privileges. This section allows administrators to define roles with specific permissions for Prowler administrative tasks and Account visibility.
-???+ note
- **Only users that have the _Manage Account_ or _admin_ permission can access this section.**
+
+**Only users that have the _Manage Account_ or _admin_ permission can access this section.**
+
### Provider Groups
Provider Groups control visibility across specific providers. When creating a new role, you can assign specific groups to define their Cloud Provider visibility. This ensures that users with that role have access only to the Cloud Providers that are required.
@@ -128,7 +135,7 @@ Follow these steps to create a provider group in your account:
3. Click the **Create Group** button on the center of the screen.
-
+
#### Editing a Provider Group
@@ -138,11 +145,11 @@ Follow these steps to edit a provider group on your account:
2. Click the edit button of the provider group you want to modify.
-
+
3. Change the provider group parameters you need and save the changes.
-
+
#### Removing a Provider Group
@@ -152,7 +159,7 @@ Follow these steps to remove a provider group of your account:
2. Click on the delete button of the provider group you want to remove.
-
+
### Roles
@@ -164,18 +171,19 @@ Follow these steps to create a role for your account:
2. Click on the **Add Role** button on the top right-hand corner of the screen.
-
+
3. In the Add Role screen, enter the role name, the administration permissions and the groups of providers to which the Role will have access to.
4. In the Groups and Account Visibility section, you will see a list of available groups with checkboxes next to them. To assign a group to the user role, simply click the checkbox next to the group name. If you need to assign multiple groups, repeat the process for each group you wish to add.
-
+
-???+ note
- To assign read-only access, select only the `Unlimited Visibility` permission when creating the role. Then, go to the Users page and assign this role to the appropriate user.
+
+To assign read-only access, select only the `Unlimited Visibility` permission when creating the role. Then, go to the Users page and assign this role to the appropriate user.
+
#### Editing a Role
Follow these steps to edit a role on your account:
@@ -184,11 +192,11 @@ Follow these steps to edit a role on your account:
2. Click on the edit button of the role you want to modify.
-
+
3. Adjust the settings as needed and save the changes.
-
+
#### Removing a Role
@@ -199,17 +207,17 @@ Follow these steps to remove a role of your account:
2. Click on the delete button of the role you want to remove.
-
+
## RBAC Administrative Permissions
Assign administrative permissions by selecting from the following options:
-**Invite and Manage Users:** Invite new users and manage existing ones.
-**Manage Account:** Adjust account settings, delete users and read/manage users permissions.
-**Manage Scans:** Run and review scans.
-**Manage Cloud Providers:** Add or modify connected cloud providers.
+**Invite and Manage Users:** Invite new users and manage existing ones.
+**Manage Account:** Adjust account settings, delete users and read/manage users permissions.
+**Manage Scans:** Run and review scans.
+**Manage Cloud Providers:** Add or modify connected cloud providers.
**Manage Integrations:** Add or modify the Prowler Integrations.
To grant all administrative permissions, select the **Grant all admin permissions** option.
diff --git a/docs/tutorials/prowler-app-s3-integration.md b/docs/user-guide/tutorials/prowler-app-s3-integration.mdx
similarity index 83%
rename from docs/tutorials/prowler-app-s3-integration.md
rename to docs/user-guide/tutorials/prowler-app-s3-integration.mdx
index 83269f1a6b..8e8158b0c0 100644
--- a/docs/tutorials/prowler-app-s3-integration.md
+++ b/docs/user-guide/tutorials/prowler-app-s3-integration.mdx
@@ -1,19 +1,24 @@
-# Amazon S3 Integration
+---
+title: 'Amazon S3 Integration'
+---
**Prowler App** allows automatic export of scan results to Amazon S3 buckets, providing seamless integration with existing data workflows and storage infrastructure. This comprehensive guide demonstrates configuration and management of Amazon S3 integrations to streamline security finding management and reporting.
When enabled and configured, scan results are automatically stored in the configured bucket. Results are provided in `csv`, `html` and `json-ocsf` formats, offering flexibility for custom integrations:
-
-
-
+{/* TODO: remove the comment once the AWS Security Hub integration is completed */}
+{/* - json-asff */}
+{/*
+
+The `json-asff` file will be only present in your configured Amazon S3 Bucket if you have the AWS Security Hub integration enabled. You can get more information about that integration here.
+
+*/}
-???+ note
- Enabling this integration incurs costs in Amazon S3. Refer to [Amazon S3 pricing](https://aws.amazon.com/s3/pricing/) for more information.
+
+Enabling this integration incurs costs in Amazon S3. Refer to [Amazon S3 pricing](https://aws.amazon.com/s3/pricing/) for more information.
+
The Amazon S3 Integration provides the following capabilities:
- **Automate scan result exports** to designated S3 buckets after each scan
@@ -105,9 +110,10 @@ The S3 integration requires the following permissions. Add these to the IAM role
}
```
-???+ note
- Replace `` with the AWS account ID that owns the destination S3 bucket, and `` with the actual bucket name.
+
+Replace `` with the AWS account ID that owns the destination S3 bucket, and `` with the actual bucket name.
+
### Cross-Account S3 Bucket
If the S3 destination bucket is in a different AWS account than the one providing the credentials for S3 access, configure a bucket policy on the destination bucket to allow cross-account access.
@@ -118,19 +124,19 @@ The following diagrams illustrate the three common S3 integration scenarios:
When both the IAM credentials and destination S3 bucket are in the same AWS account, no additional bucket policy is required.
-
+
##### Cross-Account Setup (Bucket Policy Required)
When the S3 bucket is in a different AWS account, you must configure a bucket policy to allow cross-account access.
-
+
##### Multi-Account Setup (Multiple Principals in Bucket Policy)
When multiple AWS accounts need to write to the same destination bucket, configure the bucket policy with multiple principals.
-
+
#### S3 Bucket Policy
@@ -168,9 +174,10 @@ Apply the following bucket policy to the destination S3 bucket:
}
```
-???+ note
- Replace `` with the AWS account ID that contains the IAM role and `` with the destination bucket name. The role name `ProwlerScan` is the default name when using Prowler's permissions templates. If using a custom IAM role or different authentication method, replace `ProwlerScan` with the actual role name.
+
+Replace `` with the AWS account ID that contains the IAM role and `` with the destination bucket name. The role name `ProwlerScan` is the default name when using Prowler's permissions templates. If using a custom IAM role or different authentication method, replace `ProwlerScan` with the actual role name.
+
##### Multi-Account Configuration
For multiple AWS accounts, modify the `Principal` field to an array:
@@ -184,16 +191,18 @@ For multiple AWS accounts, modify the `Principal` field to an array:
}
```
-???+ note
- Replace `` with the AWS account ID that contains the IAM role and `` with the destination bucket name. The role name `ProwlerScan` is the default name when using Prowler's permissions templates. If using a custom IAM role or different authentication method, replace `ProwlerScan` with the actual role name.
+
+Replace `` with the AWS account ID that contains the IAM role and `` with the destination bucket name. The role name `ProwlerScan` is the default name when using Prowler's permissions templates. If using a custom IAM role or different authentication method, replace `ProwlerScan` with the actual role name.
+
### Available Templates
**Prowler App** provides Infrastructure as Code (IaC) templates to automate IAM role setup with S3 integration permissions.
-???+ note
- Templates are optional. Custom IAM roles or static credentials can be used instead.
+
+Templates are optional. Custom IAM roles or static credentials can be used instead.
+
Choose from the following deployment options:
- [CloudFormation](https://prowler-cloud-public.s3.eu-west-1.amazonaws.com/permissions/templates/aws/cloudformation/prowler-scan-role.yml)
@@ -300,18 +309,18 @@ For detailed information, refer to the [Terraform README](https://github.com/pro
Once the required permissions are set up, proceed to configure the S3 integration in **Prowler App**.
1. Navigate to "Integrations"
- 
+ 
2. Locate the Amazon S3 Integration card and click on the "Configure" button
- 
+ 
3. Click the "Add Integration" button
- 
+ 
4. Complete the configuration form with the following details:
- **Cloud Providers:** Select the providers whose scan results should be exported to this S3 bucket
- **Bucket Name:** Enter the name of the target S3 bucket (e.g., `my-security-findings-bucket`)
- **Output Directory:** Specify the directory path within the bucket (e.g., `/prowler-findings/`, defaults to `output`)
- 
+ 
6. Click "Next" to configure credentials
7. Configure AWS authentication using one of the supported methods:
@@ -320,7 +329,7 @@ Once the required permissions are set up, proceed to configure the S3 integratio
- **Access Keys:** Provide AWS access key ID and secret access key
- **IAM Role (optional):** Specify the IAM Role ARN, external ID, and optional session parameters
- 
+ 
8. Optional - For IAM role authentication, complete the required fields:
@@ -331,11 +340,13 @@ Once the required permissions are set up, proceed to configure the S3 integratio
9. Click "Create Integration" to verify the connection and complete the setup
-???+ success
- Once credentials are configured and the connection test passes, the S3 integration will be active. Scan results will automatically be exported to the specified bucket after each scan completes. Run a new scan and check the S3 bucket to verify the integration is working.
+
+Once credentials are configured and the connection test passes, the S3 integration will be active. Scan results will automatically be exported to the specified bucket after each scan completes. Run a new scan and check the S3 bucket to verify the integration is working.
-???+ note
- Scan outputs are processed after scan completion. Depending on scan size and network conditions, exports may take a few minutes to appear in the S3 bucket.
+
+
+Scan outputs are processed after scan completion. Depending on scan size and network conditions, exports may take a few minutes to appear in the S3 bucket.
+
---
@@ -350,11 +361,11 @@ Once the integration is active, monitor its status and make adjustments as neede
- **Bucket Information:** Bucket name and output directory
- **Last Checked:** Timestamp of the most recent connection test
- 
+ 
#### Actions
-
+
Each S3 integration provides several management actions accessible through dedicated buttons:
@@ -366,11 +377,14 @@ Each S3 integration provides several management actions accessible through dedic
| **Enable/Disable** | Toggle integration status | • Enable integration to start exporting results • Disable integration to pause exports | Status change takes effect immediately |
| **Delete** | Remove integration permanently | • Permanently delete integration • Remove all configuration data | ⚠️ **Cannot be undone** - confirm before deleting |
-???+ tip "Management Best Practices"
- - Test the integration after any configuration changes
- - Use the Enable/Disable toggle for temporary changes instead of deleting
+
+**Management Best Practices**
+
+- Test the integration after any configuration changes
+- Use the Enable/Disable toggle for temporary changes instead of deleting
+
---
## Understanding S3 Export Structure
@@ -392,7 +406,7 @@ output/
└── prowler-output-111122223333-20250805120000.ocsf.json
```
-
+
For detailed information about Prowler's reporting formats, refer to the [Prowler reporting documentation](https://docs.prowler.com/projects/prowler-open-source/en/latest/tutorials/reporting/).
diff --git a/docs/tutorials/prowler-app-security-hub-integration.md b/docs/user-guide/tutorials/prowler-app-security-hub-integration.mdx
similarity index 85%
rename from docs/tutorials/prowler-app-security-hub-integration.md
rename to docs/user-guide/tutorials/prowler-app-security-hub-integration.mdx
index 0cc4193b98..4c192e7a0c 100644
--- a/docs/tutorials/prowler-app-security-hub-integration.md
+++ b/docs/user-guide/tutorials/prowler-app-security-hub-integration.mdx
@@ -1,4 +1,6 @@
-# AWS Security Hub Integration
+---
+title: "AWS Security Hub Integration"
+---
Prowler App enables automatic export of security findings to AWS Security Hub, providing seamless integration with AWS's native security and compliance service. This comprehensive guide demonstrates how to configure and manage AWS Security Hub integrations to centralize security findings and enhance compliance tracking across AWS environments.
@@ -19,20 +21,21 @@ When enabled and configured:
3. The integration automatically detects new AWS regions to send findings if the Prowler partner integration is enabled
4. Previously resolved findings are archived to maintain clean Security Hub dashboards
-???+ note
- Refer to [AWS Security Hub pricing](https://aws.amazon.com/security-hub/pricing/) for cost information.
+
+Refer to [AWS Security Hub pricing](https://aws.amazon.com/security-hub/pricing/) for cost information.
+
## Prerequisites
Before configuring AWS Security Hub Integration in Prowler App, complete these steps:
### AWS Security Hub Setup
-Enable the Prowler partner integration in AWS Security Hub by following the [AWS Security Hub setup documentation](./aws/securityhub.md#enabling-aws-security-hub-for-prowler-integration).
+Enable the Prowler partner integration in AWS Security Hub by following the [AWS Security Hub setup documentation](/user-guide/providers/aws/securityhub#enabling-aws-security-hub-for-prowler-integration).
### AWS Authentication
-Configure AWS credentials by following the [AWS authentication setup guide](./aws/getting-started-aws.md#step-3-set-up-aws-authentication).
+Configure AWS credentials by following the [AWS authentication setup guide](/user-guide/providers/aws/getting-started-aws#step-3-set-up-aws-authentication).
## Configuration
@@ -41,7 +44,7 @@ To configure AWS Security Hub integration in Prowler App:
1. Navigate to **Integrations** in the Prowler App interface
2. Locate the **AWS Security Hub** card and click **Manage**, then select **Add integration**
- 
+ 
3. Complete the integration settings
@@ -49,7 +52,7 @@ To configure AWS Security Hub integration in Prowler App:
* **Send Only Failed Findings:** Filter out `PASS` findings to reduce AWS Security Hub costs (enabled by default)
* **Archive Previous Findings:** Automatically archive findings resolved since the last scan to maintain clean Security Hub dashboards
- 
+ 
4. Configure authentication:
@@ -57,15 +60,18 @@ Choose the appropriate authentication method:
* **Use Provider Credentials** (recommended): Leverages the AWS provider's existing credentials
- ???+ tip "Simplified Credential Management"
+
+ **Simplified Credential Management**
+
Using provider credentials reduces administrative complexity by managing a single set of credentials instead of maintaining separate authentication mechanisms. This approach minimizes security risks and provides the most efficient integration path when the AWS account has sufficient permissions to export findings to Security Hub.
+
* **Custom Credentials:** Configure separate credentials specifically for Security Hub access
5. Click **Create integration** to enable the integration
- 
+ 
Once configured successfully, findings from subsequent scans will automatically appear in AWS Security Hub.
@@ -94,15 +100,18 @@ Each Security Hub integration provides several management actions accessible thr
| **Enable/Disable** | Toggle integration status | • Enable integration to start exporting findings • Disable integration to pause exports | Status change takes effect immediately |
| **Delete** | Remove integration permanently | • Permanently delete integration • Remove all configuration data | ⚠️ **Cannot be undone** - confirm before deleting |
-???+ tip "Management Best Practices"
- - Test the integration after any configuration changes
- - Use the Enable/Disable toggle for temporary changes instead of deleting
- - Monitor the Last Checked timestamp to ensure recent connectivity
+
+**Management Best Practices**
+
+- Test the integration after any configuration changes
+- Use the Enable/Disable toggle for temporary changes instead of deleting
+- Monitor the Last Checked timestamp to ensure recent connectivity
+
## Viewing Findings in AWS Security Hub
-After successful configuration and scan completion, Prowler findings automatically appear in AWS Security Hub. For detailed information about accessing and interpreting findings in the Security Hub console, refer to the [AWS Security Hub findings documentation](./aws/securityhub.md#viewing-prowler-findings-in-aws-security-hub).
+After successful configuration and scan completion, Prowler findings automatically appear in AWS Security Hub. For detailed information about accessing and interpreting findings in the Security Hub console, refer to the [AWS Security Hub findings documentation](/user-guide/providers/aws/securityhub#viewing-prowler-findings-in-aws-security-hub).
## Troubleshooting
diff --git a/docs/tutorials/prowler-app-social-login.md b/docs/user-guide/tutorials/prowler-app-social-login.mdx
similarity index 86%
rename from docs/tutorials/prowler-app-social-login.md
rename to docs/user-guide/tutorials/prowler-app-social-login.mdx
index 8646a5afd8..ecc75959e9 100644
--- a/docs/tutorials/prowler-app-social-login.md
+++ b/docs/user-guide/tutorials/prowler-app-social-login.mdx
@@ -1,8 +1,10 @@
-# Social Login Configuration
+---
+title: 'Social Login Configuration'
+---
**Prowler App** supports social login using Google and GitHub OAuth providers. This document guides you through configuring the required environment variables to enable social authentication.
-
+
## Configuring Social Login Credentials
To enable social login with Google and GitHub, you must define the following environment variables:
@@ -30,7 +32,7 @@ SOCIAL_GITHUB_OAUTH_CLIENT_SECRET=""
- If either `SOCIAL_GOOGLE_OAUTH_CLIENT_ID` or `SOCIAL_GOOGLE_OAUTH_CLIENT_SECRET` is empty or not defined, the Google login button will be disabled.
- If either `SOCIAL_GITHUB_OAUTH_CLIENT_ID` or `SOCIAL_GITHUB_OAUTH_CLIENT_SECRET` is empty or not defined, the GitHub login button will be disabled.
-
+
## Obtaining OAuth Credentials
To obtain `CLIENT_ID` and `CLIENT_SECRET` for each provider, follow their official documentation:
diff --git a/docs/tutorials/prowler-app-sso-entra.md b/docs/user-guide/tutorials/prowler-app-sso-entra.mdx
similarity index 62%
rename from docs/tutorials/prowler-app-sso-entra.md
rename to docs/user-guide/tutorials/prowler-app-sso-entra.mdx
index df0271c70f..37f3bbdda5 100644
--- a/docs/tutorials/prowler-app-sso-entra.md
+++ b/docs/user-guide/tutorials/prowler-app-sso-entra.mdx
@@ -1,4 +1,6 @@
-# Entra ID Configuration
+---
+title: 'Entra ID Configuration'
+---
This page provides instructions for creating and configuring a Microsoft Entra ID (formerly Azure AD) application to use SAML SSO with Prowler App.
@@ -8,38 +10,38 @@ You can find a walkthrough video [here](https://www.youtube.com/watch?v=zegqm55o
1. From the "Enterprise Applications" page in the Azure Portal, click "+ New application".
- 
+ 
2. At the top of the page, click "+ Create your own application".
- 
+ 
3. Enter a name for the application and select the "Integrate any other application you don't find in the gallery (Non-gallery)" option.
- 
+ 
4. Assign users and groups to the application, then proceed to "Set up single sign on" and select "SAML" as the method.
- 
+ 
5. In the "Basic SAML Configuration" section, click "Edit".
- 
+ 
-6. Enter the "Identifier (Entity ID)" and "Reply URL (Assertion Consumer Service URL)". These values can be obtained from the SAML SSO integration setup in Prowler App. For detailed instructions, refer to the [SAML SSO Configuration](./prowler-app-sso.md) page.
+6. Enter the "Identifier (Entity ID)" and "Reply URL (Assertion Consumer Service URL)". These values can be obtained from the SAML SSO integration setup in Prowler App. For detailed instructions, refer to the [SAML SSO Configuration](/user-guide/tutorials/prowler-app-sso) page.
- 
+ 
7. In the "SAML Certificates" section, click "Edit".
- 
+ 
8. For the "Signing Option," select "Sign SAML response and assertion", and then click "Save".
- 
+ 
9. Once the changes are saved, the metadata XML can be downloaded from the "App Federation Metadata Url".
- 
+ 
-10. Save the downloaded Metadata XML to a file. To complete the setup, upload this file during the Prowler App integration. (See the [SAML SSO Configuration](./prowler-app-sso.md) page for details).
+10. Save the downloaded Metadata XML to a file. To complete the setup, upload this file during the Prowler App integration. (See the [SAML SSO Configuration](/user-guide/tutorials/prowler-app-sso) page for details).
diff --git a/docs/tutorials/prowler-app-sso.md b/docs/user-guide/tutorials/prowler-app-sso.mdx
similarity index 79%
rename from docs/tutorials/prowler-app-sso.md
rename to docs/user-guide/tutorials/prowler-app-sso.mdx
index a81640c720..b22ae7941a 100644
--- a/docs/tutorials/prowler-app-sso.md
+++ b/docs/user-guide/tutorials/prowler-app-sso.mdx
@@ -1,4 +1,6 @@
-# SAML Single Sign-On (SSO)
+---
+title: 'SAML Single Sign-On (SSO)'
+---
This guide provides comprehensive instructions to configure SAML-based Single Sign-On (SSO) in Prowler App. This configuration allows users to authenticate using the organization's Identity Provider (IdP).
@@ -22,9 +24,12 @@ Prowler can be integrated with SAML SSO identity providers such as Okta to enabl
- [**SP-Initiated SSO**](#sp-initiated-sso): Users can initiate login directly from the Prowler login page.
- **Just-in-Time Provisioning**: Users from the organization signing into Prowler for the first time will be automatically created.
-???+ warning "Deactivate SAML"
- If the SAML configuration is removed, users who previously authenticated via SAML will need to reset their password to regain access using standard login. This occurs because accounts no longer have valid authentication credentials without the SAML integration.
+
+**Deactivate SAML**
+If the SAML configuration is removed, users who previously authenticated via SAML will need to reset their password to regain access using standard login. This occurs because accounts no longer have valid authentication credentials without the SAML integration.
+
+
### Prerequisites
- Administrator access to the Prowler organization is required.
@@ -36,19 +41,22 @@ Prowler can be integrated with SAML SSO identity providers such as Okta to enabl
To access the account settings, click the "Account" button in the top-right corner of Prowler App, or navigate directly to `https://cloud.prowler.com/profile` (or `http://localhost:3000/profile` for local setups).
-
+
#### Step 2: Enable SAML Integration
On the profile page, find the "SAML SSO Integration" card and click "Enable" to begin the configuration process.
-
+
-???+ info "Choose Your Method"
- **Use Step 3A (Generic Method)** for any SAML 2.0 compliant Identity Provider or when you need custom configuration.
+
+**Choose Your Method**
- **Use Step 3B (Okta App Catalog)** if you're using Okta and want a simplified setup process with pre-configured settings.
+**Use Step 3A (Generic Method)** for any SAML 2.0 compliant Identity Provider or when you need custom configuration.
+**Use Step 3B (Okta App Catalog)** if you're using Okta and want a simplified setup process with pre-configured settings.
+
+
#### Step 3A: Configure the Identity Provider (IdP) - Generic
Prowler App displays the SAML configuration information needed to configure the IdP. Use this information to create a new SAML application in the IdP.
@@ -58,32 +66,35 @@ Prowler App displays the SAML configuration information needed to configure the
To configure the IdP, copy the **ACS URL** and **Audience URI** from Prowler App and use them to set up a new SAML application.
-
+
-???+ info "IdP Configuration"
- The exact steps for configuring an IdP vary depending on the provider (Okta, Azure AD, etc.). Please refer to the IdP's documentation for instructions on creating a SAML application. For SSO integration with Azure AD / Entra ID, see our [Entra ID configuration instructions](./prowler-app-sso-entra.md).
+
+**IdP Configuration**
+The exact steps for configuring an IdP vary depending on the provider (Okta, Azure AD, etc.). Please refer to the IdP's documentation for instructions on creating a SAML application. For SSO integration with Azure AD / Entra ID, see our [Entra ID configuration instructions](/user-guide/tutorials/prowler-app-sso-entra).
+
+
#### Step 3B: Configure Prowler from App Catalog - Okta
Instead of creating a custom SAML integration, Okta administrators can configure Prowler Cloud directly from Okta's application catalog:
1. **Access App Catalog**: Navigate to the IdP's application catalog (e.g., [Browse App Catalog](https://www.okta.com/integrations/) in Okta).
- 
+ 
2. **Search for Prowler Cloud**: Use the search functionality to find "Prowler Cloud" in the app catalog. The official Prowler Cloud application will appear in the search results.
- 
+ 
3. **Select Prowler Cloud Application**: Click on the Prowler Cloud application from the search results to view its details page.
- 
+ 
4. **Add Integration**: Click the "Add Integration" button to begin adding Prowler Cloud to the organization's applications.
5. **Configure General Settings**: In the "Add Prowler Cloud" configuration screen, the integration automatically configures the necessary settings.
- 
+ 
6. **Assign Users**: Navigate to the **Assignments** tab and assign the appropriate users or groups to the Prowler application by clicking "Assign" and selecting "Assign to People" or "Assign to Groups".
@@ -99,16 +110,22 @@ For Prowler App to correctly identify and provision users, configure the IdP to
|----------------|---------------------------------------------------------------------------------------------------------|----------|
| `firstName` | The user's first name. | Yes |
| `lastName` | The user's last name. | Yes |
-| `userType` | The Prowler role to be assigned to the user (e.g., `admin`, `auditor`). If a role with that name already exists, it will be used; otherwise, a new role called `no_permissions` will be created with minimal permissions. Role permissions can be edited in the [RBAC Management tab](./prowler-app-rbac.md). | No |
+| `userType` | The Prowler role to be assigned to the user (e.g., `admin`, `auditor`). If a role with that name already exists, it will be used; otherwise, a new role called `no_permissions` will be created with minimal permissions. Role permissions can be edited in the [RBAC Management tab](/user-guide/tutorials/prowler-app-rbac). | No |
| `companyName` | The user's company name. This is automatically populated if the IdP sends an `organization` attribute. | No |
-???+ info "IdP Attribute Mapping"
- Note that the attribute name is just an example and may be different depending on the IdP. For instance, if the IdP provides a 'division' attribute, it can be mapped to 'userType'.
- 
+
+**IdP Attribute Mapping**
-???+ warning "Dynamic Updates"
- Prowler App updates these attributes each time a user logs in. Any changes made in the Identity Provider (IdP) will be reflected when the user logs in again.
+Note that the attribute name is just an example and may be different depending on the IdP. For instance, if the IdP provides a 'division' attribute, it can be mapped to 'userType'.
+
+
+
+**Dynamic Updates**
+
+Prowler App updates these attributes each time a user logs in. Any changes made in the Identity Provider (IdP) will be reflected when the user logs in again.
+
+
#### Step 5: Upload IdP Metadata to Prowler
Once the IdP is configured, it provides a **metadata XML file**. This file contains the IdP's configuration information, such as its public key and login URL.
@@ -121,20 +138,23 @@ To complete the Prowler App configuration:
3. Upload the **metadata XML file** downloaded from the IdP.
-
+
#### Step 6: Save and Verify Configuration
Click the "Save" button to complete the setup. The "SAML Integration" card will now display an "Active" status, indicating the configuration is complete and enabled.
-
+
-???+ info "IdP Configuration"
- The exact steps for configuring an IdP vary depending on the provider (Okta, Azure AD, etc.). Please refer to the IdP's documentation for instructions on creating a SAML application.
+
+**IdP Configuration**
+The exact steps for configuring an IdP vary depending on the provider (Okta, Azure AD, etc.). Please refer to the IdP's documentation for instructions on creating a SAML application.
+
+
##### Remove SAML Configuration
SAML SSO can be disabled by removing the existing configuration from the integration panel.
-
+
### IdP-Initiated SSO
@@ -152,9 +172,9 @@ Users can also initiate the login process directly from Prowler's login page:
1. Navigate to the Prowler login page
2. Click "Continue with SAML SSO"
- 
+ 
3. Enter their email address from the configured domain
- 
+ 
4. The system redirects users to the IdP for authentication
5. After successful authentication, users are returned to Prowler App
@@ -190,9 +210,12 @@ Prowler provides a REST API to manage SAML configurations programmatically.
- `PATCH`: Update an existing SAML configuration.
- `DELETE`: Remove the SAML configuration.
-???+ note "API Documentation"
- For detailed information on using the API, refer to the [Prowler API Reference](https://api.prowler.com/api/v1/docs#tag/SAML/operation/saml_config_create).
+
+**API Documentation**
+For detailed information on using the API, refer to the [Prowler API Reference](https://api.prowler.com/api/v1/docs#tag/SAML/operation/saml_config_create).
+
+
#### SAML Initiate Endpoint
- **Endpoint**: `POST /api/v1/accounts/saml/initiate/`
diff --git a/docs/tutorials/prowler-app.md b/docs/user-guide/tutorials/prowler-app.mdx
similarity index 52%
rename from docs/tutorials/prowler-app.md
rename to docs/user-guide/tutorials/prowler-app.mdx
index 0b5e2373a3..dd2074c3b9 100644
--- a/docs/tutorials/prowler-app.md
+++ b/docs/user-guide/tutorials/prowler-app.mdx
@@ -1,13 +1,22 @@
-# Prowler App
+---
+title: 'Prowler Cloud'
+---
-**Prowler App** is a web application that simplifies running Prowler. This tutorial will guide you through setting up and using it.
+**Prowler Cloud** is a web application that simplifies running Prowler. This tutorial will guide you through setting up and using it.
-## Accessing Prowler App and API Documentation
+We refer to **Prowler App** as the self-hosted version of **Prowler Cloud**.
-After [installing](../installation/prowler-app.md) **Prowler App**, access it at [http://localhost:3000](http://localhost:3000). To view the auto-generated **Prowler API** documentation, navigate to [http://localhost:8080/api/v1/docs](http://localhost:8080/api/v1/docs). This documentation provides details on available endpoints, parameters, and responses.
+## Accessing Prowler Cloud and API Documentation
-???+ note
- If you are a [Prowler Cloud](https://cloud.prowler.com/sign-in) user, you can access API docs at [https://api.prowler.com/api/v1/docs](https://api.prowler.com/api/v1/docs)
+If you are a [Prowler Cloud](https://cloud.prowler.com/sign-in) user, you can access API docs at [https://api.prowler.com/api/v1/docs](https://api.prowler.com/api/v1/docs)
+
+
+**For Prowler App users**
+
+After [installing](/getting-started/installation/prowler-app) **Prowler App**, access it at [http://localhost:3000](http://localhost:3000).
+
+To view the auto-generated **Prowler API** documentation, navigate to [http://localhost:8080/api/v1/docs](http://localhost:8080/api/v1/docs). This documentation provides details on available endpoints, parameters, and responses.
+
## **Step 1: Sign Up**
@@ -15,25 +24,31 @@ After [installing](../installation/prowler-app.md) **Prowler App**, access it at
To get started, sign up using your email and password:
-
-
+
+
### **Sign Up with Social Login**
If Social Login is enabled, you can sign up using your preferred provider (e.g., Google, GitHub).
-???+ note "How Social Login Works"
- If your email is already registered, you will be logged in, and your social account will be linked.
- If your email is not registered, a new account will be created using your social account email.
+
+**How Social Login Works**
-???+ note "Enable Social Login"
- See [how to configure Social Login for Prowler](prowler-app-social-login.md) to enable this feature in your own deployments.
+If your email is already registered, you will be logged in, and your social account will be linked.
+If your email is not registered, a new account will be created using your social account email.
+
+
+**Enable Social Login**
+
+See [how to configure Social Login for Prowler](/user-guide/tutorials/prowler-app-social-login) to enable this feature in your own deployments.
+
+
## **Step 2: Log In**
Once registered, log in with your email and password to access Prowler App.
-
+
Upon logging in, the Overview page will display. At this stage, no data is present: add a provider to begin scanning your cloud environment.
@@ -58,13 +73,13 @@ Steps to add a provider:
1. Navigate to `Settings > Cloud Providers`.
2. Click `Add Account` to set up a new provider and provide your credentials.
-
+
## **Step 4: Configure the Provider**
Select the cloud provider you want to scan.
-
+
Once chosen, enter the Provider UID for authentication:
@@ -76,7 +91,7 @@ Once chosen, enter the Provider UID for authentication:
Optionally, provide a **Provider Alias** for easier identification. Follow the instructions provided to add your credentials:
-### **Step 4.1: AWS Credentials**
+### **Step 4.1: AWS Credentials**
For AWS, enter your `AWS Account ID` and choose one of the following methods to connect:
@@ -84,39 +99,40 @@ For AWS, enter your `AWS Account ID` and choose one of the following methods to
1. Select `Connect via Credentials`.
-
+
2. Enter your `Access Key ID`, `Secret Access Key` and optionally a `Session Token`:
-
+
#### **Step 4.1.2: IAM Role**
1. Select `Connect assuming IAM Role`.
-
+
2. Enter the `Role ARN` and any optional field like the AWS Access Keys to assume the role, the `External ID`, the `Role Session Name` or the `Session Duration`:
-
+
-???+ note
- Check if your AWS Security Token Service (STS) has the EU (Ireland) endpoint active. If not, we will not be able to connect to your AWS account.
+
+Check if your AWS Security Token Service (STS) has the EU (Ireland) endpoint active. If not, we will not be able to connect to your AWS account.
- If that is the case your STS configuration may look like this:
+If that is the case your STS configuration may look like this:
-
+
- To solve this issue, please activate the EU (Ireland) STS endpoint.
+To solve this issue, please activate the EU (Ireland) STS endpoint.
-### **Step 4.2: Azure Credentials**:
+
+### **Step 4.2: Azure Credentials**:
-For Azure, Prowler App uses a service principal application to authenticate. For more information about the process of creating and adding permissions to a service principal refer to this [section](../tutorials/azure/authentication.md). When you finish creating and adding the [Entra](./azure/create-prowler-service-principal.md#assigning-proper-permissions) and [Subscription](./azure/subscriptions.md) scope permissions to the service principal, enter the `Tenant ID`, `Client ID` and `Client Secret` of the service principal application.
+For Azure, Prowler App uses a service principal application to authenticate. For more information about the process of creating and adding permissions to a service principal refer to this [section](/user-guide/providers/azure/authentication). When you finish creating and adding the [Entra](/user-guide/providers/azure/create-prowler-service-principal#assigning-proper-permissions) and [Subscription](/user-guide/providers/azure/subscriptions) scope permissions to the service principal, enter the `Tenant ID`, `Client ID` and `Client Secret` of the service principal application.
-
+
---
-### **Step 4.3: GCP Credentials**
+### **Step 4.3: GCP Credentials**
For Google Cloud, first enter your `GCP Project ID` and then select the authentication method you want to use:
@@ -125,7 +141,7 @@ For Google Cloud, first enter your `GCP Project ID` and then select the authenti
**Service Account Authentication** is the recommended authentication method for automated systems and machine-to-machine interactions, like Prowler. For detailed information about this, refer to the [Google Cloud documentation](https://cloud.google.com/iam/docs/service-account-overview).
-
+
#### **Step 4.3.1: Service Account Authentication**
@@ -134,7 +150,7 @@ First of all, in the same project that you selected in the previous step, you ne
- [Create a service account](https://cloud.google.com/iam/docs/creating-managing-service-accounts)
- [Generate a key for a service account](https://cloud.google.com/iam/docs/creating-managing-service-account-keys)
-
+
#### **Step 4.3.2: Application Default Credentials**
@@ -148,15 +164,15 @@ First of all, in the same project that you selected in the previous step, you ne
3. Paste the `Client ID`, `Client Secret` and `Refresh Token` into Prowler App.
-
+
-### **Step 4.4: Kubernetes Credentials**:
+### **Step 4.4: Kubernetes Credentials**:
For Kubernetes, Prowler App uses a `kubeconfig` file to authenticate, paste the contents of your `kubeconfig` file into the `Kubeconfig content` field.
By default, the `kubeconfig` file is located at `~/.kube/config`.
-
+
If you are adding an **EKS**, **GKE**, **AKS** or external cluster, follow these additional steps to ensure proper authentication:
@@ -190,18 +206,29 @@ If you are adding an **EKS**, **GKE**, **AKS** or external cluster, follow these
4. Now you can add the modified `kubeconfig` in Prowler Cloud. Then test the connection.
-### **Step 4.5: M365 Credentials**
-For M365, you must enter your Domain ID and choose the authentication method you want to use:
+### **Step 4.5: M365 Credentials**
+Enter your Microsoft Entra domain (primary tenant domain) and select how the provider should authenticate. Prowler App guides you through the process:
-- Service Principal Authentication (Recommended)
-- User Authentication (Deprecated)
+
-???+ warning
- User authentication with M365_USER and M365_PASSWORD is deprecated and will be removed.
+- **Application Client Secret Authentication**: Client secret-based authentication.
+- **Application Certificate Authentication (Recommended)**: Certificate-based authentication. Recommended by Microsoft.
-For full setup instructions and requirements, check the [Microsoft 365 provider requirements](./microsoft365/getting-started-m365.md).
+#### Step 4.5.1: Application Client Secret Authentication
+1. **Enter your tenant ID**: This is the unique identifier for your Microsoft Entra ID directory.
+2. **Enter your application (client) ID**: This is the unique identifier assigned to your app registration in Microsoft Entra ID.
+3. **Enter your client secret**: This is the secret key used to authenticate your application.
-
+
+
+For full setup instructions, certificate generation commands, and required permissions, review the [Microsoft 365 provider requirements](/user-guide/providers/microsoft365/getting-started-m365).
+
+#### Step 4.5.2: Application Certificate Authentication (Recommended)
+1. **Enter your tenant ID**: This is the unique identifier for your Microsoft Entra ID directory.
+2. **Enter your application (client) ID**: This is the unique identifier assigned to your app registration in Microsoft Entra ID.
+3. **Upload your certificate file content**: This is the **Base64** encoded certificate content used to authenticate your application.
+
+
### **Step 4.6: GitHub Credentials**
For GitHub, you must enter your Provider ID (username or organization name) and choose the authentication method you want to use:
@@ -210,10 +237,11 @@ For GitHub, you must enter your Provider ID (username or organization name) and
- **OAuth App Token** (For applications requiring user consent)
- **GitHub App** (Recommended for organizations and production use)
-???+ note
- For full setup instructions and requirements, check the [GitHub provider requirements](./github/getting-started-github.md).
+
+For full setup instructions and requirements, check the [GitHub provider requirements](/user-guide/providers/github/getting-started-github).
-
+
+
#### **Step 4.6.1: Personal Access Token**
@@ -221,53 +249,57 @@ Personal Access Tokens provide the simplest GitHub authentication method and sup
- Select `Personal Access Token` and enter your `Personal Access Token`:
-
+
-???+ note
- For detailed instructions on creating a Personal Access Token and the exact permissions required, check the [GitHub Personal Access Token tutorial](./github/getting-started-github.md#1-personal-access-token-pat).
+
+For detailed instructions on creating a Personal Access Token and the exact permissions required, check the [GitHub Personal Access Token tutorial](/user-guide/providers/github/getting-started-github#1-personal-access-token-pat).
+
#### **Step 4.6.2: OAuth App Token**
OAuth Apps enable applications to act on behalf of users with explicit consent.
- Select `OAuth App Token` and enter your `OAuth App Token`:
-
+
-???+ note
- To create an OAuth App, go to GitHub Settings → Developer settings → OAuth Apps → New OAuth App. You'll need to exchange an authorization code for an access token using the OAuth flow.
+
+To create an OAuth App, go to GitHub Settings → Developer settings → OAuth Apps → New OAuth App. You'll need to exchange an authorization code for an access token using the OAuth flow.
+
#### **Step 4.6.3: GitHub App**
GitHub Apps provide the recommended integration method for accessing multiple repositories or organizations.
- Select `GitHub App` and enter your `GitHub App ID` and `GitHub App Private Key`:
-
+
-???+ note
- To create a GitHub App, go to GitHub Settings → Developer settings → GitHub Apps → New GitHub App. Configure the necessary permissions and generate a private key. Install the app to your account or organization and provide the App ID and private key content.
+
+To create a GitHub App, go to GitHub Settings → Developer settings → GitHub Apps → New GitHub App. Configure the necessary permissions and generate a private key. Install the app to your account or organization and provide the App ID and private key content.
+
## **Step 5: Test Connection**
After adding your credentials of your cloud account, click the `Launch` button to verify that Prowler App can successfully connect to your provider:
-
+
## **Step 6: Scan started**
After successfully adding and testing your credentials, Prowler will start scanning your cloud environment, click the `Go to Scans` button to see the progress:
-
+
-???+ note
- Prowler will automatically scan all configured providers every **24 hours**, ensuring your cloud environment stays continuously monitored.
+
+Prowler will automatically scan all configured providers every **24 hours**, ensuring your cloud environment stays continuously monitored.
+
## **Step 7: Monitor Scan Progress**
Track the progress of your scan in the `Scans` section:
-
+
## **Step 8: Analyze the Findings**
@@ -276,19 +308,19 @@ While the scan is running, start exploring the findings in these sections:
- **Overview**: High-level summary of the scans.
-
+
- **Compliance**: Insights into compliance status.
-
+
- **Issues**: Types of issues detected.
-
+
- **Browse All Findings**: Detailed list of findings detected, where you can filter by severity, service, and more.
-
+
To view all `new` findings that have not been seen prior to this scan, click the `Delta` filter and select `new`. To view all `changed` findings that have had a status change (from `PASS` to `FAIL` for example), click the `Delta` filter and select `changed`.
@@ -296,34 +328,41 @@ To view all `new` findings that have not been seen prior to this scan, click the
Once a scan is complete, navigate to the Scan Jobs section to download the output files generated by Prowler:
-
+
You can download the output files generated by Prowler as a single `zip` file. This archive contains the CSV, JSON-OSCF, and HTML reports detailing the findings.
To download these files, click the **Download** button. This button becomes available only after the scan has finished.
-
+
The `zip` file unpacks into a folder named like `prowler-output--`, which includes all of the above outputs. In the example below, you can see the `.csv`, .`json`, and `.html` reports alongside a subfolder for detailed compliance checks.
-
+
-???+ note "API Note"
- For more information about the API endpoint used by the UI to download the ZIP archive, refer to: [Prowler API Reference - Download Scan Output](https://api.prowler.com/api/v1/docs#tag/Scan/operation/scans_report_retrieve)
+
+**API Note**
+For more information about the API endpoint used by the UI to download the ZIP archive, refer to: [Prowler API Reference - Download Scan Output](https://api.prowler.com/api/v1/docs#tag/Scan/operation/scans_report_retrieve)
+
+
## **Step 10: Download specified compliance report**
Once your scan has finished, you don’t need to grab the entire ZIP—just pull down the specific compliance report you want:
- Navigate to the **Compliance** section of the UI.
-
+
- Find the Framework report you need.
- Click its **Download** icon to retrieve that report’s CSV file with all the detailed findings.
-
+
-???+ note "API Note"
- To fetch a single compliance report via API, see the Retrieve compliance report as CSV endpoint in the Prowler API Reference.[Prowler API Reference - Retrieve compliance report as CSV](https://api.prowler.com/api/v1/docs#tag/Scan/operation/scans_compliance_retrieve)
+
+**API Note**
+
+To fetch a single compliance report via API, see the Retrieve compliance report as CSV endpoint in the Prowler API Reference.[Prowler API Reference - Retrieve compliance report as CSV](https://api.prowler.com/api/v1/docs#tag/Scan/operation/scans_compliance_retrieve)
+
+
diff --git a/docs/user-guide/tutorials/prowler-check-kreator.mdx b/docs/user-guide/tutorials/prowler-check-kreator.mdx
new file mode 100644
index 0000000000..253f659814
--- /dev/null
+++ b/docs/user-guide/tutorials/prowler-check-kreator.mdx
@@ -0,0 +1,51 @@
+---
+title: 'Prowler Check Kreator'
+---
+
+
+Currently, this tool is only available for creating checks for the AWS provider.
+
+
+
+
+If you are looking for a way to create new checks for all the supported providers, you can use [Prowler Studio](https://github.com/prowler-cloud/prowler-studio), it is an AI-powered toolkit for generating and managing security checks for Prowler (better version of the Check Kreator).
+
+
+
+## Introduction
+
+**Prowler Check Kreator** is a utility designed to streamline the creation of new checks for Prowler. This tool generates all necessary files required to add a new check to the Prowler repository. Specifically, it creates:
+
+- A dedicated folder for the check.
+- The main check script.
+- A metadata file with essential details.
+- A folder and file structure for testing the check.
+
+## Usage
+
+To use the tool, execute the main script with the following command:
+
+```bash
+python util/prowler_check_kreator/prowler_check_kreator.py
+```
+
+Parameters:
+
+- ``: Currently only AWS is supported.
+- ``: The name you wish to assign to the new check.
+
+## AI integration
+
+This tool optionally integrates AI to assist in generating the check code and metadata file content. When AI assistance is chosen, the tool uses [Gemini](https://gemini.google.com/) to produce preliminary code and metadata.
+
+
+For this feature to work, you must have the library `google-generativeai` installed in your Python environment.
+
+
+
+
+AI-generated code and metadata might contain errors or require adjustments to align with specific Prowler requirements. Carefully review all AI-generated content before committing.
+
+
+
+To enable AI assistance, simply confirm when prompted by the tool. Additionally, ensure that the `GEMINI_API_KEY` environment variable is set with a valid Gemini API key. For instructions on obtaining your API key, refer to the [Gemini documentation](https://ai.google.dev/gemini-api/docs/api-key).
diff --git a/docs/tutorials/aws/v2_to_v3_checks_mapping.md b/docs/user-guide/tutorials/v2_to_v3_checks_mapping.mdx
similarity index 99%
rename from docs/tutorials/aws/v2_to_v3_checks_mapping.md
rename to docs/user-guide/tutorials/v2_to_v3_checks_mapping.mdx
index 5db65353b5..4262a22be7 100644
--- a/docs/tutorials/aws/v2_to_v3_checks_mapping.md
+++ b/docs/user-guide/tutorials/v2_to_v3_checks_mapping.mdx
@@ -2,7 +2,7 @@
Prowler v3 and v4 introduce distinct identifiers while preserving the checks originally implemented in v2. This change was made because, in previous versions, check names were primarily derived from the CIS Benchmark for AWS. Starting with v3 and v4, all checks are independent of any security framework and have unique names and IDs.
-For more details on the updated compliance implementation in Prowler v4 and v3, refer to the [Compliance](../compliance.md) section.
+For more details on the updated compliance implementation in Prowler v4 and v3, refer to the [Compliance](/user-guide/cli/tutorials/compliance) section.
```
checks_v4_v3_to_v2_mapping = {
diff --git a/mcp_server/CHANGELOG.md b/mcp_server/CHANGELOG.md
new file mode 100644
index 0000000000..be766b4162
--- /dev/null
+++ b/mcp_server/CHANGELOG.md
@@ -0,0 +1,16 @@
+# Prowler MCP Server Changelog
+
+All notable changes to the **Prowler MCP Server** are documented in this file.
+
+## [0.1.0] (Prowler UNRELEASED)
+
+### Added
+- Initial release of Prowler MCP Server [(#8695)](https://github.com/prowler-cloud/prowler/pull/8695)
+- Set appropiate user-agent in requests [(#8724)](https://github.com/prowler-cloud/prowler/pull/8724)
+- Basic logger functionality [(#8740)](https://github.com/prowler-cloud/prowler/pull/8740)
+- Add new MCP Server for Prowler Cloud and Prowler App (Self-Managed) APIs [(#8744)](https://github.com/prowler-cloud/prowler/pull/8744)
+- HTTP transport support [(#8784)](https://github.com/prowler-cloud/prowler/pull/8784)
+- Add new MCP Server for Prowler Documentation [(#8795)](https://github.com/prowler-cloud/prowler/pull/8795)
+- API key support for STDIO mode and enhanced HTTP mode authentication [(#8823)](https://github.com/prowler-cloud/prowler/pull/8823)
+- Add health check endpoint [(#8905)](https://github.com/prowler-cloud/prowler/pull/8905)
+- Update Prowler Documentation MCP Server to use Mintlify API [(#8915)](https://github.com/prowler-cloud/prowler/pull/8915)
diff --git a/mcp_server/README.md b/mcp_server/README.md
index 46525d8751..eebe139fba 100644
--- a/mcp_server/README.md
+++ b/mcp_server/README.md
@@ -2,43 +2,114 @@
> ⚠️ **Preview Feature**: This MCP server is currently in preview and under active development. Features and functionality may change. We welcome your feedback—please report any issues on [GitHub](https://github.com/prowler-cloud/prowler/issues) or join our [Slack community](https://goto.prowler.com/slack) to discuss and share your thoughts.
-Access the entire Prowler ecosystem through the Model Context Protocol (MCP). This server provides two main capabilities:
+Access the entire Prowler ecosystem through the Model Context Protocol (MCP). This server provides three main capabilities:
- **Prowler Cloud and Prowler App (Self-Managed)**: Full access to Prowler Cloud platform and Prowler Self-Managed for managing providers, running scans, and analyzing security findings
- **Prowler Hub**: Access to Prowler's security checks, fixers, and compliance frameworks catalog
+- **Prowler Documentation**: Search and retrieve official Prowler documentation
+## Quick Start with Hosted Server (Recommended)
-## Requirements
+**The easiest way to use Prowler MCP is through our hosted server at `https://mcp.prowler.com/mcp`**
-- Python 3.12+
-- Network access to `https://hub.prowler.com` (for Prowler Hub)
-- Network access to Prowler Cloud and Prowler App (Self-Managed) API (it can be Prowler Cloud API or self-hosted Prowler App API)
-- Prowler Cloud account credentials (for Prowler Cloud and Prowler App (Self-Managed) features)
+No installation required! Just configure your MCP client:
-## Installation
-
-### From Sources
-
-It is needed to have [uv](https://docs.astral.sh/uv/) installed.
-
-```bash
-git clone https://github.com/prowler-cloud/prowler.git
+```json
+{
+ "mcpServers": {
+ "prowler": {
+ "command": "npx",
+ "args": [
+ "mcp-remote",
+ "https://mcp.prowler.com/mcp",
+ "--header",
+ "Authorization: Bearer pk_YOUR_API_KEY_HERE"
+ ]
+ }
+ }
+}
```
-### Using Docker
+**Configuration file locations:**
+- **Claude Desktop (macOS)**: `~/Library/Application Support/Claude/claude_desktop_config.json`
+- **Claude Desktop (Windows)**: `%AppData%\Claude\claude_desktop_config.json`
+- **Cursor**: `~/.cursor/mcp.json`
-Alternatively, you can build and run the MCP server using Docker:
+Get your API key at [Prowler Cloud](https://cloud.prowler.com) → Settings → API Keys
+
+> **Benefits:** Always up-to-date, no maintenance, managed by Prowler team
+
+## Local/Self-Hosted Installation
+
+If you need to run the MCP server locally or self-host it, choose one of the following installation methods. **Configuration is the same** for both managed and local installations - just point to your local server URL instead of `https://mcp.prowler.com/mcp`.
+
+### Requirements
+
+- Python 3.12+ (for source/PyPI installation)
+- Docker (for Docker installation)
+- Network access to `https://hub.prowler.com` (for Prowler Hub)
+- Network access to `https://prowler.mintlify.app` (for Prowler Documentation)
+- Network access to Prowler Cloud and Prowler App (Self-Managed) API (optional, only for Prowler Cloud/App features)
+- Prowler Cloud account credentials (only for Prowler Cloud and Prowler App features)
+
+### Installation Methods
+
+#### Option 1: Docker Hub (Recommended)
+
+Pull the official image from Docker Hub:
+
+```bash
+docker pull prowlercloud/prowler-mcp
+```
+
+Run in STDIO mode:
+```bash
+docker run --rm -i prowlercloud/prowler-mcp
+```
+
+Run in HTTP mode:
+```bash
+docker run --rm -p 8000:8000 \
+ prowlercloud/prowler-mcp \
+ --transport http --host 0.0.0.0 --port 8000
+```
+
+With environment variables:
+```bash
+docker run --rm -i \
+ -e PROWLER_APP_API_KEY="pk_your_api_key" \
+ -e PROWLER_API_BASE_URL="https://api.prowler.com" \
+ prowlercloud/prowler-mcp
+```
+
+**Docker Hub:** [prowlercloud/prowler-mcp](https://hub.docker.com/r/prowlercloud/prowler-mcp)
+
+#### Option 2: PyPI Package (Coming Soon)
+
+```bash
+pip install prowler-mcp-server
+prowler-mcp --help
+```
+
+#### Option 3: From Source (Development)
+
+Clone the repository and use `uv`:
```bash
-# Clone the repository
git clone https://github.com/prowler-cloud/prowler.git
cd prowler/mcp_server
+uv run prowler-mcp --help
+```
-# Build the Docker image
+Install [uv](https://docs.astral.sh/uv/) first if needed.
+
+#### Option 4: Build Docker Image from Source
+
+```bash
+git clone https://github.com/prowler-cloud/prowler.git
+cd prowler/mcp_server
docker build -t prowler-mcp .
-
-# Run the container with environment variables
-docker run --rm --env-file ./.env -it prowler-mcp
+docker run --rm -i prowler-mcp
```
## Running
@@ -169,6 +240,13 @@ All tools are exposed under the `prowler_hub` prefix.
- `prowler_hub_list_providers`: List Prowler official providers and their services.
- `prowler_hub_get_artifacts_count`: Return total artifact count (checks + frameworks).
+### Prowler Documentation
+
+All tools are exposed under the `prowler_docs` prefix.
+
+- `prowler_docs_search`: Search the official Prowler documentation using fulltext search. Returns relevant documentation pages with highlighted snippets and relevance scores.
+- `prowler_docs_get_document`: Retrieve the full markdown content of a specific documentation file using the path from search results.
+
### Prowler Cloud and Prowler App (Self-Managed)
All tools are exposed under the `prowler_app` prefix.
@@ -218,7 +296,7 @@ All tools are exposed under the `prowler_app` prefix.
### Prowler Cloud and Prowler App (Self-Managed) Authentication
> [!IMPORTANT]
-> Authentication is not needed for using Prowler Hub features.
+> Authentication is not needed for using Prowler Hub or Prowler Documentation features.
The Prowler MCP server supports different authentication in Prowler Cloud and Prowler App (Self-Managed) methods depending on the transport mode:
@@ -311,18 +389,60 @@ For local execution, configure your MCP client to launch the server directly. Be
For HTTP mode, you can configure your MCP client to connect to a remote Prowler MCP server.
-**Important Limitations:**
-- HTTP mode support varies by client - some clients may not support HTTP transport yet.
-- Some MCP clients like Claude Desktop only support OAuth authentication for HTTP connections, which is not currently supported by our MCP server.
+Most MCP clients don't natively support HTTP transport with Bearer token authentication. However, you can use the `mcp-remote` proxy tool to connect any MCP client to remote HTTP servers.
-Example configuration for clients that support HTTP transport:
+##### Using mcp-remote Proxy (Recommended for Claude Desktop)
+
+For clients like Claude Desktop that don't support HTTP transport natively, use the `mcp-remote` npm package as a proxy:
**Using API Key (Recommended):**
```json
{
"mcpServers": {
"prowler": {
- "url": "http://mcp.prowler.com/mcp", // Replace with your own MCP server URL, by default when server is run in local it is http://localhost:8000/mcp
+ "command": "npx",
+ "args": [
+ "mcp-remote",
+ "https://mcp.prowler.com/mcp",
+ "--header",
+ "Authorization: Bearer pk_your_api_key_here"
+ ]
+ }
+ }
+}
+```
+
+**Using JWT Token:**
+```json
+{
+ "mcpServers": {
+ "prowler": {
+ "command": "npx",
+ "args": [
+ "mcp-remote",
+ "https://mcp.prowler.com/mcp",
+ "--header",
+ "Authorization: Bearer "
+ ]
+ }
+ }
+}
+```
+
+> **Note:** Replace `https://mcp.prowler.com/mcp` with your actual MCP server URL (use `http://localhost:8000/mcp` for local deployment). The `mcp-remote` package is automatically installed by `npx` on first use.
+
+> **Info:** The `mcp-remote` tool acts as a bridge, converting STDIO protocol (used by Claude Desktop) to HTTP requests (used by the remote MCP server). Learn more at [mcp-remote on npm](https://www.npmjs.com/package/mcp-remote).
+
+##### Direct HTTP Configuration (For Compatible Clients)
+
+For clients that natively support HTTP transport with Bearer token authentication:
+
+**Using API Key:**
+```json
+{
+ "mcpServers": {
+ "prowler": {
+ "url": "https://mcp.prowler.com/mcp",
"headers": {
"Authorization": "Bearer pk_your_api_key_here"
}
@@ -336,7 +456,7 @@ Example configuration for clients that support HTTP transport:
{
"mcpServers": {
"prowler": {
- "url": "http://mcp.prowler.com/mcp", // Replace with your own MCP server URL, by default when server is run in local it is http://localhost:8000/mcp
+ "url": "https://mcp.prowler.com/mcp",
"headers": {
"Authorization": "Bearer "
}
@@ -345,6 +465,8 @@ Example configuration for clients that support HTTP transport:
}
```
+> **Note:** Replace `mcp.prowler.com` with your actual server hostname and adjust the port if needed (e.g., `http://localhost:8000/mcp` for local deployment).
+
### Claude Desktop (macOS/Windows)
Add the example server to Claude Desktop's config file, then restart the app.
diff --git a/mcp_server/prowler_mcp_server/prowler_app/utils/server_generator.py b/mcp_server/prowler_mcp_server/prowler_app/utils/server_generator.py
index 3697226886..c85ac784c7 100644
--- a/mcp_server/prowler_mcp_server/prowler_app/utils/server_generator.py
+++ b/mcp_server/prowler_mcp_server/prowler_app/utils/server_generator.py
@@ -51,10 +51,11 @@ class OpenAPIToMCPGenerator:
self.spec = self._load_spec()
self.generated_tools = []
self.imports = set()
+ self.needs_query_array_normalizer = False
self.type_mapping = {
"string": "str",
- "integer": "int | str",
- "number": "float | str",
+ "integer": "str",
+ "number": "str",
"boolean": "bool | str",
"array": "list[Any] | str",
"object": "dict[str, Any] | str",
@@ -525,13 +526,13 @@ class OpenAPIToMCPGenerator:
python_name = param["python_name"]
original_type = param.get("original_type", "string")
- if original_type == "integer":
- return f"int({python_name}) if isinstance({python_name}, str) else {python_name}"
- elif original_type == "number":
- return f"float({python_name}) if isinstance({python_name}, str) else {python_name}"
- elif original_type == "boolean":
- return f"({python_name}.lower() in ['true', '1', 'yes'] if isinstance({python_name}, str) else bool({python_name}))"
+ if original_type == "boolean":
+ # Convert string to boolean using simple comparison
+ return f"({python_name}.lower() in ('true', '1', 'yes', 'on') if isinstance({python_name}, str) else {python_name})"
elif original_type == "array":
+ if param.get("in") == "query":
+ self.needs_query_array_normalizer = True
+ return f"_normalize_query_array({python_name})"
return f"json.loads({python_name}) if isinstance({python_name}, str) else {python_name}"
elif original_type == "object":
return f"json.loads({python_name}) if isinstance({python_name}, str) else {python_name}"
@@ -708,6 +709,7 @@ class OpenAPIToMCPGenerator:
lines.append(" return {")
lines.append(' "success": True,')
lines.append(' "data": data.get("data", data),')
+ lines.append(' "meta": data.get("meta", {}),')
lines.append(" }")
lines.append("")
@@ -865,6 +867,44 @@ class OpenAPIToMCPGenerator:
for imp in other_imports:
output_lines.append(imp)
+ if self.needs_query_array_normalizer:
+ output_lines.append("")
+ output_lines.append("")
+ output_lines.append("def _normalize_query_array(value):")
+ output_lines.append(
+ ' """Normalize query array inputs to comma-separated strings."""'
+ )
+ output_lines.append(" if isinstance(value, str):")
+ output_lines.append(" stripped = value.strip()")
+ output_lines.append(" if not stripped:")
+ output_lines.append(" return stripped")
+ output_lines.append(
+ " if stripped.startswith('[') and stripped.endswith(']'):"
+ )
+ output_lines.append(" try:")
+ output_lines.append(" parsed = json.loads(stripped)")
+ output_lines.append(" except json.JSONDecodeError:")
+ output_lines.append(" return stripped")
+ output_lines.append(" if isinstance(parsed, list):")
+ output_lines.append(
+ " return ','.join(str(item) for item in parsed)"
+ )
+ output_lines.append(" return stripped")
+ output_lines.append(" if isinstance(value, (list, tuple, set)):")
+ output_lines.append(" return ','.join(str(item) for item in value)")
+ output_lines.append(
+ " if hasattr(value, '__iter__') and not isinstance(value, dict):"
+ )
+ output_lines.append(" try:")
+ output_lines.append(
+ " return ','.join(str(item) for item in value)"
+ )
+ output_lines.append(" except TypeError:")
+ output_lines.append(" return str(value)")
+ output_lines.append(" if isinstance(value, dict):")
+ output_lines.append(" return ','.join(str(key) for key in value)")
+ output_lines.append(" return str(value)")
+
output_lines.append("")
output_lines.append("# Initialize MCP server")
output_lines.append('app_mcp_server = FastMCP("prowler-app")')
diff --git a/mcp_server/prowler_mcp_server/prowler_documentation/search_engine.py b/mcp_server/prowler_mcp_server/prowler_documentation/search_engine.py
index ed18e97f82..1b4613f5de 100644
--- a/mcp_server/prowler_mcp_server/prowler_documentation/search_engine.py
+++ b/mcp_server/prowler_mcp_server/prowler_documentation/search_engine.py
@@ -1,7 +1,7 @@
-import urllib.parse
from typing import List, Optional
-import requests
+import httpx
+from prowler_mcp_server import __version__
from pydantic import BaseModel, Field
@@ -12,25 +12,51 @@ class SearchResult(BaseModel):
title: str = Field(description="Document title")
url: str = Field(description="Documentation URL")
highlights: List[str] = Field(
- description="Highlighted content snippets showing query matches with tags",
+ description="Highlighted content snippets showing query matches with tags",
default_factory=list,
)
+ score: float = Field(
+ description="Relevance score for the search result", default=0.0
+ )
class ProwlerDocsSearchEngine:
- """Prowler documentation search using ReadTheDocs API."""
+ """Prowler documentation search using Mintlify API."""
def __init__(self):
"""Initialize the search engine."""
- self.api_base_url = "https://docs.prowler.com/_/api/v3/search/"
- self.project_name = "prowler-prowler"
- self.github_raw_base = (
- "https://raw.githubusercontent.com/prowler-cloud/prowler/master/docs"
+ self.api_base_url = (
+ "https://api.mintlifytrieve.com/api/chunk_group/group_oriented_autocomplete"
+ )
+ self.dataset_id = "0096ba11-3f72-463b-9d95-b788495ac392"
+ self.api_key = "tr-T6JLeTkFXeNbNPyhijtI9XhIncydQQ3O"
+ self.docs_base_url = "https://prowler.mintlify.app"
+
+ # HTTP client for Mintlify API
+ self.mintlify_client = httpx.Client(
+ timeout=30.0,
+ headers={
+ "Content-Type": "application/json",
+ "Accept": "application/json",
+ "User-Agent": f"prowler-mcp-server/{__version__}",
+ "TR-Dataset": self.dataset_id,
+ "Authorization": self.api_key,
+ "X-API-Version": "V2",
+ },
+ )
+
+ # HTTP client for Mintlify documentation
+ self.docs_client = httpx.Client(
+ timeout=30.0,
+ headers={
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
+ "User-Agent": f"prowler-mcp-server/{__version__}",
+ },
)
def search(self, query: str, page_size: int = 5) -> List[SearchResult]:
"""
- Search documentation using ReadTheDocs API.
+ Search documentation using Mintlify API.
Args:
query: Search query string
@@ -40,53 +66,69 @@ class ProwlerDocsSearchEngine:
List of search results
"""
try:
- # Construct the search query with project filter
- search_query = f"project:{self.project_name} {query}"
+ # Construct request body
+ payload = {
+ "query": query,
+ "search_type": "fulltext",
+ "extend_results": True,
+ "highlight_options": {
+ "highlight_window": 10,
+ "highlight_max_num": 1,
+ "highlight_max_length": 2,
+ "highlight_strategy": "exactmatch",
+ "highlight_delimiters": ["?", ",", ".", "!", "\n"],
+ },
+ "score_threshold": 0.2,
+ "filters": {"must_not": [{"field": "tag_set", "match": ["code"]}]},
+ "page_size": page_size,
+ "group_size": 3,
+ }
- # Make request to ReadTheDocs API with page_size to limit results
- params = {"q": search_query, "page_size": page_size}
- response = requests.get(
+ # Make request to Mintlify API
+ response = self.mintlify_client.post(
self.api_base_url,
- params=params,
- timeout=10,
+ json=payload,
)
response.raise_for_status()
-
data = response.json()
# Parse results
results = []
- for hit in data.get("results", []):
- # Extract relevant fields from API response
- blocks = hit.get("blocks", [])
- # Get the document path from the hit's path field
- hit_path = hit.get("path", "")
- doc_path = self._extract_doc_path(hit_path)
+ for result in data.get("results", []):
+ group = result.get("group", {})
+ chunks = result.get("chunks", [])
+
+ # Get document path and title from group
+ doc_path = group.get("name", "")
+ group_title = group.get("name", "").replace("/", " / ").title()
+
+ # If chunks exist, use the first chunk's title from metadata
+ title = group_title
+ if chunks:
+ first_chunk = chunks[0].get("chunk", {})
+ metadata = first_chunk.get("metadata", {})
+ title = metadata.get("title", group_title)
# Construct full URL to docs
- domain = hit.get("domain", "https://docs.prowler.com")
- full_url = f"{domain}{hit_path}" if hit_path else ""
+ full_url = f"{self.docs_base_url}/{doc_path}"
- # Extract highlights from API response
+ # Extract highlights and scores from chunks
highlights = []
-
- # Add title highlights
- page_highlights = hit.get("highlights", {})
- if page_highlights.get("title"):
- highlights.extend(page_highlights["title"])
-
- # Add block content highlights (up to 3 snippets)
- for block in blocks[:3]:
- block_highlights = block.get("highlights", {})
- if block_highlights.get("content"):
- highlights.extend(block_highlights["content"])
+ max_score = 0.0
+ for chunk_data in chunks:
+ chunk_highlights = chunk_data.get("highlights", [])
+ highlights.extend(chunk_highlights)
+ # Track the highest score among all chunks in this group
+ chunk_score = chunk_data.get("score", 0.0)
+ max_score = max(max_score, chunk_score)
results.append(
SearchResult(
path=doc_path,
- title=hit.get("title", ""),
+ title=title,
url=full_url,
highlights=highlights,
+ score=max_score,
)
)
@@ -99,7 +141,7 @@ class ProwlerDocsSearchEngine:
def get_document(self, doc_path: str) -> Optional[str]:
"""
- Get full document content from GitHub raw API.
+ Get full document content from Mintlify documentation.
Args:
doc_path: Path to the documentation file (e.g., "getting-started/installation")
@@ -111,15 +153,15 @@ class ProwlerDocsSearchEngine:
# Clean up the path
doc_path = doc_path.rstrip("/")
- # Add .md extension if not present
+ # Add .md extension if not present (Mintlify serves both .md and .mdx)
if not doc_path.endswith(".md"):
doc_path = f"{doc_path}.md"
- # Construct GitHub raw URL
- url = f"{self.github_raw_base}/{doc_path}"
+ # Construct Mintlify URL
+ url = f"{self.docs_base_url}/{doc_path}"
- # Fetch the raw markdown
- response = requests.get(url, timeout=10)
+ # Fetch the documentation page
+ response = self.docs_client.get(url)
response.raise_for_status()
return response.text
@@ -127,34 +169,3 @@ class ProwlerDocsSearchEngine:
except Exception as e:
print(f"Error fetching document: {e}")
return None
-
- def _extract_doc_path(self, url: str) -> str:
- """
- Extract the document path from a full URL.
-
- Args:
- url: Full documentation URL
-
- Returns:
- Document path relative to docs base
- """
- if not url:
- return ""
-
- # Parse URL and extract path
- try:
- parsed = urllib.parse.urlparse(url)
- path = parsed.path
-
- # Remove the base path prefix if present
- base_path = "/projects/prowler-open-source/en/latest/"
- if path.startswith(base_path):
- path = path[len(base_path) :]
-
- # Remove .html extension
- if path.endswith(".html"):
- path = path[:-5]
-
- return path.lstrip("/")
- except Exception:
- return url
diff --git a/mcp_server/prowler_mcp_server/prowler_documentation/server.py b/mcp_server/prowler_mcp_server/prowler_documentation/server.py
index 66aa2b721a..a400a6a46f 100644
--- a/mcp_server/prowler_mcp_server/prowler_documentation/server.py
+++ b/mcp_server/prowler_mcp_server/prowler_documentation/server.py
@@ -23,18 +23,15 @@ def search(
to find relevant information about security checks, cloud providers,
compliance frameworks, and usage instructions.
- Supports advanced search syntax:
- - Exact phrases: "custom css"
- - Prefix search: test*
- - Fuzzy search: doks~1
- - Proximity search: "dashboard admin"~2
+ Uses fulltext search to find the most relevant documentation pages
+ based on your query.
Args:
query: The search query
page_size: Number of top results to return (default: 5)
Returns:
- List of search results with highlights showing matched terms (in tags)
+ List of search results with highlights showing matched terms (in tags)
"""
return prowler_docs_search_engine.search(query, page_size)
diff --git a/mcp_server/prowler_mcp_server/server.py b/mcp_server/prowler_mcp_server/server.py
index 7693117485..644135497a 100644
--- a/mcp_server/prowler_mcp_server/server.py
+++ b/mcp_server/prowler_mcp_server/server.py
@@ -2,6 +2,7 @@ import os
from fastmcp import FastMCP
from prowler_mcp_server.lib.logger import logger
+from starlette.responses import JSONResponse
async def setup_main_server(transport: str) -> FastMCP:
@@ -52,4 +53,9 @@ async def setup_main_server(transport: str) -> FastMCP:
except Exception as e:
logger.error(f"Failed to import Prowler Documentation server: {e}")
+ # Add health check endpoint
+ @prowler_mcp_server.custom_route("/health", methods=["GET"])
+ async def health_check(request):
+ return JSONResponse({"status": "healthy", "service": "prowler-mcp-server"})
+
return prowler_mcp_server
diff --git a/mcp_server/pyproject.toml b/mcp_server/pyproject.toml
index a694fad202..4905ab952c 100644
--- a/mcp_server/pyproject.toml
+++ b/mcp_server/pyproject.toml
@@ -6,7 +6,6 @@ requires = ["setuptools>=61.0", "wheel"]
dependencies = [
"fastmcp>=2.11.3",
"httpx>=0.27.0",
- "requests>=2.31.0"
]
description = "MCP server for Prowler ecosystem"
name = "prowler-mcp"
diff --git a/mcp_server/uv.lock b/mcp_server/uv.lock
index 8c1579c64a..5e82ed64ba 100644
--- a/mcp_server/uv.lock
+++ b/mcp_server/uv.lock
@@ -634,14 +634,12 @@ source = { editable = "." }
dependencies = [
{ name = "fastmcp" },
{ name = "httpx" },
- { name = "requests" },
]
[package.metadata]
requires-dist = [
{ name = "fastmcp", specifier = ">=2.11.3" },
{ name = "httpx", specifier = ">=0.27.0" },
- { name = "requests", specifier = ">=2.31.0" },
]
[[package]]
diff --git a/mkdocs.yml b/mkdocs.yml
deleted file mode 100644
index 68edbb82d2..0000000000
--- a/mkdocs.yml
+++ /dev/null
@@ -1,245 +0,0 @@
-# Project information
-site_name: Prowler Open Source Documentation
-site_url: https://docs.prowler.com/
-site_description: >-
- Prowler Open Source Documentation
-
-# Theme Configuration
-theme:
- language: en
- logo: img/prowler-logo-white.png
- name: material
- favicon: favicon.ico
- features:
- - content.code.copy
- - navigation.tabs
- - navigation.tabs.sticky
- - navigation.sections
- - navigation.top
- palette:
- # Palette toggle for light mode
- - media: "(prefers-color-scheme: light)"
- scheme: default
- primary: black
- accent: green
- toggle:
- icon: material/weather-night
- name: Switch to dark mode
- # Palette toggle for dark mode
- - media: "(prefers-color-scheme: dark)"
- scheme: slate
- primary: black
- accent: green
- toggle:
- icon: material/weather-sunny
- name: Switch to light mode
-
-# plugins:
-# - search
-# - git-revision-date-localized:
-# enable_creation_date: true
-
-edit_uri: "https://github.com/prowler-cloud/prowler/tree/master/docs"
-# Prowler OSS Repository
-repo_url: https://github.com/prowler-cloud/prowler/
-repo_name: prowler-cloud/prowler
-
-nav:
- - Getting Started:
- - Overview:
- - What is Prowler?: index.md
- - Products:
- - Prowler App: products/prowler-app.md
- - Prowler CLI: products/prowler-cli.md
- - Prowler Cloud 🔗: https://cloud.prowler.com
- - Prowler Hub 🔗: https://hub.prowler.com
- - Installation:
- - Prowler App: installation/prowler-app.md
- - Prowler CLI: installation/prowler-cli.md
- - Basic Usage:
- - Prowler App: basic-usage/prowler-app.md
- - Prowler CLI: basic-usage/prowler-cli.md
- - User Guide:
- - Prowler App:
- - Getting Started: tutorials/prowler-app.md
- - Authentication:
- - Social Login: tutorials/prowler-app-social-login.md
- - SSO with SAML: tutorials/prowler-app-sso.md
- - Role-Based Access Control: tutorials/prowler-app-rbac.md
- - Mutelist: tutorials/prowler-app-mute-findings.md
- - Integrations:
- - Amazon S3: tutorials/prowler-app-s3-integration.md
- - AWS Security Hub: tutorials/prowler-app-security-hub-integration.md
- - Jira: tutorials/prowler-app-jira-integration.md
- - Lighthouse AI: tutorials/prowler-app-lighthouse.md
- - Tutorials:
- - SSO with Entra: tutorials/prowler-app-sso-entra.md
- - Bulk Provider Provisioning: tutorials/bulk-provider-provisioning.md
- - CLI:
- - Miscellaneous: tutorials/misc.md
- - Reporting: tutorials/reporting.md
- - Compliance: tutorials/compliance.md
- - Dashboard: tutorials/dashboard.md
- - Configuration File: tutorials/configuration_file.md
- - Logging: tutorials/logging.md
- - Mutelist: tutorials/mutelist.md
- - Integrations:
- - AWS Security Hub: tutorials/aws/securityhub.md
- - Slack: tutorials/integrations.md
- - Send reports to AWS S3: tutorials/aws/s3.md
- - Fixers (Remediations): tutorials/fixer.md
- - Check Aliases: tutorials/check-aliases.md
- - Custom Metadata: tutorials/custom-checks-metadata.md
- - Pentesting: tutorials/pentesting.md
- - Scan Unused Services: tutorials/scan-unused-services.md
- - Quick Inventory: tutorials/quick-inventory.md
- - Tutorials:
- - Parallel Execution: tutorials/parallel-execution.md
-
- - Providers:
- - AWS:
- - Getting Started: tutorials/aws/getting-started-aws.md
- - Authentication: tutorials/aws/authentication.md
- - Assume Role (CLI): tutorials/aws/role-assumption.md
- - AWS Organizations: tutorials/aws/organizations.md
- - AWS Regions and Partitions: tutorials/aws/regions-and-partitions.md
- - Tag-based Scan: tutorials/aws/tag-based-scan.md
- - Resource ARNs based Scan: tutorials/aws/resource-arn-based-scan.md
- - Boto3 Configuration: tutorials/aws/boto3-configuration.md
- - Threat Detection: tutorials/aws/threat-detection.md
- - Tutorial > AWS CloudShell: tutorials/aws/cloudshell.md
- - Tutorial > Scan Multiple AWS Accounts: tutorials/aws/multiaccount.md
- - Azure:
- - Getting Started: tutorials/azure/getting-started-azure.md
- - Authentication: tutorials/azure/authentication.md
- - Non default clouds: tutorials/azure/use-non-default-cloud.md
- - Subscriptions: tutorials/azure/subscriptions.md
- - Create Prowler Service Principal: tutorials/azure/create-prowler-service-principal.md
- - Google Cloud:
- - Getting Started: tutorials/gcp/getting-started-gcp.md
- - Authentication: tutorials/gcp/authentication.md
- - Projects: tutorials/gcp/projects.md
- - Organization: tutorials/gcp/organization.md
- - Retry Configuration: tutorials/gcp/retry-configuration.md
- - Kubernetes:
- - In-Cluster Execution: tutorials/kubernetes/in-cluster.md
- - Non In-Cluster Execution: tutorials/kubernetes/outside-cluster.md
- - Miscellaneous: tutorials/kubernetes/misc.md
- - Microsoft 365:
- - Getting Started: tutorials/microsoft365/getting-started-m365.md
- - Authentication: tutorials/microsoft365/authentication.md
- - Use of PowerShell: tutorials/microsoft365/use-of-powershell.md
- - GitHub:
- - Getting Started: tutorials/github/getting-started-github.md
- - Authentication: tutorials/github/authentication.md
- - IaC:
- - Getting Started: tutorials/iac/getting-started-iac.md
- - Authentication: tutorials/iac/authentication.md
- - MongoDB Atlas:
- - Getting Started: tutorials/mongodbatlas/getting-started-mongodbatlas.md
- - Authentication: tutorials/mongodbatlas/authentication.md
- - LLM:
- - Getting Started: tutorials/llm/getting-started-llm.md
- - Compliance:
- - ThreatScore: tutorials/compliance/threatscore.md
-
- - Developer Guide:
- - Concepts:
- - Introduction: developer-guide/introduction.md
- - Providers: developer-guide/provider.md
- - Services: developer-guide/services.md
- - Checks: developer-guide/checks.md
- - Outputs: developer-guide/outputs.md
- - Integrations: developer-guide/integrations.md
- - Compliance: developer-guide/security-compliance-framework.md
- - Lighthouse: developer-guide/lighthouse.md
- - Providers:
- - AWS: developer-guide/aws-details.md
- - Azure: developer-guide/azure-details.md
- - Google Cloud: developer-guide/gcp-details.md
- - Kubernetes: developer-guide/kubernetes-details.md
- - Microsoft 365: developer-guide/m365-details.md
- - GitHub: developer-guide/github-details.md
- - LLM: developer-guide/llm-details.md
- - Miscellaneous:
- - Documentation: developer-guide/documentation.md
- - Testing:
- - Unit Tests: developer-guide/unit-testing.md
- - Integration Tests: developer-guide/integration-testing.md
- - Debugging: developer-guide/debugging.md
- - Configurable Checks: developer-guide/configurable-checks.md
- - Renaming Checks: developer-guide/renaming-checks.md
- - Check Metadata Writting Guidelines: developer-guide/check-metadata-guidelines.md
- - Security: security.md
- - Contact Us: contact.md
- - Troubleshooting: troubleshooting.md
- - About 🔗: https://prowler.com/about#team
- - Release Notes 🔗: https://github.com/prowler-cloud/prowler/releases
-
-# Customization
-extra:
- consent:
- title: Cookie consent
- description: >-
- We use cookies to recognize your repeated visits and preferences, as well
- as to measure the effectiveness of our documentation and whether users
- find what they're searching for. With your consent, you're helping us to
- make our documentation better.
- analytics:
- provider: google
- property: G-KBKV70W5Y2
- social:
- - icon: fontawesome/brands/github
- link: https://github.com/prowler-cloud
- - icon: fontawesome/brands/docker
- link: https://hub.docker.com/r/toniblyx
- - icon: fontawesome/brands/twitter
- link: https://twitter.com/toniblyx
- - icon: fontawesome/brands/twitter
- link: https://twitter.com/prowlercloud
-
-# Copyright
-copyright: >
- Copyright © Toni de la Fuente, Maintained by the Prowler Team at ProwlerPro, Inc.
- Change cookie settings
-
-markdown_extensions:
- - abbr
- - admonition
- - pymdownx.details
- - pymdownx.superfences
- - attr_list
- - def_list
- - footnotes
- - md_in_html
- - toc:
- permalink: true
- - pymdownx.arithmatex:
- generic: true
- - pymdownx.betterem:
- smart_enable: all
- - pymdownx.caret
- - pymdownx.details
- - pymdownx.emoji:
- emoji_index: !!python/name:material.extensions.emoji.twemoji
- emoji_generator: !!python/name:material.extensions.emoji.to_svg
- - pymdownx.highlight:
- anchor_linenums: true
- - pymdownx.inlinehilite
- - pymdownx.keys
- - pymdownx.magiclink:
- repo_url_shorthand: true
- user: squidfunk
- repo: mkdocs-material
- - pymdownx.mark
- - pymdownx.smartsymbols
- - pymdownx.superfences:
- custom_fences:
- - name: mermaid
- class: mermaid
- format: !!python/name:pymdownx.superfences.fence_code_format
- - pymdownx.tabbed:
- alternate_style: true
- - pymdownx.tasklist:
- custom_checkbox: true
- - pymdownx.tilde
diff --git a/poetry.lock b/poetry.lock
index 5e4aa23c91..847a31f878 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,4 +1,4 @@
-# This file is automatically @generated by Poetry 2.2.0 and should not be changed by hand.
+# This file is automatically @generated by Poetry 2.1.1 and should not be changed by hand.
[[package]]
name = "about-time"
@@ -262,14 +262,14 @@ tests-mypy = ["mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" a
[[package]]
name = "authlib"
-version = "1.6.4"
+version = "1.6.5"
description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients."
optional = false
python-versions = ">=3.9"
groups = ["dev"]
files = [
- {file = "authlib-1.6.4-py2.py3-none-any.whl", hash = "sha256:39313d2a2caac3ecf6d8f95fbebdfd30ae6ea6ae6a6db794d976405fdd9aa796"},
- {file = "authlib-1.6.4.tar.gz", hash = "sha256:104b0442a43061dc8bc23b133d1d06a2b0a9c2e3e33f34c4338929e816287649"},
+ {file = "authlib-1.6.5-py2.py3-none-any.whl", hash = "sha256:3e0e0507807f842b02175507bdee8957a1d5707fd4afb17c32fb43fee90b6e3a"},
+ {file = "authlib-1.6.5.tar.gz", hash = "sha256:6aaf9c79b7cc96c900f0b284061691c5d4e61221640a948fe690b556a6d6d10b"},
]
[package.dependencies]
@@ -834,21 +834,6 @@ typing-extensions = ">=4.6.0"
[package.extras]
aio = ["azure-core[aio] (>=1.30.0)"]
-[[package]]
-name = "babel"
-version = "2.17.0"
-description = "Internationalization utilities"
-optional = false
-python-versions = ">=3.8"
-groups = ["docs"]
-files = [
- {file = "babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"},
- {file = "babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d"},
-]
-
-[package.extras]
-dev = ["backports.zoneinfo ; python_version < \"3.9\"", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata ; sys_platform == \"win32\""]
-
[[package]]
name = "bandit"
version = "1.8.3"
@@ -994,7 +979,7 @@ version = "2025.7.14"
description = "Python package for providing Mozilla's CA Bundle."
optional = false
python-versions = ">=3.7"
-groups = ["main", "dev", "docs"]
+groups = ["main", "dev"]
files = [
{file = "certifi-2025.7.14-py3-none-any.whl", hash = "sha256:6b31f564a415d79ee77df69d757bb49a5bb53bd9f756cbbe24394ffd6fc1f4b2"},
{file = "certifi-2025.7.14.tar.gz", hash = "sha256:8ea99dbdfaaf2ba2f9bac77b9249ef62ec5218e7c2b2e903378ed5fccf765995"},
@@ -1126,7 +1111,7 @@ version = "3.4.2"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
optional = false
python-versions = ">=3.7"
-groups = ["main", "dev", "docs"]
+groups = ["main", "dev"]
files = [
{file = "charset_normalizer-3.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941"},
{file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd"},
@@ -1222,13 +1207,25 @@ files = [
{file = "charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63"},
]
+[[package]]
+name = "circuitbreaker"
+version = "2.1.3"
+description = "Python Circuit Breaker pattern implementation"
+optional = false
+python-versions = "*"
+groups = ["main"]
+files = [
+ {file = "circuitbreaker-2.1.3-py3-none-any.whl", hash = "sha256:87ba6a3ed03fdc7032bc175561c2b04d52ade9d5faf94ca2b035fbdc5e6b1dd1"},
+ {file = "circuitbreaker-2.1.3.tar.gz", hash = "sha256:1a4baee510f7bea3c91b194dcce7c07805fe96c4423ed5594b75af438531d084"},
+]
+
[[package]]
name = "click"
version = "8.1.8"
description = "Composable command line interface toolkit"
optional = false
python-versions = ">=3.7"
-groups = ["main", "dev", "docs"]
+groups = ["main", "dev"]
markers = "python_version < \"3.10\""
files = [
{file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"},
@@ -1244,7 +1241,7 @@ version = "8.2.1"
description = "Composable command line interface toolkit"
optional = false
python-versions = ">=3.10"
-groups = ["main", "dev", "docs"]
+groups = ["main", "dev"]
markers = "python_version >= \"3.10\""
files = [
{file = "click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b"},
@@ -1278,7 +1275,7 @@ version = "0.4.6"
description = "Cross-platform colored terminal text."
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
-groups = ["main", "dev", "docs"]
+groups = ["main", "dev"]
files = [
{file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
@@ -1909,59 +1906,6 @@ files = [
{file = "frozenlist-1.7.0.tar.gz", hash = "sha256:2e310d81923c2437ea8670467121cc3e9b0f76d3043cc1d2331d56c7fb7a3a8f"},
]
-[[package]]
-name = "ghp-import"
-version = "2.1.0"
-description = "Copy your docs directly to the gh-pages branch."
-optional = false
-python-versions = "*"
-groups = ["docs"]
-files = [
- {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"},
- {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"},
-]
-
-[package.dependencies]
-python-dateutil = ">=2.8.1"
-
-[package.extras]
-dev = ["flake8", "markdown", "twine", "wheel"]
-
-[[package]]
-name = "gitdb"
-version = "4.0.12"
-description = "Git Object Database"
-optional = false
-python-versions = ">=3.7"
-groups = ["docs"]
-files = [
- {file = "gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf"},
- {file = "gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571"},
-]
-
-[package.dependencies]
-smmap = ">=3.0.1,<6"
-
-[[package]]
-name = "gitpython"
-version = "3.1.45"
-description = "GitPython is a Python library used to interact with Git repositories"
-optional = false
-python-versions = ">=3.7"
-groups = ["docs"]
-files = [
- {file = "gitpython-3.1.45-py3-none-any.whl", hash = "sha256:8908cb2e02fb3b93b7eb0f2827125cb699869470432cc885f019b8fd0fccff77"},
- {file = "gitpython-3.1.45.tar.gz", hash = "sha256:85b0ee964ceddf211c41b9f27a49086010a190fd8132a24e21f362a4b36a791c"},
-]
-
-[package.dependencies]
-gitdb = ">=4.0.1,<5"
-typing-extensions = {version = ">=3.10.0.2", markers = "python_version < \"3.10\""}
-
-[package.extras]
-doc = ["sphinx (>=7.1.2,<7.2)", "sphinx-autodoc-typehints", "sphinx_rtd_theme"]
-test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock ; python_version < \"3.8\"", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions ; python_version < \"3.11\""]
-
[[package]]
name = "google-api-core"
version = "2.25.1"
@@ -2246,7 +2190,7 @@ version = "3.10"
description = "Internationalized Domain Names in Applications (IDNA)"
optional = false
python-versions = ">=3.6"
-groups = ["main", "dev", "docs"]
+groups = ["main", "dev"]
files = [
{file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"},
{file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"},
@@ -2261,12 +2205,12 @@ version = "8.7.0"
description = "Read metadata from Python packages"
optional = false
python-versions = ">=3.9"
-groups = ["main", "dev", "docs"]
+groups = ["main", "dev"]
files = [
{file = "importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd"},
{file = "importlib_metadata-8.7.0.tar.gz", hash = "sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000"},
]
-markers = {dev = "python_version < \"3.10\"", docs = "python_version < \"3.10\""}
+markers = {dev = "python_version < \"3.10\""}
[package.dependencies]
zipp = ">=3.20"
@@ -2338,7 +2282,7 @@ version = "3.1.6"
description = "A very fast and expressive template engine."
optional = false
python-versions = ">=3.7"
-groups = ["main", "dev", "docs"]
+groups = ["main", "dev"]
files = [
{file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"},
{file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"},
@@ -2536,7 +2480,7 @@ version = "3.9"
description = "Python implementation of John Gruber's Markdown."
optional = false
python-versions = ">=3.9"
-groups = ["main", "docs"]
+groups = ["main"]
files = [
{file = "markdown-3.9-py3-none-any.whl", hash = "sha256:9f4d91ed810864ea88a6f32c07ba8bee1346c0cc1f6b1f9f6c822f2a9667d280"},
{file = "markdown-3.9.tar.gz", hash = "sha256:d2900fe1782bd33bdbbd56859defef70c2e78fc46668f8eb9df3128138f2cb6a"},
@@ -2580,7 +2524,7 @@ version = "3.0.2"
description = "Safely add untrusted strings to HTML/XML markup."
optional = false
python-versions = ">=3.9"
-groups = ["main", "dev", "docs"]
+groups = ["main", "dev"]
files = [
{file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"},
{file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"},
@@ -2689,18 +2633,6 @@ files = [
{file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"},
]
-[[package]]
-name = "mergedeep"
-version = "1.3.4"
-description = "A deep merge function for 🐍."
-optional = false
-python-versions = ">=3.6"
-groups = ["docs"]
-files = [
- {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"},
- {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"},
-]
-
[[package]]
name = "microsoft-kiota-abstractions"
version = "1.9.2"
@@ -2815,116 +2747,6 @@ files = [
[package.dependencies]
microsoft-kiota-abstractions = ">=1.9.2,<1.10.0"
-[[package]]
-name = "mkdocs"
-version = "1.6.1"
-description = "Project documentation with Markdown."
-optional = false
-python-versions = ">=3.8"
-groups = ["docs"]
-files = [
- {file = "mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e"},
- {file = "mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2"},
-]
-
-[package.dependencies]
-click = ">=7.0"
-colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""}
-ghp-import = ">=1.0"
-importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""}
-jinja2 = ">=2.11.1"
-markdown = ">=3.3.6"
-markupsafe = ">=2.0.1"
-mergedeep = ">=1.3.4"
-mkdocs-get-deps = ">=0.2.0"
-packaging = ">=20.5"
-pathspec = ">=0.11.1"
-pyyaml = ">=5.1"
-pyyaml-env-tag = ">=0.1"
-watchdog = ">=2.0"
-
-[package.extras]
-i18n = ["babel (>=2.9.0)"]
-min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4) ; platform_system == \"Windows\"", "ghp-import (==1.0)", "importlib-metadata (==4.4) ; python_version < \"3.10\"", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"]
-
-[[package]]
-name = "mkdocs-get-deps"
-version = "0.2.0"
-description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file"
-optional = false
-python-versions = ">=3.8"
-groups = ["docs"]
-files = [
- {file = "mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134"},
- {file = "mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c"},
-]
-
-[package.dependencies]
-importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""}
-mergedeep = ">=1.3.4"
-platformdirs = ">=2.2.0"
-pyyaml = ">=5.1"
-
-[[package]]
-name = "mkdocs-git-revision-date-localized-plugin"
-version = "1.4.1"
-description = "Mkdocs plugin that enables displaying the localized date of the last git modification of a markdown file."
-optional = false
-python-versions = ">=3.8"
-groups = ["docs"]
-files = [
- {file = "mkdocs_git_revision_date_localized_plugin-1.4.1-py3-none-any.whl", hash = "sha256:bb1eca7f156e0c8a587167662923d76efed7f7e0c06b84471aa5ae72a744a434"},
- {file = "mkdocs_git_revision_date_localized_plugin-1.4.1.tar.gz", hash = "sha256:364d7c4c45c4f333c750e34bc298ac685a7a8bf9b7b52890d52b2f90f1812c4b"},
-]
-
-[package.dependencies]
-babel = ">=2.7.0"
-gitpython = ">=3.1.44"
-mkdocs = ">=1.0"
-pytz = ">=2025.1"
-
-[[package]]
-name = "mkdocs-material"
-version = "9.6.5"
-description = "Documentation that simply works"
-optional = false
-python-versions = ">=3.8"
-groups = ["docs"]
-files = [
- {file = "mkdocs_material-9.6.5-py3-none-any.whl", hash = "sha256:aad3e6fb860c20870f75fb2a69ef901f1be727891e41adb60b753efcae19453b"},
- {file = "mkdocs_material-9.6.5.tar.gz", hash = "sha256:b714679a8c91b0ffe2188e11ed58c44d2523e9c2ae26a29cc652fa7478faa21f"},
-]
-
-[package.dependencies]
-babel = ">=2.10,<3.0"
-colorama = ">=0.4,<1.0"
-jinja2 = ">=3.0,<4.0"
-markdown = ">=3.2,<4.0"
-mkdocs = ">=1.6,<2.0"
-mkdocs-material-extensions = ">=1.3,<2.0"
-paginate = ">=0.5,<1.0"
-pygments = ">=2.16,<3.0"
-pymdown-extensions = ">=10.2,<11.0"
-regex = ">=2022.4"
-requests = ">=2.26,<3.0"
-
-[package.extras]
-git = ["mkdocs-git-committers-plugin-2 (>=1.1,<3)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"]
-imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<11.0)"]
-recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"]
-
-[[package]]
-name = "mkdocs-material-extensions"
-version = "1.3.1"
-description = "Extension pack for Python Markdown and MkDocs Material."
-optional = false
-python-versions = ">=3.8"
-groups = ["docs"]
-files = [
- {file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"},
- {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"},
-]
-
[[package]]
name = "mock"
version = "5.2.0"
@@ -3459,6 +3281,29 @@ rsa = ["cryptography (>=3.0.0)"]
signals = ["blinker (>=1.4.0)"]
signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"]
+[[package]]
+name = "oci"
+version = "2.160.3"
+description = "Oracle Cloud Infrastructure Python SDK"
+optional = false
+python-versions = "*"
+groups = ["main"]
+files = [
+ {file = "oci-2.160.3-py3-none-any.whl", hash = "sha256:858bff3e697098bdda44833d2476bfb4632126f0182178e7dbde4dbd156d71f0"},
+ {file = "oci-2.160.3.tar.gz", hash = "sha256:57514889be3b713a8385d86e3ba8a33cf46e3563c2a7e29a93027fb30b8a2537"},
+]
+
+[package.dependencies]
+certifi = "*"
+circuitbreaker = {version = ">=1.3.1,<3.0.0", markers = "python_version >= \"3.7\""}
+cryptography = ">=3.2.1,<46.0.0"
+pyOpenSSL = ">=17.5.0,<25.0.0"
+python-dateutil = ">=2.5.3,<3.0.0"
+pytz = ">=2016.10"
+
+[package.extras]
+adk = ["docstring-parser (>=0.16) ; python_version >= \"3.10\" and python_version < \"4\"", "mcp (>=1.6.0) ; python_version >= \"3.10\" and python_version < \"4\"", "pydantic (>=2.10.6) ; python_version >= \"3.10\" and python_version < \"4\"", "rich (>=13.9.4) ; python_version >= \"3.10\" and python_version < \"4\""]
+
[[package]]
name = "openapi-schema-validator"
version = "0.6.3"
@@ -3549,28 +3394,12 @@ version = "25.0"
description = "Core utilities for Python packages"
optional = false
python-versions = ">=3.8"
-groups = ["main", "dev", "docs"]
+groups = ["main", "dev"]
files = [
{file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"},
{file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"},
]
-[[package]]
-name = "paginate"
-version = "0.5.7"
-description = "Divides large result sets into pages for easier browsing"
-optional = false
-python-versions = "*"
-groups = ["docs"]
-files = [
- {file = "paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591"},
- {file = "paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945"},
-]
-
-[package.extras]
-dev = ["pytest", "tox"]
-lint = ["black"]
-
[[package]]
name = "pandas"
version = "2.2.3"
@@ -3676,7 +3505,7 @@ version = "0.12.1"
description = "Utility library for gitignore style pattern matching of file paths."
optional = false
python-versions = ">=3.8"
-groups = ["dev", "docs"]
+groups = ["dev"]
files = [
{file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"},
{file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"},
@@ -3703,7 +3532,7 @@ version = "4.3.8"
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`."
optional = false
python-versions = ">=3.9"
-groups = ["dev", "docs"]
+groups = ["dev"]
files = [
{file = "platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4"},
{file = "platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc"},
@@ -4231,7 +4060,7 @@ version = "2.19.2"
description = "Pygments is a syntax highlighting package written in Python."
optional = false
python-versions = ">=3.8"
-groups = ["dev", "docs"]
+groups = ["dev"]
files = [
{file = "pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b"},
{file = "pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"},
@@ -4292,25 +4121,6 @@ typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""
spelling = ["pyenchant (>=3.2,<4.0)"]
testutils = ["gitpython (>3)"]
-[[package]]
-name = "pymdown-extensions"
-version = "10.16"
-description = "Extension pack for Python Markdown."
-optional = false
-python-versions = ">=3.9"
-groups = ["docs"]
-files = [
- {file = "pymdown_extensions-10.16-py3-none-any.whl", hash = "sha256:f5dd064a4db588cb2d95229fc4ee63a1b16cc8b4d0e6145c0899ed8723da1df2"},
- {file = "pymdown_extensions-10.16.tar.gz", hash = "sha256:71dac4fca63fabeffd3eb9038b756161a33ec6e8d230853d3cecf562155ab3de"},
-]
-
-[package.dependencies]
-markdown = ">=3.6"
-pyyaml = "*"
-
-[package.extras]
-extra = ["pygments (>=2.19.1)"]
-
[[package]]
name = "pynacl"
version = "1.5.0"
@@ -4338,6 +4148,25 @@ cffi = ">=1.4.1"
docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"]
tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"]
+[[package]]
+name = "pyopenssl"
+version = "24.3.0"
+description = "Python wrapper module around the OpenSSL library"
+optional = false
+python-versions = ">=3.7"
+groups = ["main"]
+files = [
+ {file = "pyOpenSSL-24.3.0-py3-none-any.whl", hash = "sha256:e474f5a473cd7f92221cc04976e48f4d11502804657a08a989fb3be5514c904a"},
+ {file = "pyopenssl-24.3.0.tar.gz", hash = "sha256:49f7a019577d834746bc55c5fce6ecbcec0f2b4ec5ce1cf43a9a173b8138bb36"},
+]
+
+[package.dependencies]
+cryptography = ">=41.0.5,<45"
+
+[package.extras]
+docs = ["sphinx (!=5.2.0,!=5.2.0.post0,!=7.2.5)", "sphinx_rtd_theme"]
+test = ["pretend", "pytest (>=3.0.1)", "pytest-rerunfailures"]
+
[[package]]
name = "pyparsing"
version = "3.2.3"
@@ -4457,7 +4286,7 @@ version = "2.9.0.post0"
description = "Extensions to the standard Python datetime module"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
-groups = ["main", "dev", "docs"]
+groups = ["main", "dev"]
files = [
{file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"},
{file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"},
@@ -4472,7 +4301,7 @@ version = "2025.1"
description = "World timezone definitions, modern and historical"
optional = false
python-versions = "*"
-groups = ["main", "docs"]
+groups = ["main"]
files = [
{file = "pytz-2025.1-py2.py3-none-any.whl", hash = "sha256:89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57"},
{file = "pytz-2025.1.tar.gz", hash = "sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e"},
@@ -4515,7 +4344,7 @@ version = "6.0.2"
description = "YAML parser and emitter for Python"
optional = false
python-versions = ">=3.8"
-groups = ["main", "dev", "docs"]
+groups = ["main", "dev"]
files = [
{file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"},
{file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"},
@@ -4572,21 +4401,6 @@ files = [
{file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"},
]
-[[package]]
-name = "pyyaml-env-tag"
-version = "1.1"
-description = "A custom YAML tag for referencing environment variables in YAML files."
-optional = false
-python-versions = ">=3.9"
-groups = ["docs"]
-files = [
- {file = "pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04"},
- {file = "pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff"},
-]
-
-[package.dependencies]
-pyyaml = "*"
-
[[package]]
name = "referencing"
version = "0.36.2"
@@ -4610,7 +4424,7 @@ version = "2024.11.6"
description = "Alternative regular expression module, to replace re."
optional = false
python-versions = ">=3.8"
-groups = ["dev", "docs"]
+groups = ["dev"]
files = [
{file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"},
{file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"},
@@ -4714,7 +4528,7 @@ version = "2.32.4"
description = "Python HTTP for Humans."
optional = false
python-versions = ">=3.8"
-groups = ["main", "dev", "docs"]
+groups = ["main", "dev"]
files = [
{file = "requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c"},
{file = "requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422"},
@@ -5221,7 +5035,7 @@ version = "1.17.0"
description = "Python 2 and 3 compatibility utilities"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
-groups = ["main", "dev", "docs"]
+groups = ["main", "dev"]
files = [
{file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"},
{file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"},
@@ -5242,18 +5056,6 @@ files = [
[package.extras]
optional = ["SQLAlchemy (>=1.4,<3)", "aiodns (>1.0)", "aiohttp (>=3.7.3,<4)", "boto3 (<=2)", "websocket-client (>=1,<2)", "websockets (>=9.1,<15)"]
-[[package]]
-name = "smmap"
-version = "5.0.2"
-description = "A pure Python implementation of a sliding window memory map manager"
-optional = false
-python-versions = ">=3.7"
-groups = ["docs"]
-files = [
- {file = "smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e"},
- {file = "smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5"},
-]
-
[[package]]
name = "sniffio"
version = "1.3.1"
@@ -5427,12 +5229,11 @@ version = "4.14.1"
description = "Backported and Experimental Type Hints for Python 3.9+"
optional = false
python-versions = ">=3.9"
-groups = ["main", "dev", "docs"]
+groups = ["main", "dev"]
files = [
{file = "typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76"},
{file = "typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36"},
]
-markers = {docs = "python_version < \"3.10\""}
[[package]]
name = "typing-inspection"
@@ -5497,7 +5298,7 @@ version = "1.26.20"
description = "HTTP library with thread-safe connection pooling, file post, and more."
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7"
-groups = ["main", "dev", "docs"]
+groups = ["main", "dev"]
markers = "python_version < \"3.10\""
files = [
{file = "urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e"},
@@ -5515,7 +5316,7 @@ version = "2.5.0"
description = "HTTP library with thread-safe connection pooling, file post, and more."
optional = false
python-versions = ">=3.9"
-groups = ["main", "dev", "docs"]
+groups = ["main", "dev"]
markers = "python_version >= \"3.10\""
files = [
{file = "urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc"},
@@ -5564,49 +5365,6 @@ files = [
[package.dependencies]
tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
-[[package]]
-name = "watchdog"
-version = "6.0.0"
-description = "Filesystem events monitoring"
-optional = false
-python-versions = ">=3.9"
-groups = ["docs"]
-files = [
- {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26"},
- {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112"},
- {file = "watchdog-6.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c897ac1b55c5a1461e16dae288d22bb2e412ba9807df8397a635d88f671d36c3"},
- {file = "watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c"},
- {file = "watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2"},
- {file = "watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c"},
- {file = "watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948"},
- {file = "watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860"},
- {file = "watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0"},
- {file = "watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c"},
- {file = "watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134"},
- {file = "watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b"},
- {file = "watchdog-6.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e6f0e77c9417e7cd62af82529b10563db3423625c5fce018430b249bf977f9e8"},
- {file = "watchdog-6.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:90c8e78f3b94014f7aaae121e6b909674df5b46ec24d6bebc45c44c56729af2a"},
- {file = "watchdog-6.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e7631a77ffb1f7d2eefa4445ebbee491c720a5661ddf6df3498ebecae5ed375c"},
- {file = "watchdog-6.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c7ac31a19f4545dd92fc25d200694098f42c9a8e391bc00bdd362c5736dbf881"},
- {file = "watchdog-6.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9513f27a1a582d9808cf21a07dae516f0fab1cf2d7683a742c498b93eedabb11"},
- {file = "watchdog-6.0.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7a0e56874cfbc4b9b05c60c8a1926fedf56324bb08cfbc188969777940aef3aa"},
- {file = "watchdog-6.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e6439e374fc012255b4ec786ae3c4bc838cd7309a540e5fe0952d03687d8804e"},
- {file = "watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13"},
- {file = "watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379"},
- {file = "watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e"},
- {file = "watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f"},
- {file = "watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26"},
- {file = "watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c"},
- {file = "watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2"},
- {file = "watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a"},
- {file = "watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680"},
- {file = "watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f"},
- {file = "watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282"},
-]
-
-[package.extras]
-watchmedo = ["PyYAML (>=3.10)"]
-
[[package]]
name = "websocket-client"
version = "1.8.0"
@@ -5880,12 +5638,12 @@ version = "3.23.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
optional = false
python-versions = ">=3.9"
-groups = ["main", "dev", "docs"]
+groups = ["main", "dev"]
files = [
{file = "zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e"},
{file = "zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166"},
]
-markers = {dev = "python_version < \"3.10\"", docs = "python_version < \"3.10\""}
+markers = {dev = "python_version < \"3.10\""}
[package.extras]
check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""]
@@ -5898,4 +5656,4 @@ type = ["pytest-mypy"]
[metadata]
lock-version = "2.1"
python-versions = ">3.9.1,<3.13"
-content-hash = "890d165dc90871b6c2f34a31c61f5857ade538cc62fe33f024a2f57e1c5ac1b1"
+content-hash = "ea79d82b4e255ec4604f440a507da6dac38b57af93356761ac793678aa615cf5"
diff --git a/prowler/CHANGELOG.md b/prowler/CHANGELOG.md
index 289795abd5..8e07798608 100644
--- a/prowler/CHANGELOG.md
+++ b/prowler/CHANGELOG.md
@@ -11,9 +11,12 @@ All notable changes to the **Prowler SDK** are documented in this file.
- LLM provider using `promptfoo` [(#8555)](https://github.com/prowler-cloud/prowler/pull/8555)
- Documentation for renaming checks [(#8717)](https://github.com/prowler-cloud/prowler/pull/8717)
- Add explicit "name" field for each compliance framework and include "FRAMEWORK" and "NAME" in CSV output [(#7920)](https://github.com/prowler-cloud/prowler/pull/7920)
+- Add C5 compliance framework for the AWS provider [(#8830)](https://github.com/prowler-cloud/prowler/pull/8830)
- Equality validation for CheckID, filename and classname [(#8690)](https://github.com/prowler-cloud/prowler/pull/8690)
- Improve logging for Security Hub integration [(#8608)](https://github.com/prowler-cloud/prowler/pull/8608)
+- Oracle Cloud provider with CIS 3.0 benchmark [(#8893)](https://github.com/prowler-cloud/prowler/pull/8893)
- Support for Atlassian Document Format (ADF) in Jira integration [(#8878)](https://github.com/prowler-cloud/prowler/pull/8878)
+- Add Common Cloud Controls for AWS, Azure and GCP [(#8000)](https://github.com/prowler-cloud/prowler/pull/8000)
### Changed
@@ -33,13 +36,18 @@ All notable changes to the **Prowler SDK** are documented in this file.
- Update AWS Backup service metadata to new format [(#8826)](https://github.com/prowler-cloud/prowler/pull/8826)
- Update AWS CloudFormation service metadata to new format [(#8828)](https://github.com/prowler-cloud/prowler/pull/8828)
- Update AWS Lambda service metadata to new format [(#8825)](https://github.com/prowler-cloud/prowler/pull/8825)
+- Update AWS Directory Service service metadata to new format [(#8859)](https://github.com/prowler-cloud/prowler/pull/8859)
- Update AWS CloudFront service metadata to new format [(#8829)](https://github.com/prowler-cloud/prowler/pull/8829)
- Deprecate user authentication for M365 provider [(#8865)](https://github.com/prowler-cloud/prowler/pull/8865)
+- Update AWS EFS service metadata to new format [(#8889)](https://github.com/prowler-cloud/prowler/pull/8889)
### Fixed
- Fix SNS topics showing empty AWS_ResourceID in Quick Inventory output [(#8762)](https://github.com/prowler-cloud/prowler/issues/8762)
- Fix HTML Markdown output for long strings [(#8803)](https://github.com/prowler-cloud/prowler/pull/8803)
- Prowler ThreatScore scoring calculation CLI [(#8582)](https://github.com/prowler-cloud/prowler/pull/8582)
+- Add missing attributes for Mitre Attack AWS, Azure and GCP [(#8907)](https://github.com/prowler-cloud/prowler/pull/8907)
+- Fix KeyError in CloudSQL and Monitoring services in GCP provider [(#8909)](https://github.com/prowler-cloud/prowler/pull/8909)
+- Fix ResourceName in GCP provider [(#8928)](https://github.com/prowler-cloud/prowler/pull/8928)
---
diff --git a/prowler/__main__.py b/prowler/__main__.py
index cbf3cdc19a..29fdb375ba 100644
--- a/prowler/__main__.py
+++ b/prowler/__main__.py
@@ -49,12 +49,17 @@ from prowler.lib.outputs.asff.asff import ASFF
from prowler.lib.outputs.compliance.aws_well_architected.aws_well_architected import (
AWSWellArchitected,
)
+from prowler.lib.outputs.compliance.ccc.ccc_aws import CCC_AWS
+from prowler.lib.outputs.compliance.ccc.ccc_azure import CCC_Azure
+from prowler.lib.outputs.compliance.ccc.ccc_gcp import CCC_GCP
+from prowler.lib.outputs.compliance.c5.c5_aws import AWSC5
from prowler.lib.outputs.compliance.cis.cis_aws import AWSCIS
from prowler.lib.outputs.compliance.cis.cis_azure import AzureCIS
from prowler.lib.outputs.compliance.cis.cis_gcp import GCPCIS
from prowler.lib.outputs.compliance.cis.cis_github import GithubCIS
from prowler.lib.outputs.compliance.cis.cis_kubernetes import KubernetesCIS
from prowler.lib.outputs.compliance.cis.cis_m365 import M365CIS
+from prowler.lib.outputs.compliance.cis.cis_oci import OCICIS
from prowler.lib.outputs.compliance.compliance import display_compliance_table
from prowler.lib.outputs.compliance.ens.ens_aws import AWSENS
from prowler.lib.outputs.compliance.ens.ens_azure import AzureENS
@@ -107,6 +112,7 @@ from prowler.providers.llm.models import LLMOutputOptions
from prowler.providers.m365.models import M365OutputOptions
from prowler.providers.mongodbatlas.models import MongoDBAtlasOutputOptions
from prowler.providers.nhn.models import NHNOutputOptions
+from prowler.providers.oraclecloud.models import OCIOutputOptions
def prowler():
@@ -326,6 +332,10 @@ def prowler():
output_options = IACOutputOptions(args, bulk_checks_metadata)
elif provider == "llm":
output_options = LLMOutputOptions(args, bulk_checks_metadata)
+ elif provider == "oci":
+ output_options = OCIOutputOptions(
+ args, bulk_checks_metadata, global_provider.identity
+ )
# Run the quick inventory for the provider if available
if hasattr(args, "quick_inventory") and args.quick_inventory:
@@ -554,6 +564,33 @@ def prowler():
)
generated_outputs["compliance"].append(prowler_threatscore)
prowler_threatscore.batch_write_data_to_file()
+ elif compliance_name.startswith("ccc_"):
+
+ filename = (
+ f"{output_options.output_directory}/compliance/"
+ f"{output_options.output_filename}_{compliance_name}.csv"
+ )
+
+ ccc_aws = CCC_AWS(
+ findings=finding_outputs,
+ compliance=bulk_compliance_frameworks[compliance_name],
+ file_path=filename,
+ )
+
+ generated_outputs["compliance"].append(ccc_aws)
+ ccc_aws.batch_write_data_to_file()
+ elif compliance_name == "c5_aws":
+ filename = (
+ f"{output_options.output_directory}/compliance/"
+ f"{output_options.output_filename}_{compliance_name}.csv"
+ )
+ c5 = AWSC5(
+ findings=finding_outputs,
+ compliance=bulk_compliance_frameworks[compliance_name],
+ file_path=filename,
+ )
+ generated_outputs["compliance"].append(c5)
+ c5.batch_write_data_to_file()
else:
filename = (
f"{output_options.output_directory}/compliance/"
@@ -633,6 +670,18 @@ def prowler():
)
generated_outputs["compliance"].append(prowler_threatscore)
prowler_threatscore.batch_write_data_to_file()
+ elif compliance_name.startswith("ccc_"):
+ filename = (
+ f"{output_options.output_directory}/compliance/"
+ f"{output_options.output_filename}_{compliance_name}.csv"
+ )
+ ccc_azure = CCC_Azure(
+ findings=finding_outputs,
+ compliance=bulk_compliance_frameworks[compliance_name],
+ file_path=filename,
+ )
+ generated_outputs["compliance"].append(ccc_azure)
+ ccc_azure.batch_write_data_to_file()
else:
filename = (
f"{output_options.output_directory}/compliance/"
@@ -712,6 +761,18 @@ def prowler():
)
generated_outputs["compliance"].append(prowler_threatscore)
prowler_threatscore.batch_write_data_to_file()
+ elif compliance_name.startswith("ccc_"):
+ filename = (
+ f"{output_options.output_directory}/compliance/"
+ f"{output_options.output_filename}_{compliance_name}.csv"
+ )
+ ccc_gcp = CCC_GCP(
+ findings=finding_outputs,
+ compliance=bulk_compliance_frameworks[compliance_name],
+ file_path=filename,
+ )
+ generated_outputs["compliance"].append(ccc_gcp)
+ ccc_gcp.batch_write_data_to_file()
else:
filename = (
f"{output_options.output_directory}/compliance/"
@@ -876,6 +937,34 @@ def prowler():
generated_outputs["compliance"].append(generic_compliance)
generic_compliance.batch_write_data_to_file()
+ elif provider == "oci":
+ for compliance_name in input_compliance_frameworks:
+ if compliance_name.startswith("cis_"):
+ # Generate CIS Finding Object
+ filename = (
+ f"{output_options.output_directory}/compliance/"
+ f"{output_options.output_filename}_{compliance_name}.csv"
+ )
+ cis = OCICIS(
+ findings=finding_outputs,
+ compliance=bulk_compliance_frameworks[compliance_name],
+ file_path=filename,
+ )
+ generated_outputs["compliance"].append(cis)
+ cis.batch_write_data_to_file()
+ else:
+ filename = (
+ f"{output_options.output_directory}/compliance/"
+ f"{output_options.output_filename}_{compliance_name}.csv"
+ )
+ generic_compliance = GenericCompliance(
+ findings=finding_outputs,
+ compliance=bulk_compliance_frameworks[compliance_name],
+ file_path=filename,
+ )
+ generated_outputs["compliance"].append(generic_compliance)
+ generic_compliance.batch_write_data_to_file()
+
# AWS Security Hub Integration
if provider == "aws":
# Send output to S3 if needed (-B / -D) for all the output formats
diff --git a/prowler/compliance/aws/c5_aws.json b/prowler/compliance/aws/c5_aws.json
new file mode 100644
index 0000000000..cf553bef70
--- /dev/null
+++ b/prowler/compliance/aws/c5_aws.json
@@ -0,0 +1,10744 @@
+{
+ "Framework": "C5",
+ "Name": "Cloud Computing Compliance Criteria Catalogue C5",
+ "Version": "2025",
+ "Provider": "AWS",
+ "Description": "This Directive lays down measures that aim to achieve a high common level of cybersecurity across the Union, with a view to improving the functioning of the internal market.",
+ "Requirements": [
+ {
+ "Id": "OIS-01.01B",
+ "Description": "The cloud service provider operates an information security management system (ISMS) in accordance with ISO/IEC 27001. The scope of the ISMS covers the cloud service provider's organisational units, locations, zones, regions and procedures relevant to the development and operation of the cloud service.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-01 Information Security Management System (ISMS)",
+ "Type": "Basic",
+ "AboutCriteria": "The basic criterion can also be fulfilled without valid certification of the ISMS according to ISO/IEC 27001 or ISO 27001 based on IT-Grundschutz, if the submitted documentation meets the requirements of ISO/IEC 27001. The auditor has to evaluate whether the documentation meets the referenced requirements of the ISO standard. This does not require a full certification audit of the management system in accordance with ISO 17021, but a focused inspection of the related documentation. Cross-sectional functions do not need to be integrated into a single ISMS. Instead, multiple ISMS can be established to cover both service-related internal control systems and central functions effectively. The scope of the ISMS may go beyond the scope of the cloud service provider's system of internal control for the cloud service in scope of an assurance engagement with this criteria catalogue. If the scope of the ISMS is broader than the scope of the assurance engagement, evidence to be obtained about the design and operation of the ISMS can be limited to records that are applicable to the cloud service in scope of the assurance engagement.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OIS-01.02B",
+ "Description": "The measures for setting up, implementing, maintaining and continuously improving the ISMS are documented. The documentation includes: - Context of the cloud service provider;- Scope of the ISMS (Section 4.3 of ISO/IEC 27001);- Declaration of applicability (Section 6.1.3);- Description of how the cloud service is covered by activities in the ISMS;- Description of how the security of the cloud service is maintained and improved; and- Results of the last management review (Section 9.3).",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-01 Information Security Management System (ISMS)",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OIS-01.03B",
+ "Description": "Additionally, the cloud service provider documents the scope of the cloud service that is under the cloud service provider's control and the boundaries.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-01 Information Security Management System (ISMS)",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OIS-01.01AC",
+ "Description": "The Information Security Management System (ISMS) has a valid certification according to ISO/IEC 27001 or ISO 27001 based on IT-Grundschutz.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-01 Information Security Management System (ISMS)",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OIS-02.01B",
+ "Description": "Top management of the cloud service provider has adopted an information security policy.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-02 Information Security Policy",
+ "Type": "Basic",
+ "AboutCriteria": "The top management is a natural person or group of persons who make the final decision for the institution and is responsible for that decision.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_role_administratoraccess_policy",
+ "iam_policy_cloudshell_admin_not_attached",
+ "iam_securityaudit_role_created",
+ "iam_support_role_created"
+ ]
+ },
+ {
+ "Id": "OIS-02.02B",
+ "Description": "Top management of the cloud service provider has communicated the information security policy to internal and external employees as well as cloud service customers.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-02 Information Security Policy",
+ "Type": "Basic",
+ "AboutCriteria": "The top management is a natural person or group of persons who make the final decision for the institution and is responsible for that decision.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_support_role_created",
+ "iam_securityaudit_role_created"
+ ]
+ },
+ {
+ "Id": "OIS-02.03B",
+ "Description": "The information security policy describes: - The importance of information security, based on the requirements of cloud service customers in relation to information security;- The security objectives and the desired security level, based on the business goals and activities as well as compliance obligations of the cloud service provider;- The commitment of the cloud service provider to implement the security measures required to achieve the established security objectives;- The most important aspects of the security strategy to achieve the security objectives set; and- The organisational structure for information security in the scope of the ISMS.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-02 Information Security Policy",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OIS-02.04B",
+ "Description": "The cloud service provider reviews the information security policy in accordance with SP-02 on a regular basis and at least in the event of significant changes that are likely to affect the principles defined in the policy. The review process of the information security policy includes the approval and endorsement by top management.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-02 Information Security Policy",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OIS-03.01B",
+ "Description": "The cloud service provider establishes, documents, and communicates the Cloud Shared Security Responsibility Model (SSRM) to define and manage interfaces and dependencies between cloud service delivery activities performed by the cloud service provider and those performed by third parties.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-03 Interfaces and Dependencies",
+ "Type": "Basic",
+ "AboutCriteria": "Third parties in the sense of this basic criterion are, e.g. cloud service customers and subservice providers. The cloud service provider can define and document the interfaces and dependencies described in the basic criterion in guidelines and instructions. For example, cloud service customers' obligations to cooperate should be described in service descriptions and contracts. The cloud service provider can present the underlying Shared Responsibility Model of their cloud service in the guidelines and instructions to help cloud service customers understand their roles and responsibilities in terms of security and operational management.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that the guidelines and requirements for compliance with the contractual agreements with the cloud service provider (i.e., responsibilities, cooperation obligations and interfaces for reporting security incidents) are adequately defined, documented and set up."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OIS-03.02B",
+ "Description": "The SSRM documentation clearly defines the responsibilities between both parties for handling vulnerabilities, security incidents, and malfunctions. The type and scope of the documentation is geared towards the information requirements of the subject matter experts of the affected organisations in order to carry out the activities appropriately (e.g. definition of roles and responsibilities in guidelines, description of cooperation obligations in service descriptions and contracts).",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-03 Interfaces and Dependencies",
+ "Type": "Basic",
+ "AboutCriteria": "The cloud service provider can define and document the interfaces and dependencies described in the basic criterion in guidelines and instructions. For example, cloud service customers' obligations to cooperate should be described in service descriptions and contracts. The cloud service provider can present the underlying Shared Responsibility Model of their cloud service in the guidelines and instructions to help cloud service customers understand their roles and responsibilities in terms of security and operational management.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "ssmincidents_enabled_with_plans",
+ "ssm_documents_set_as_public"
+ ]
+ },
+ {
+ "Id": "OIS-03.03B",
+ "Description": "The cloud service provider regularly reviews and validates the SSRM documentation to ensure its accuracy and relevance for all cloud service offerings.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-03 Interfaces and Dependencies",
+ "Type": "Basic",
+ "AboutCriteria": "The cloud service provider can define and document the interfaces and dependencies described in the basic criterion in guidelines and instructions. For example, cloud service customers' obligations to cooperate should be described in service descriptions and contracts. The cloud service provider can present the underlying Shared Responsibility Model of their cloud service in the guidelines and instructions to help cloud service customers understand their roles and responsibilities in terms of security and operational management.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OIS-03.04B",
+ "Description": "The cloud service provider implements, operates, and assesses the SSRM components for which it is responsible, ensuring adherence to the defined security measures.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-03 Interfaces and Dependencies",
+ "Type": "Basic",
+ "AboutCriteria": "The cloud service provider can define and document the interfaces and dependencies described in the basic criterion in guidelines and instructions. For example, cloud service customers' obligations to cooperate should be described in service descriptions and contracts. The cloud service provider can present the underlying Shared Responsibility Model of their cloud service in the guidelines and instructions to help cloud service customers understand their roles and responsibilities in terms of security and operational management.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OIS-03.05B",
+ "Description": "The communication of changes to the SSRM, interfaces and dependencies takes place in a timely manner so that the affected organisations and third parties can react appropriately with organisational and technical measures before the changes take effect.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-03 Interfaces and Dependencies",
+ "Type": "Basic",
+ "AboutCriteria": "Third parties in the sense of this basic criterion are, e.g. cloud service customers and subservice providers. The cloud service provider can define and document the interfaces and dependencies described in the basic criterion in guidelines and instructions. For example, cloud service customers' obligations to cooperate should be described in service descriptions and contracts. The cloud service provider can present the underlying Shared Responsibility Model of their cloud service in the guidelines and instructions to help cloud service customers understand their roles and responsibilities in terms of security and operational management.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "ssmincidents_enabled_with_plans"
+ ]
+ },
+ {
+ "Id": "OIS-03.06B",
+ "Description": "By maintaining an up-to-date and clearly communicated SSRM, the cloud service provider ensures a comprehensive understanding of security responsibilities, fostering a secure and reliable cloud environment for all stakeholders.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-03 Interfaces and Dependencies",
+ "Type": "Basic",
+ "AboutCriteria": "The cloud service provider can define and document the interfaces and dependencies described in the basic criterion in guidelines and instructions. For example, cloud service customers' obligations to cooperate should be described in service descriptions and contracts. The cloud service provider can present the underlying Shared Responsibility Model of their cloud service in the guidelines and instructions to help cloud service customers understand their roles and responsibilities in terms of security and operational management.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "ssmincidents_enabled_with_plans",
+ "ssm_documents_set_as_public",
+ "ssm_managed_compliant_patching",
+ "ssm_document_secrets"
+ ]
+ },
+ {
+ "Id": "OIS-04.01B",
+ "Description": "Conflicting tasks and responsibilities are segregated based on a risk assessment in accordance with OIS-07 to reduce the risk of unauthorised or unintended changes or misuse of cloud service customer data, cloud service derived data and cloud service provider data. The risk assessment covers the following areas, insofar as these are applicable to the provision of the cloud service and are in the area of responsibility of the cloud service provider: - Administration of rights profiles, approval and assignment of access and access authorisations (cf. IAM-01);- Development, testing and release of changes (cf. DEV-01); and- Operation of the system components.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-04 Segregation of Duties",
+ "Type": "Basic",
+ "AboutCriteria": "Identified events that may constitute unauthorised or unintentional changes to or misuse of cloud service customer data, cloud service derived data and cloud service provider data may, for example, be treated as a security incident, cf. SIM-01.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_securityaudit_role_created"
+ ]
+ },
+ {
+ "Id": "OIS-04.02B",
+ "Description": "The cloud service provider implements the mitigating measures defined in the risk treatment plan, prioritising segregation of duties.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-04 Segregation of Duties",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OIS-04.03B",
+ "Description": "If segregation cannot be established for organisational or technical reasons, measures are in place to monitor the activities in order to detect unauthorised or unintended changes as well as misuse and to take appropriate actions.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-04 Segregation of Duties",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "account_maintain_different_contact_details_to_security_billing_and_operations",
+ "athena_workgroup_enforce_configuration",
+ "iam_role_cross_account_readonlyaccess_policy",
+ "iam_role_administratoraccess_policy",
+ "iam_aws_attached_policy_no_administrative_privileges",
+ "iam_customer_unattached_policy_no_administrative_privileges",
+ "iam_role_administratoraccess_policy",
+ "iam_user_administrator_access_policy",
+ "organizations_delegated_administrators",
+ "cloudwatch_changes_to_network_route_tables_alarm_configured",
+ "cloudwatch_changes_to_network_acls_alarm_configured",
+ "cloudwatch_changes_to_network_gateways_alarm_configured",
+ "cloudwatch_changes_to_vpcs_alarm_configured",
+ "cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_aws_organizations_changes",
+ "cloudwatch_log_metric_filter_for_s3_bucket_policy_changes",
+ "cloudwatch_log_metric_filter_policy_changes",
+ "cloudwatch_log_metric_filter_security_group_changes"
+ ]
+ },
+ {
+ "Id": "OIS-04.04B",
+ "Description": "The cloud service provider introduces and maintains an inventory of conflicting tasks and responsibilities, including resolving measures and enforces the segregation of duties during the assignment or modification of roles as part of the role management process.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-04 Segregation of Duties",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OIS-04.01AC",
+ "Description": "The cloud service provider monitors and enforces measures related to segregation of duties to resolve conflicting roles.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-04 Segregation of Duties",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudwatch_changes_to_network_acls_alarm_configured",
+ "cloudwatch_changes_to_network_gateways_alarm_configured",
+ "cloudwatch_changes_to_network_route_tables_alarm_configured",
+ "cloudwatch_changes_to_vpcs_alarm_configured",
+ "cloudwatch_cross_account_sharing_disabled",
+ "cloudwatch_log_group_kms_encryption_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_authentication_failures",
+ "cloudwatch_log_metric_filter_aws_organizations_changes",
+ "cloudwatch_log_metric_filter_for_s3_bucket_policy_changes",
+ "cloudwatch_log_metric_filter_policy_changes",
+ "cloudwatch_log_metric_filter_root_usage",
+ "cloudwatch_log_metric_filter_security_group_changes",
+ "cloudwatch_log_metric_filter_sign_in_without_mfa",
+ "cloudwatch_log_metric_filter_unauthorized_api_calls",
+ "bedrock_api_key_no_administrative_privileges",
+ "iam_aws_attached_policy_no_administrative_privileges",
+ "iam_customer_attached_policy_no_administrative_privileges",
+ "iam_customer_unattached_policy_no_administrative_privileges",
+ "iam_inline_policy_no_administrative_privileges"
+ ]
+ },
+ {
+ "Id": "OIS-04.02AC",
+ "Description": "Any deviations identified during monitoring are addressed through timely and appropriate remediation measures.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-04 Segregation of Duties",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudwatch_alarm_actions_alarm_state_configured",
+ "cloudwatch_alarm_actions_enabled",
+ "cloudwatch_changes_to_network_acls_alarm_configured",
+ "cloudwatch_changes_to_network_gateways_alarm_configured",
+ "cloudwatch_changes_to_network_route_tables_alarm_configured",
+ "cloudwatch_changes_to_vpcs_alarm_configured",
+ "cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_authentication_failures",
+ "cloudwatch_log_metric_filter_aws_organizations_changes",
+ "cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk",
+ "cloudwatch_log_metric_filter_for_s3_bucket_policy_changes",
+ "cloudwatch_log_metric_filter_policy_changes",
+ "cloudwatch_log_metric_filter_root_usage",
+ "cloudwatch_log_metric_filter_security_group_changes",
+ "cloudwatch_log_metric_filter_sign_in_without_mfa",
+ "cloudwatch_log_metric_filter_unauthorized_api_calls"
+ ]
+ },
+ {
+ "Id": "OIS-05.01B",
+ "Description": "The cloud service provider collects information from selected internal and external sources to gain a comprehensive view of the threat landscape that lead to cybersecurity risks.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-05 Threat Intelligence",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudtrail_multi_region_enabled",
+ "config_recorder_all_regions_enabled",
+ "s3_multi_region_access_point_public_access_block"
+ ]
+ },
+ {
+ "Id": "OIS-05.02B",
+ "Description": "The collected information is correlated and analysed to identify its potential impact on the cloud service provider's organisation.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-05 Threat Intelligence",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudtrail_multi_region_enabled",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_insights_exist",
+ "cloudtrail_multi_region_enabled_logging_management_events"
+ ]
+ },
+ {
+ "Id": "OIS-05.03B",
+ "Description": "The threat intelligence insights are included in the risk management process (cf. OIS-07 and OIS-08) to ensure that the current internal and external threats are reflected in risk handling measures.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-05 Threat Intelligence",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "ssmincidents_enabled_with_plans",
+ "cloudtrail_threat_detection_enumeration",
+ "ec2_securitygroup_allow_ingress_from_internet_to_high_risk_tcp_ports",
+ "wellarchitected_workload_no_high_or_medium_risks"
+ ]
+ },
+ {
+ "Id": "OIS-06.01B",
+ "Description": "If the cloud service is used by public sector organisations in Germany, the cloud service provider establishes and maintains contacts with the National IT Situation Centre and the CERT Association of the BSI.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-06 Contact with Relevant Government Agencies and Interest Groups",
+ "Type": "Basic",
+ "AboutCriteria": "Public sector organisations in Germany are e.g. ministries and authorities.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "account_security_contact_information_is_registered"
+ ]
+ },
+ {
+ "Id": "OIS-07.01B",
+ "Description": "Policies and instructions for risk management procedures are documented, communicated and provided in accordance with SP-01. Risk management procedures are based on a risk assessment methodology that enables reproducibility and comparability for the following aspects: - Identification of cybersecurity risks and other risks associated with the loss of confidentiality, integrity, availability and authenticity of information within the scope of the ISMS and assigning risk owners;- Analysis of the probability and impact of occurrence and determination of the level of risk;- Evaluation of the risk analysis based on defined criteria for risk acceptance and prioritisation of risk handling;- Treatment of risks through measures, including approval of authorisation and acceptance of residual risks by risk owners;- Documentation of the activities implemented to enable consistent, valid and comparable results; and- Conducting a review of the risk assessment and status of risk treatment plans by the management responsible for the security of the cloud service.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-07 Risk Management Policy",
+ "Type": "Basic",
+ "AboutCriteria": "The risk level can be determined by qualitative, semi-quantitative and quantitative methods (cf. ISO 31010) based on the likelihood and impacts.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OIS-08.01B",
+ "Description": "The cloud service provider executes the process for handling risks as needed or at least once a year.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-08 Application of the Risk Management Policy",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies only to risks that reside within the area of responsibility of the cloud service provider. Risks that arise for the cloud service customer when using the cloud service are not covered by this criterion. When outsourcing activities for the provision of cloud services to subservice organisations, the responsibility for these risks remains with the cloud service provider. Requirements for measures to manage these risks can be found in the criteria area 'Control and Monitoring of Service Providers and Suppliers (SSO)'.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "ssmincidents_enabled_with_plans"
+ ]
+ },
+ {
+ "Id": "OIS-08.02B",
+ "Description": "The following aspects are taken into account when identifying risks, insofar as they are applicable to the cloud service provided and are within the area of responsibility of the cloud service provider: - Processing, storage or transmission of cloud service customer data and cloud service derived data with different protection needs;- Occurrence of vulnerabilities and malfunctions in technical protective measures for separating shared resources;- Attacks via access points, including interfaces accessible from public networks and accidentally exposed interfaces;- Conflicting tasks and areas of responsibility that cannot be separated for organisational or technical reasons;- Dependencies on subservice organisations;- An encryption and key management risk programme which addresses the risks of unauthorised disclosure, modification, destruction, or information loss of cryptographic keys; and- Segregation of cloud users and their data within systems, networks and storage.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-08 Application of the Risk Management Policy",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies only to risks that reside within the area of responsibility of the cloud service provider. Risks that arise for the cloud service customer when using the cloud service are not covered by this criterion. When outsourcing activities for the provision of cloud services to subservice organisations, the responsibility for these risks remains with the cloud service provider. Requirements for measures to manage these risks can be found in the criteria area 'Control and Monitoring of Service Providers and Suppliers (SSO)'. Shared resources are e.g. networks, RAM or storage. When determining protection needs of customer data, regulatory requirements applicable to customer data should be considered such as PCI-DSS, HIPAA, DORA (regulation on digital operational resilience for the financial sector and amending regulations), NIS 2 Directive and KRITIS.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "documentdb_cluster_storage_encrypted",
+ "neptune_cluster_storage_encrypted",
+ "rds_cluster_storage_encrypted",
+ "rds_instance_storage_encrypted",
+ "storagegateway_fileshare_encryption_enabled",
+ "storagegateway_gateway_fault_tolerant",
+ "workspaces_volume_encryption_enabled",
+ "cloudtrail_kms_encryption_enabled",
+ "cloudwatch_log_group_kms_encryption_enabled",
+ "cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk",
+ "dynamodb_tables_kms_cmk_encryption_enabled",
+ "eks_cluster_kms_cmk_encryption_in_secrets_enabled",
+ "iam_inline_policy_no_full_access_to_kms",
+ "iam_policy_no_full_access_to_kms",
+ "kms_cmk_are_used",
+ "kms_cmk_not_deleted_unintentionally",
+ "kms_cmk_not_multi_region",
+ "kms_cmk_rotation_enabled",
+ "kms_key_not_publicly_accessible",
+ "s3_bucket_kms_encryption",
+ "sns_topics_kms_encryption_at_rest_enabled"
+ ]
+ },
+ {
+ "Id": "OIS-08.03B",
+ "Description": "The cloud service provider implements the policies and procedures covering risk assessments on the entire cloud service.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-08 Application of the Risk Management Policy",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies only to risks that reside within the area of responsibility of the cloud service provider. Risks that arise for the cloud service customer when using the cloud service are not covered by this criterion. When outsourcing activities for the provision of cloud services to subservice organisations, the responsibility for these risks remains with the cloud service provider. Requirements for measures to manage these risks can be found in the criteria area 'Control and Monitoring of Service Providers and Suppliers (SSO)'.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OIS-08.04B",
+ "Description": "The results of the risk assessments are made available to relevant internal parties.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-08 Application of the Risk Management Policy",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies only to risks that reside within the area of responsibility of the cloud service provider. Risks that arise for the cloud service customer when using the cloud service are not covered by this criterion. When outsourcing activities for the provision of cloud services to subservice organisations, the responsibility for these risks remains with the cloud service provider. Requirements for measures to manage these risks can be found in the criteria area 'Control and Monitoring of Service Providers and Suppliers (SSO)'.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OIS-08.05B",
+ "Description": "Information, specific for their purposes, is made available to relevant external parties.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-08 Application of the Risk Management Policy",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies only to risks that reside within the area of responsibility of the cloud service provider. Risks that arise for the cloud service customer when using the cloud service are not covered by this criterion. When outsourcing activities for the provision of cloud services to subservice organisations, the responsibility for these risks remains with the cloud service provider. Requirements for measures to manage these risks can be found in the criteria area 'Control and Monitoring of Service Providers and Suppliers (SSO)'.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OIS-08.06B",
+ "Description": "The analysis, evaluation and treatment of risks, including the approval of actions and acceptance of residual risks, is reviewed by the risk owners for adequacy at least annually, and after each significant change that may affect the security of the cloud service.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-08 Application of the Risk Management Policy",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies only to risks that reside within the area of responsibility of the cloud service provider. Risks that arise for the cloud service customer when using the cloud service are not covered by this criterion. When outsourcing activities for the provision of cloud services to subservice organisations, the responsibility for these risks remains with the cloud service provider. Requirements for measures to manage these risks can be found in the criteria area 'Control and Monitoring of Service Providers and Suppliers (SSO)'.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OIS-08.07B",
+ "Description": "The cloud service provider monitors the evolution of the risk and reviews the risk assessments accordingly.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-08 Application of the Risk Management Policy",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies only to risks that reside within the area of responsibility of the cloud service provider. Risks that arise for the cloud service customer when using the cloud service are not covered by this criterion. When outsourcing activities for the provision of cloud services to subservice organisations, the responsibility for these risks remains with the cloud service provider. Requirements for measures to manage these risks can be found in the criteria area 'Control and Monitoring of Service Providers and Suppliers (SSO)'.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "secretsmanager_secret_rotated_periodically"
+ ]
+ },
+ {
+ "Id": "OIS-08.08B",
+ "Description": "The cloud service provider prioritises the risk treatment according to the level of cyber risks related to the cloud service.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-08 Application of the Risk Management Policy",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies only to risks that reside within the area of responsibility of the cloud service provider. Risks that arise for the cloud service customer when using the cloud service are not covered by this criterion. When outsourcing activities for the provision of cloud services to subservice organisations, the responsibility for these risks remains with the cloud service provider. Requirements for measures to manage these risks can be found in the criteria area 'Control and Monitoring of Service Providers and Suppliers (SSO)'.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "guardduty_no_high_severity_findings",
+ "cloudtrail_threat_detection_privilege_escalation"
+ ]
+ },
+ {
+ "Id": "OIS-08.09B",
+ "Description": "The cloud service provider documents and implements a risk treatment plan based on the risk assessment (OIS-07).",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-08 Application of the Risk Management Policy",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies only to risks that reside within the area of responsibility of the cloud service provider. Risks that arise for the cloud service customer when using the cloud service are not covered by this criterion. When outsourcing activities for the provision of cloud services to subservice organisations, the responsibility for these risks remains with the cloud service provider. Requirements for measures to manage these risks can be found in the criteria area 'Control and Monitoring of Service Providers and Suppliers (SSO)'.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "backup_plans_exist",
+ "ssm_documents_set_as_public",
+ "ssm_managed_compliant_patching",
+ "ssmincidents_enabled_with_plans"
+ ]
+ },
+ {
+ "Id": "OIS-08.10B",
+ "Description": "The risk treatment plan reduces the risk level to a residual risk acceptable to the risk owners.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-08 Application of the Risk Management Policy",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies only to risks that reside within the area of responsibility of the cloud service provider. Risks that arise for the cloud service customer when using the cloud service are not covered by this criterion. When outsourcing activities for the provision of cloud services to subservice organisations, the responsibility for these risks remains with the cloud service provider. Requirements for measures to manage these risks can be found in the criteria area 'Control and Monitoring of Service Providers and Suppliers (SSO)'.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OIS-08.11B",
+ "Description": "The risk treatment plan is made available to relevant internal parties, including appropriately summarised and abstracted versions.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-08 Application of the Risk Management Policy",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies only to risks that reside within the area of responsibility of the cloud service provider. Risks that arise for the cloud service customer when using the cloud service are not covered by this criterion. When outsourcing activities for the provision of cloud services to subservice organisations, the responsibility for these risks remains with the cloud service provider. Requirements for measures to manage these risks can be found in the criteria area 'Control and Monitoring of Service Providers and Suppliers (SSO)'.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OIS-08.12B",
+ "Description": "The cloud service provider determines if relevant external parties shall receive information, specific to their purposes, about the risk treatment plan and to what extent this should happen.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-08 Application of the Risk Management Policy",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies only to risks that reside within the area of responsibility of the cloud service provider. Risks that arise for the cloud service customer when using the cloud service are not covered by this criterion. When outsourcing activities for the provision of cloud services to subservice organisations, the responsibility for these risks remains with the cloud service provider. Requirements for measures to manage these risks can be found in the criteria area 'Control and Monitoring of Service Providers and Suppliers (SSO)'.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OIS-08.13B",
+ "Description": "The risk treatment plan is reviewed by the cloud service provider every time the risk assessment is modified and formally accepted by the risk owners.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-08 Application of the Risk Management Policy",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies only to risks that reside within the area of responsibility of the cloud service provider. Risks that arise for the cloud service customer when using the cloud service are not covered by this criterion. When outsourcing activities for the provision of cloud services to subservice organisations, the responsibility for these risks remains with the cloud service provider. Requirements for measures to manage these risks can be found in the criteria area 'Control and Monitoring of Service Providers and Suppliers (SSO)'.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OIS-08.14B",
+ "Description": "If the cloud service provider shares risks with the cloud service customers, the shared risks are associated with complementary customer controls and described in the user documentation.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-08 Application of the Risk Management Policy",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies only to risks that reside within the area of responsibility of the cloud service provider. Risks that arise for the cloud service customer when using the cloud service are not covered by this criterion. When outsourcing activities for the provision of cloud services to subservice organisations, the responsibility for these risks remains with the cloud service provider. Requirements for measures to manage these risks can be found in the criteria area 'Control and Monitoring of Service Providers and Suppliers (SSO)'.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OIS-08.01AC",
+ "Description": "The cloud service provider integrates information security risks into a documented Enterprise Risk Management (ERM) programme which addresses the following aspects: - Integration of information security risks at the enterprise level to promote information security risk-awareness across the entire organisation;- Leadership awareness and support for identification, analysis and treatment of information security risks to foster continuous improvement;- Consideration of the cloud service provider's strategic objectives when managing risks to align risk treatment with the organisation's goals; and- Review of information security risks at least on an annual basis.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-08 Application of the Risk Management Policy",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OIS-09.01B",
+ "Description": "Information security is considered in project management. The cloud service provider performs a risk assessment according to OIS-07 and, if necessary, proceeds with risk treatment to assess and treat the risks on all projects that may affect the provision of the cloud service, regardless of the nature of the project.",
+ "Attributes": [
+ {
+ "Section": "Organisation of Information Security (OIS)",
+ "SubSection": "OIS-09 Information Security in Project Management",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "codebuild_project_logging_enabled",
+ "codebuild_project_no_secrets_in_variables",
+ "codebuild_project_not_publicly_accessible",
+ "codebuild_project_older_90_days",
+ "codebuild_project_s3_logs_encrypted",
+ "codebuild_project_source_repo_url_no_sensitive_credentials",
+ "codebuild_project_user_controlled_buildspec"
+ ]
+ },
+ {
+ "Id": "SP-01.01B",
+ "Description": "Policies and instructions (incl. concepts and guidelines) are derived from the information security policy and are documented according to a uniform structure. The policies and instructions describe at least the following aspects: - Objectives;- Scope;- Roles and responsibilities, including staff qualification requirements and the establishment of substitution rules;- Roles and dependencies on other organisations (especially cloud service customers and subservice organisations);- Steps for the execution of the security strategy; and- Applicable legal and regulatory requirements.",
+ "Attributes": [
+ {
+ "Section": "Security Policies and Instructions (SP)",
+ "SubSection": "SP-01 Documentation, Communication and Provision of Policies and Instructions",
+ "Type": "Basic",
+ "AboutCriteria": "Policies and instructions are required for the following basic criteria in which the content is specified in more detail: - Risk Management Policy (OIS-07);- Policy for Remote Working (HR-07);- Asset Management Concept (AM-01);- Acceptable Use and Safe Handling of Assets Policy (AM-05);- Policy for Removable Media and Endpoint Devices (AM-12);- Physical Security and Environmental Control Requirements (PS-01);- Physical Site Access Control (PS-04);- Workplace Security Requirements (PS-08);- Protection Against Malware - Concept (OPS-04);- Data Backup and Recovery - Concept (OPS-06);- Logging and Monitoring - Concept (OPS-10);- Logging and Monitoring - Metadata Management Concept (OPS-11);- Managing Vulnerabilities - Concept (OPS-18);- Managing Incidents and Crashes - Concept (OPS-19);- Separation of Datasets - Guideline (OPS-28);- Confidential Computing - Policies and Instructions (OPS-30);- Guideline for Container Management (OPS-32);- Managing Vulnerabilities - Patch Management (OPS-33);- Policy for User Accounts and Access Rights (IAM-01);- Authentication Mechanisms (authentication policy) (IAM-09);- Policy for the Use of Cryptographic Mechanisms (CRY-01);- Technical Safeguards (COS-01);- Policies for Data Transmission (COS-08);- Policies for Changes to System Components (DEV-03);- Development Service Organisations Security (policies and instructions for the use of third party and open source software) (DEV-14);- Policies and Instructions for Controlling and Monitoring Service Organisations (SSO-01);- Controlling Exchanges with Suppliers of Functional Components (SSO-08);- Policy for Security Incident Management (SIM-01);- Business Continuity and Emergency Management System (BCM-01);- Policy for Business Continuity Management (BCM-05);- Policy for Planning and Conducting Audits (COM-02); and- Communication of Technical Procedures for Data Disclosure in Investigation Requests (INQ-05).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SP-01.02B",
+ "Description": "The policies and instructions are communicated and made available to all internal and external employees of the cloud service provider in an appropriate manner.",
+ "Attributes": [
+ {
+ "Section": "Security Policies and Instructions (SP)",
+ "SubSection": "SP-01 Documentation, Communication and Provision of Policies and Instructions",
+ "Type": "Basic",
+ "AboutCriteria": "The appropriateness of the demand-oriented communication and provision should be assessed against the size and complexity of the cloud service provider's organisation and the type of cloud service offered. Possible criteria are: - Integration of guidelines and instructions in the onboarding of new employees;- Training and information campaigns when adopting new or revising existing policies and instructions; and- Form of provision.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SP-01.03B",
+ "Description": "The policies and instructions are subject to version control.",
+ "Attributes": [
+ {
+ "Section": "Security Policies and Instructions (SP)",
+ "SubSection": "SP-01 Documentation, Communication and Provision of Policies and Instructions",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SP-01.04B",
+ "Description": "The policies and instructions are approved by the top management of the cloud service provider or an authorised body.",
+ "Attributes": [
+ {
+ "Section": "Security Policies and Instructions (SP)",
+ "SubSection": "SP-01 Documentation, Communication and Provision of Policies and Instructions",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_inline_policy_allows_privilege_escalation",
+ "bedrock_api_key_no_administrative_privileges",
+ "fms_policy_compliant",
+ "iam_administrator_access_with_mfa",
+ "iam_aws_attached_policy_no_administrative_privileges",
+ "iam_customer_attached_policy_no_administrative_privileges",
+ "iam_customer_unattached_policy_no_administrative_privileges",
+ "iam_group_administrator_access_policy",
+ "iam_inline_policy_no_administrative_privileges",
+ "iam_policy_cloudshell_admin_not_attached",
+ "iam_role_administratoraccess_policy",
+ "iam_user_administrator_access_policy",
+ "organizations_delegated_administrators",
+ "rds_cluster_default_admin",
+ "rds_instance_default_admin"
+ ]
+ },
+ {
+ "Id": "SP-01.05B",
+ "Description": "The responsible business units of the cloud service provider shall report at least annually to the top management on the policies and instructions and their implementation. This reporting includes at least: - Implemented changes to address cybersecurity risks for the topic addressed in the policy or instruction;- Information security incidents for the topic addressed in the policy or instruction and the follow-up;- Performance of the internal controls regarding information security for the topic addressed in the policy or instruction (cf. COM-04); and- Planned changes for the topic addressed in the policy or instruction to address cybersecurity risks and information security and cybersecurity.",
+ "Attributes": [
+ {
+ "Section": "Security Policies and Instructions (SP)",
+ "SubSection": "SP-01 Documentation, Communication and Provision of Policies and Instructions",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SP-02.01B",
+ "Description": "Information security policies and instructions are reviewed for adequacy by the cloud service provider's subject matter experts at least annually, and when significant changes may affect the security of the cloud service. The review shall consider at least the following aspects: - Organisational and technical changes in the procedures for providing the cloud service; and- Legal and regulatory changes in the cloud service provider's environment.",
+ "Attributes": [
+ {
+ "Section": "Security Policies and Instructions (SP)",
+ "SubSection": "SP-02 Review and Approval of Policies and Instructions",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SP-02.02B",
+ "Description": "Revised policies and instructions are approved by the appropriate level of management before they become effective and are communicated and made available to internal and external employees.",
+ "Attributes": [
+ {
+ "Section": "Security Policies and Instructions (SP)",
+ "SubSection": "SP-02 Review and Approval of Policies and Instructions",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SP-03.01B",
+ "Description": "The cloud service provider maintains a list of exceptions to the policies and instructions for information security, including associated controls.",
+ "Attributes": [
+ {
+ "Section": "Security Policies and Instructions (SP)",
+ "SubSection": "SP-03 Exceptions from Existing Policies and Instructions",
+ "Type": "Basic",
+ "AboutCriteria": "Exceptions in the sense of the criterion can have organisational or technical causes, such as: - An organisational unit should deviate from the intended processes and procedures in order to meet the requirements of a cloud service customer; and- A system component lacks technical properties to configure it according to the applicable requirements.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that they obtain information from the cloud service provider about deviations from information security policies and instructions in order to assess and appropriately manage the associated risks to their own information security."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SP-03.02B",
+ "Description": "Exceptions to the policies and instructions for information security as well as respective controls go through risk management procedures in accordance with OIS-07, including approval of these exceptions and acceptance of the associated risks by the risk owners.",
+ "Attributes": [
+ {
+ "Section": "Security Policies and Instructions (SP)",
+ "SubSection": "SP-03 Exceptions from Existing Policies and Instructions",
+ "Type": "Basic",
+ "AboutCriteria": "Exceptions in the sense of the criterion can have organisational or technical causes, such as: - An organisational unit should deviate from the intended processes and procedures in order to meet the requirements of a cloud service customer; and- A system component lacks technical properties to configure it according to the applicable requirements.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SP-03.03B",
+ "Description": "The approvals of exceptions are documented.",
+ "Attributes": [
+ {
+ "Section": "Security Policies and Instructions (SP)",
+ "SubSection": "SP-03 Exceptions from Existing Policies and Instructions",
+ "Type": "Basic",
+ "AboutCriteria": "Exceptions in the sense of the criterion can have organisational or technical causes, such as: - An organisational unit should deviate from the intended processes and procedures in order to meet the requirements of a cloud service customer; and- A system component lacks technical properties to configure it according to the applicable requirements.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SP-03.04B",
+ "Description": "The approvals of exceptions are limited in time.",
+ "Attributes": [
+ {
+ "Section": "Security Policies and Instructions (SP)",
+ "SubSection": "SP-03 Exceptions from Existing Policies and Instructions",
+ "Type": "Basic",
+ "AboutCriteria": "Exceptions in the sense of the criterion can have organisational or technical causes, such as: - An organisational unit should deviate from the intended processes and procedures in order to meet the requirements of a cloud service customer; and- A system component lacks technical properties to configure it according to the applicable requirements.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SP-03.05B",
+ "Description": "The approvals of exceptions are reviewed for appropriateness at least annually by the risk owners.",
+ "Attributes": [
+ {
+ "Section": "Security Policies and Instructions (SP)",
+ "SubSection": "SP-03 Exceptions from Existing Policies and Instructions",
+ "Type": "Basic",
+ "AboutCriteria": "Exceptions in the sense of the criterion can have organisational or technical causes, such as: - An organisational unit should deviate from the intended processes and procedures in order to meet the requirements of a cloud service customer; and- A system component lacks technical properties to configure it according to the applicable requirements.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SP-03.06B",
+ "Description": "Exceptions leading to a nonconformity to any of the certification requirements of a certified cloud service are not allowed.",
+ "Attributes": [
+ {
+ "Section": "Security Policies and Instructions (SP)",
+ "SubSection": "SP-03 Exceptions from Existing Policies and Instructions",
+ "Type": "Basic",
+ "AboutCriteria": "Exceptions in the sense of the criterion can have organisational or technical causes, such as: - An organisational unit should deviate from the intended processes and procedures in order to meet the requirements of a cloud service customer; and- A system component lacks technical properties to configure it according to the applicable requirements.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SP-03.01AC",
+ "Description": "The exceptions to policies or instructions are approved by the appropriate level of management who approved the policies or instructions.",
+ "Attributes": [
+ {
+ "Section": "Security Policies and Instructions (SP)",
+ "SubSection": "SP-03 Exceptions from Existing Policies and Instructions",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Exceptions in the sense of the criterion can have organisational or technical causes, such as: - An organisational unit should deviate from the intended processes and procedures in order to meet the requirements of a cloud service customer; and- A system component lacks technical properties to configure it according to the applicable requirements.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SP-03.02AC",
+ "Description": "The list of exceptions is monitored to ensure that the approved exceptions have not expired and that all reviews and approvals are up-to-date.",
+ "Attributes": [
+ {
+ "Section": "Security Policies and Instructions (SP)",
+ "SubSection": "SP-03 Exceptions from Existing Policies and Instructions",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Exceptions in the sense of the criterion can have organisational or technical causes, such as: - An organisational unit should deviate from the intended processes and procedures in order to meet the requirements of a cloud service customer; and- A system component lacks technical properties to configure it according to the applicable requirements.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SP-03.03AC",
+ "Description": "Any exceptions for which deviations were identified during monitoring are addressed through timely and appropriate remediation measures.",
+ "Attributes": [
+ {
+ "Section": "Security Policies and Instructions (SP)",
+ "SubSection": "SP-03 Exceptions from Existing Policies and Instructions",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Exceptions in the sense of the criterion can have organisational or technical causes, such as: - An organisational unit should deviate from the intended processes and procedures in order to meet the requirements of a cloud service customer; and- A system component lacks technical properties to configure it according to the applicable requirements.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-01.01B",
+ "Description": "The cloud service provider identifies which roles within the organisation can access cloud service customer data, cloud service derived data, cloud service provider data, account data or system components under the cloud service provider's responsibility that provide the cloud service in the production environment.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-01 Verification of Qualification and Trustworthiness",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "ec2_instance_profile_attached",
+ "bedrock_api_key_no_administrative_privileges",
+ "fms_policy_compliant",
+ "iam_administrator_access_with_mfa",
+ "iam_aws_attached_policy_no_administrative_privileges",
+ "iam_customer_attached_policy_no_administrative_privileges",
+ "iam_customer_unattached_policy_no_administrative_privileges",
+ "iam_group_administrator_access_policy",
+ "iam_inline_policy_no_administrative_privileges",
+ "iam_policy_cloudshell_admin_not_attached",
+ "iam_role_administratoraccess_policy",
+ "iam_user_administrator_access_policy",
+ "organizations_delegated_administrators",
+ "rds_cluster_default_admin",
+ "rds_instance_default_admin"
+ ]
+ },
+ {
+ "Id": "HR-01.02B",
+ "Description": "The competency and integrity of all internal and external employees to which these roles are assigned is verified prior to employment. The verification considers the following measures, to the extent permitted by local legislation and regulation and as considered appropriate by the cloud service provider to mitigate risks related to inappropriate access to the respective data type: - Verification of the person's identity via identity card or passport;- Verification of professional experience through the CV;- Verification of academic titles and degrees;- Request for a certificate of good conduct, police clearance or other national equivalents; and- Evaluation of susceptibility to blackmail.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-01 Verification of Qualification and Trustworthiness",
+ "Type": "Basic",
+ "AboutCriteria": "External employees in the sense of the criteria are those who perform activities in accordance with the processes and procedures of the cloud service provider. Employees of service organisations who perform activities according to the service organisation's own processes and procedures are not covered by this criterion. Permissible verifications of competency and integrity may vary based on local law as well as the role of the employee. Depending on these factors and the nature of the checks conducted, explicit consent by the employee may be necessary. The verification of qualification and trustworthiness can be supported by specialised service providers or be based on voluntary self-disclosure of the employee. Depending on national legislation, national equivalents of the German certificate of good conduct ('Führungszeugnis') may also be permitted. Assessing the vulnerability of a potential employee to blackmail can involve evaluating their creditworthiness. However, this assessment may only be legally permissible for positions with significant financial responsibility, depending on local regulations. Risks related to inappropriate access to cloud service customer data may be mitigated by the use of encryption or monitoring system access for suspicious events. Although such measures are not supposed to completely substitute the above-mentioned verification measures, the extent of such measures may be reduced.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-01.03B",
+ "Description": "The cloud service provider follows-up changes in work-related personal situations and identifies and mitigates related risks.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-01 Verification of Qualification and Trustworthiness",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-01.04B",
+ "Description": "The cloud service provider assesses the competence and integrity of its personnel before commencement of employment in a position with a higher risk classification than their current position within the company.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-01 Verification of Qualification and Trustworthiness",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-01.05B",
+ "Description": "The extent of the assessment defined in this requirement is proportional to the business context, the sensitivity of the information that will be accessed by the personnel, and the associated risks.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-01 Verification of Qualification and Trustworthiness",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-01.01AC",
+ "Description": "The cloud service provider reviews annually their assessment of the competence and integrity of its personnel for the individuals in positions with the highest levels of risk classification, starting at a level to be defined in the human resource policy.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-01 Verification of Qualification and Trustworthiness",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-02.01B",
+ "Description": "The cloud service provider's internal and external employees are required by employment terms and conditions to comply with the information security policy, the policies, procedures and instructions based on it, and the code of ethics.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-02 Employment Terms and Conditions",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-02.02B",
+ "Description": "The cloud service provider ensures that the terms for all internal and external employees include a non-disclosure provision. The non-disclosure provision covers any information that has been obtained or generated as part of the cloud service, even if anonymised and decontextualised.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-02 Employment Terms and Conditions",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-02.03B",
+ "Description": "The cloud service provider gives a presentation of the information security policy, the policies, procedures and instructions based on it and the code of ethics.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-02 Employment Terms and Conditions",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-02.04B",
+ "Description": "The cloud service provider requires the information security policy, the policies, procedures and instructions based on it and the code of ethics to be acknowledged by the internal and external personnel in a documented form before access is granted to any cloud service customer data, cloud service derived data, cloud service provider data and account data or system components under the responsibility of the cloud service provider used to provide the cloud service in the production environment.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-02 Employment Terms and Conditions",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-03.01B",
+ "Description": "The cloud service provider operates a target group-oriented security awareness and training programme.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-03 Security Training and Awareness Programme",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-03.02B",
+ "Description": "All internal and external employees of the cloud service provider undergo a role-based programme at least annually, and when changing target group, taking into consideration at least their position's risk classification and technical duties.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-03 Security Training and Awareness Programme",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-03.03B",
+ "Description": "The programme is regularly updated based on changes to policies and instructions and the current threat situation and includes the following aspects insofar as they are applicable to each employee's role: - Handling system components used to provide the cloud service in the production environment in accordance with applicable policies and procedures;- Handling cloud service customer data, cloud service derived data, cloud service provider data and account data in accordance with applicable policies and instructions and applicable legal and regulatory requirements;- Information about the current threat situation;- Correct behaviour in the event of security incidents;- Security best practices; and- Secure development.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-03 Security Training and Awareness Programme",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-03.01AC",
+ "Description": "The cloud service provider monitors the completion of the security awareness and training programme.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-03 Security Training and Awareness Programme",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-03.02AC",
+ "Description": "Any deviations identified during monitoring are addressed through timely and appropriate remediation measures.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-03 Security Training and Awareness Programme",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudwatch_alarm_actions_alarm_state_configured",
+ "cloudwatch_alarm_actions_enabled",
+ "cloudwatch_changes_to_network_acls_alarm_configured",
+ "cloudwatch_changes_to_network_gateways_alarm_configured",
+ "cloudwatch_changes_to_network_route_tables_alarm_configured",
+ "cloudwatch_changes_to_vpcs_alarm_configured",
+ "cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_authentication_failures",
+ "cloudwatch_log_metric_filter_aws_organizations_changes",
+ "cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk",
+ "cloudwatch_log_metric_filter_for_s3_bucket_policy_changes",
+ "cloudwatch_log_metric_filter_policy_changes",
+ "cloudwatch_log_metric_filter_root_usage",
+ "cloudwatch_log_metric_filter_security_group_changes",
+ "cloudwatch_log_metric_filter_sign_in_without_mfa",
+ "cloudwatch_log_metric_filter_unauthorized_api_calls"
+ ]
+ },
+ {
+ "Id": "HR-03.03AC",
+ "Description": "The learning outcomes achieved through the awareness and training programme are measured and evaluated in a target group-oriented manner.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-03 Security Training and Awareness Programme",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "The measurement and evaluation of learning outcomes in a target group-oriented manner, as specified by the additional criterion, do not require assessing each employee individually. Instead, evaluations can be performed at an aggregated level, focusing on the overall effectiveness of the training program for specific target groups. This approach allows for the identification of trends and areas for improvement within the program while respecting employees' privacy requirements.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-03.04AC",
+ "Description": "The measurements cover quantitative and qualitative aspects.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-03 Security Training and Awareness Programme",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-03.05AC",
+ "Description": "The results are used to improve the awareness and training programme.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-03 Security Training and Awareness Programme",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-04.01B",
+ "Description": "The cloud service provider classifies information of security-sensitive positions according to their level of risk, including positions related to IT administration and all positions with access to cloud service customer data or system components for the provisioning of the cloud service in the production environment.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-04 Disciplinary Measures",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_role_administratoraccess_policy",
+ "iam_securityaudit_role_created",
+ "iam_support_role_created"
+ ]
+ },
+ {
+ "Id": "HR-04.02B",
+ "Description": "In the event of violations of policies and instructions or applicable legal and regulatory requirements, actions are taken in accordance with a defined policy that includes the following aspects: - Verifying whether a violation has occurred; and- Consideration of the nature and severity of the violation and its impact.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-04 Disciplinary Measures",
+ "Type": "Basic",
+ "AboutCriteria": "The cloud service provider ensures that the policies and instructions reflect applicable legal and regulatory requirements in accordance with SP-01.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-04.03B",
+ "Description": "The internal and external employees of the cloud service provider are informed about possible disciplinary measures.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-04 Disciplinary Measures",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-04.04B",
+ "Description": "The use of disciplinary measures is appropriately documented.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-04 Disciplinary Measures",
+ "Type": "Basic",
+ "AboutCriteria": "With regards to the use of disciplinary measures, the submission of anonymised evidence is acceptable and does not imply that the basic criterion is not fully fulfilled.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-04.01AC",
+ "Description": "In case of a security breach, the cloud service provider is prepared to inform affected cloud service customers about the disciplinary actions taken against involved personnel, if requested by the customers.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-04 Disciplinary Measures",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-05.01B",
+ "Description": "Internal and external employees have been informed about which responsibilities, arising from employment terms and conditions relating to information security, will remain in place when their employment is terminated or changed and for how long.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-05 Responsibilities in the Event of Termination or Change of Employment",
+ "Type": "Basic",
+ "AboutCriteria": "The cloud service provider ensures that the employment terms and conditions reflect applicable legal and regulatory requirements in accordance with SP-01.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-05.02B",
+ "Description": "The cloud service provider applies a specific procedure to revoke the access rights and to process the identities and assets of internal and external employees appropriately when their engagement is terminated or changed. This procedure includes defining specific roles and responsibilities as well as a documented checklist of all required steps.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-05 Responsibilities in the Event of Termination or Change of Employment",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-06.01B",
+ "Description": "The non-disclosure or confidentiality agreements to be agreed with internal employees, external service providers and suppliers of the cloud service provider are based on the requirements identified by the cloud service provider for the protection of confidential information and operational details.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-06 Non-disclosure Agreements",
+ "Type": "Basic",
+ "AboutCriteria": "A non-disclosure agreement should cover: - Which information or data types must be kept confidential;- The period for which this confidentiality agreement applies;- What actions must be taken upon termination of this agreement, e.g. destruction or return of data medium;- How the ownership of information is regulated;- What rules apply to the use and disclosure of confidential information to other partners, if necessary; and- The consequences of a breach of the agreement.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-06.02B",
+ "Description": "The agreements are to be accepted by external service providers and suppliers when the contract is agreed.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-06 Non-disclosure Agreements",
+ "Type": "Basic",
+ "AboutCriteria": "Confidentiality or non-disclosure agreements should be signed by means of an electronic signature, insofar as this is legally binding.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-06.03B",
+ "Description": "The agreements are to be accepted by internal employees of the cloud service provider before authorisation to access cloud service customer data, cloud service derived data, cloud service provider data and account data is granted.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-06 Non-disclosure Agreements",
+ "Type": "Basic",
+ "AboutCriteria": "Confidentiality or non-disclosure agreements should be signed by means of an electronic signature, insofar as this is legally binding.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-06.04B",
+ "Description": "The requirements are documented and reviewed at regular intervals (at least annually). If the review shows that the requirements need to be adapted, the non-disclosure or confidentiality agreements are updated.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-06 Non-disclosure Agreements",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-06.05B",
+ "Description": "The cloud service provider informs the internal employees, external service providers and suppliers and obtains confirmation of the updated confidentiality or non-disclosure agreement.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-06 Non-disclosure Agreements",
+ "Type": "Basic",
+ "AboutCriteria": "Confidentiality or non-disclosure agreements should be signed by means of an electronic signature, insofar as this is legally binding.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-06.06B",
+ "Description": "In instances where agreement on the updates cannot be reached, the cloud service provider shall assess the resulting risks to information security according to OIS-07.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-06 Non-disclosure Agreements",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "HR-07.01B",
+ "Description": "Policies and instructions for the protection of information when employees work remotely are documented, communicated and provided in accordance with SP-01 and address the following aspects: - Assessment of the security of remote working locations;- Establishing guidelines for the safe handling and storage of sensitive information and data types;- Definition of remote access security requirements;- Utilisation of secure communication methods and enforcement of secure network use; and- Provision of organisation-approved equipment and prohibition of unregulated personal devices.",
+ "Attributes": [
+ {
+ "Section": "Personnel (HR)",
+ "SubSection": "HR-07 Policy for Remote Working",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-01.01B",
+ "Description": "An asset management concept is documented, communicated and provided according to SP-01, in which the following aspects are described: - Identification of assets which are used to provide the cloud service in the production environment;- Definition of a scheme for identifying protection requirements based on information processed on the asset;- Definition of asset types, considering at a minimum the differentiation of hardware and software objects;- Definition of asset lifecycles based on the asset type; and- Definition of procedures for inventory of hardware and software assets.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-01 Asset Management Concept",
+ "Type": "Basic",
+ "AboutCriteria": "Assets within the meaning of this domain are the objects required for the information security of the cloud service during the creation, processing, storage, transmission, deletion or destruction of information in the cloud service provider's area of responsibility, e.g. firewalls, load balancers, web servers, application servers and database servers. These objects consist of hardware and software objects. Hardware objects are: - Physical and virtual infrastructure resources (e.g. servers, storage systems, network components); and- End user devices if the cloud service provider has determined in a risk assessment that these could endanger the information security of the cloud service in the event of loss or unauthorised access (e.g. mobile devices used as security tokens for authentication). Software objects are e.g. hypervisors, containers, operating systems, databases, microservices and programming interfaces (APIs). The lifecycle of an asset includes, depending on the asset type: - Acquisition;- Commissioning;- Maintenance;- Decommissioning; and- Disposal.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-01.01AC",
+ "Description": "The information collected about assets is considered in logging and monitoring applications to identify the impact on cloud services and functions in case of events that could lead to a breach of protection objectives, and to support information provided to affected cloud service customers in accordance with contractual agreements.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-01 Asset Management Concept",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Assets within the meaning of this domain are the objects required for the information security of the cloud service during the creation, processing, storage, transmission, deletion or destruction of information in the cloud service provider's area of responsibility, e.g. firewalls, load balancers, web servers, application servers and database servers. These objects consist of hardware and software objects. Hardware objects are: - Physical and virtual infrastructure resources (e.g. servers, storage systems, network components); and- End user devices if the cloud service provider has determined in a risk assessment that these could endanger the information security of the cloud service in the event of loss or unauthorised access (e.g. mobile devices used as security tokens for authentication). Software objects are e.g. hypervisors, containers, operating systems, databases, microservices and programming interfaces (APIs). The lifecycle of an asset includes, depending on the asset type: - Acquisition;- Commissioning;- Maintenance;- Decommissioning; and- Disposal.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudtrail_s3_dataevents_read_enabled",
+ "acm_certificates_transparency_logs_enabled",
+ "apigateway_restapi_logging_enabled",
+ "apigatewayv2_api_access_logging_enabled",
+ "appsync_field_level_logging_enabled",
+ "athena_workgroup_logging_enabled",
+ "awslambda_function_invoke_api_operations_cloudtrail_logging_enabled",
+ "bedrock_model_invocation_logging_enabled",
+ "bedrock_model_invocation_logs_encryption_enabled",
+ "cloudfront_distributions_logging_enabled",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_log_file_validation_enabled",
+ "cloudtrail_logs_s3_bucket_access_logging_enabled",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "cloudtrail_multi_region_enabled_logging_management_events",
+ "cloudwatch_log_group_kms_encryption_enabled",
+ "cloudwatch_log_group_no_secrets_in_logs",
+ "cloudwatch_log_group_not_publicly_accessible",
+ "cloudwatch_log_group_retention_policy_specific_days_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_authentication_failures",
+ "cloudwatch_log_metric_filter_aws_organizations_changes",
+ "cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk",
+ "cloudwatch_log_metric_filter_for_s3_bucket_policy_changes",
+ "cloudwatch_log_metric_filter_policy_changes",
+ "cloudwatch_log_metric_filter_root_usage",
+ "cloudwatch_log_metric_filter_security_group_changes",
+ "cloudwatch_log_metric_filter_sign_in_without_mfa",
+ "cloudwatch_log_metric_filter_unauthorized_api_calls",
+ "codebuild_project_logging_enabled",
+ "codebuild_project_s3_logs_encrypted",
+ "datasync_task_logging_enabled",
+ "directoryservice_directory_log_forwarding_enabled",
+ "dms_replication_task_source_logging_enabled",
+ "dms_replication_task_target_logging_enabled",
+ "documentdb_cluster_cloudwatch_log_export",
+ "ec2_client_vpn_endpoint_connection_logging_enabled",
+ "ecs_task_definitions_logging_block_mode",
+ "ecs_task_definitions_logging_enabled",
+ "eks_control_plane_logging_all_types_enabled",
+ "elasticbeanstalk_environment_cloudwatch_logging_enabled",
+ "elb_logging_enabled",
+ "elbv2_logging_enabled",
+ "glue_development_endpoints_cloudwatch_logs_encryption_enabled",
+ "glue_etl_jobs_cloudwatch_logs_encryption_enabled",
+ "glue_etl_jobs_logging_enabled",
+ "guardduty_eks_audit_log_enabled",
+ "mq_broker_logging_enabled",
+ "neptune_cluster_integration_cloudwatch_logs",
+ "networkfirewall_logging_enabled",
+ "opensearch_service_domains_audit_logging_enabled",
+ "opensearch_service_domains_cloudwatch_logging_enabled",
+ "rds_cluster_integration_cloudwatch_logs",
+ "rds_instance_integration_cloudwatch_logs",
+ "redshift_cluster_audit_logging",
+ "route53_public_hosted_zones_cloudwatch_logging_enabled",
+ "s3_bucket_server_access_logging_enabled",
+ "stepfunctions_statemachine_logging_enabled",
+ "vpc_flow_logs_enabled",
+ "waf_global_webacl_logging_enabled",
+ "wafv2_webacl_logging_enabled",
+ "wafv2_webacl_rule_logging_enabled"
+ ]
+ },
+ {
+ "Id": "AM-01.02AC",
+ "Description": "The cloud service provider monitors the process that is maintaining the inventory of assets to assure this inventory is up-to-date.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-01 Asset Management Concept",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Assets within the meaning of this domain are the objects required for the information security of the cloud service during the creation, processing, storage, transmission, deletion or destruction of information in the cloud service provider's area of responsibility, e.g. firewalls, load balancers, web servers, application servers and database servers. These objects consist of hardware and software objects. Hardware objects are: - Physical and virtual infrastructure resources (e.g. servers, storage systems, network components); and- End user devices if the cloud service provider has determined in a risk assessment that these could endanger the information security of the cloud service in the event of loss or unauthorised access (e.g. mobile devices used as security tokens for authentication). Software objects are e.g. hypervisors, containers, operating systems, databases, microservices and programming interfaces (APIs). The lifecycle of an asset includes, depending on the asset type: - Acquisition;- Commissioning;- Maintenance;- Decommissioning; and- Disposal.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-02.01B",
+ "Description": "The cloud service provider maintains an asset inventory of hardware and software assets in accordance with the asset management concept.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-02 Asset Inventory",
+ "Type": "Basic",
+ "AboutCriteria": "Cloud service providers who procure their cloud infrastructure as virtual infrastructure from subservice providers (e.g. virtual machines or containers) may use tools provided by the subservice provider to inventory those assets, insofar as the cloud service provider deems these suitable based on their asset management concept.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-02.02B",
+ "Description": "The inventory is performed automatically and/or by the people or teams responsible for the assets to ensure complete, accurate, valid and consistent inventory throughout the asset lifecycle.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-02 Asset Inventory",
+ "Type": "Basic",
+ "AboutCriteria": "Cloud service providers who procure their cloud infrastructure as virtual infrastructure from subservice providers (e.g. virtual machines or containers) may use tools provided by the subservice provider to inventory those assets, insofar as the cloud service provider deems these suitable based on their asset management concept.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-02.03B",
+ "Description": "Assets are recorded with the information needed to apply the risk management procedure (cf. OIS-07), including the measures taken to manage these risks throughout the asset lifecycle.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-02 Asset Inventory",
+ "Type": "Basic",
+ "AboutCriteria": "Cloud service providers who procure their cloud infrastructure as virtual infrastructure from subservice providers (e.g. virtual machines or containers) may use tools provided by the subservice provider to inventory those assets, insofar as the cloud service provider deems these suitable based on their asset management concept.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-02.04B",
+ "Description": "Changes to the recorded information are logged.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-02 Asset Inventory",
+ "Type": "Basic",
+ "AboutCriteria": "Cloud service providers who procure their cloud infrastructure as virtual infrastructure from subservice providers (e.g. virtual machines or containers) may use tools provided by the subservice provider to inventory those assets, insofar as the cloud service provider deems these suitable based on their asset management concept.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-02.05B",
+ "Description": "The inventory system maintained by the cloud service provider can provide a detailed list of all users who have access to a specific resource, along with their respective access rights.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-02 Asset Inventory",
+ "Type": "Basic",
+ "AboutCriteria": "Cloud service providers who procure their cloud infrastructure as virtual infrastructure from subservice providers (e.g. virtual machines or containers) may use tools provided by the subservice provider to inventory those assets, insofar as the cloud service provider deems these suitable based on their asset management concept.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-03.01B",
+ "Description": "The hardware asset inventory maintained by the cloud service provider includes the following details for each entry: - Identification details (such as name, IP address, MAC address, etc.);- The function of the asset;- The model of the asset;- The location of the asset;- The owner of the asset; and- Information security requirements for the asset.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-03 Hardware Asset Inventory",
+ "Type": "Basic",
+ "AboutCriteria": "An 'Asset Owner' is an individual or role assigned with the responsibility and accountability for managing and protecting an organisation's asset and does not imply legal ownership of the assets. If cloud service customers operate virtual machines or containers with the cloud service, the cloud service provider should inventory the containers and document their life cycle (cf. OPS-32)",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "ec2_instance_profile_attached"
+ ]
+ },
+ {
+ "Id": "AM-04.01B",
+ "Description": "The cloud service provider maintains a comprehensive inventory of all software assets, including used software. This inventory includes the following details for each software asset: - Identification details (such as name, IP address, MAC address, etc.);- The version of the software; and- The devices on which the software is installed.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-04 Software Asset Inventory",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-05.01B",
+ "Description": "Policies and instructions for the proper and secure use of assets are documented, communicated and provided in accordance with SP-01 and address the following aspects of the asset lifecycle as applicable to the asset: - Approval procedures for acquisition, commissioning, maintenance, decommissioning, and disposal by authorised personnel or system components;- Inventory;- Classification and labelling based on the need for protection of the cloud service customer data, cloud service derived data, cloud service provider data and account data as well as measures for the level of protection identified;- Secure configuration of mechanisms for error handling, logging, encryption, authentication and authorisation;- Requirements for versions of software and images as well as application of patches;- Handling of software for which support and security patches are not available anymore;- Restriction of software installations or use of services;- Protection against malware;- Remote deactivation, deletion or blocking;- Physical delivery and transport;- Dealing with incidents and vulnerabilities;- Complete and irrevocable deletion of the data upon decommissioning; and- Secure handling and usage of removable media, e.g. by specifying which devices are permitted to interact with removable media and what data can be stored on them or by banning the reuse of removable media.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-05 Policy for the proper and secure use of assets",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-05.02B",
+ "Description": "The applicability of these aspects is defined based on the cloud service provider's asset management concept (cf. AM-01).",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-05 Policy for the proper and secure use of assets",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-06.01B",
+ "Description": "The cloud service provider has implemented an approval process for commissioning hardware used to provide the cloud service in the production environment. This process involves identifying, analysing, and mitigating any risks (cf. OIS-07) associated with the commissioning.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-06 Commissioning of Hardware",
+ "Type": "Basic",
+ "AboutCriteria": "The criterion applies only to physical hardware objects, such as servers, storage systems, and network components. Virtual hardware and software objects are considered in the criteria areas (OPS) and (DEV). The approval process typically considers both the basic approval to use the hardware and the final approval of the configured assets.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-06.02B",
+ "Description": "Approval is granted after verification of the secure configuration of the mechanisms for error handling, logging, encryption, authentication and authorisation according to the intended use and based on the applicable policies.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-06 Commissioning of Hardware",
+ "Type": "Basic",
+ "AboutCriteria": "The criterion applies only to physical hardware objects, such as servers, storage systems, and network components. Virtual hardware and software objects are considered in the criteria areas (OPS) and (DEV). The approval process typically considers both the basic approval to use the hardware and the final approval of the configured assets.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-07.01B",
+ "Description": "The cloud service provider defines, documents and implements a procedure for the decommissioning of hardware used to operate system components supporting the cloud service production environment under the responsibility of the cloud service provider. As part of this procedure, approval by authorised personnel of the cloud service provider based on the applicable policies is required.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-07 Decommissioning of Hardware",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-07.02B",
+ "Description": "The decommissioning includes the complete and permanent deletion of all cloud service customer data, cloud service derived data, cloud service provider data and account data or proper destruction of the media. However, account data is only to be deleted if the data is located in the production environment for the operation of system components.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-07 Decommissioning of Hardware",
+ "Type": "Basic",
+ "AboutCriteria": "The deletion of data or physical destruction of data mediums can take place, for example, according to DIN 66399 or BSI IT-Grundschutz module CON.6.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "kinesis_stream_data_retention_period",
+ "cloudtrail_bucket_requires_mfa_delete",
+ "cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk",
+ "cognito_user_pool_deletion_protection_enabled",
+ "documentdb_cluster_deletion_protection",
+ "dynamodb_table_deletion_protection_enabled",
+ "eks_cluster_deletion_protection_enabled",
+ "elbv2_deletion_protection",
+ "kms_cmk_not_deleted_unintentionally",
+ "neptune_cluster_deletion_protection",
+ "networkfirewall_deletion_protection",
+ "rds_cluster_deletion_protection",
+ "rds_instance_deletion_protection",
+ "s3_bucket_no_mfa_delete"
+ ]
+ },
+ {
+ "Id": "AM-07.01AC",
+ "Description": "The cloud service provider requires approval for the disposal of any hardware used outside the organisation's premises.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-07 Decommissioning of Hardware",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-07.02AC",
+ "Description": "Additionally, the destruction of data on such hardware is carried out in a manner that ensures that data recovery is impossible.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-07 Decommissioning of Hardware",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "The deletion of data or physical destruction of data mediums can take place, for example, according to DIN 66399 or BSI IT-Grundschutz module CON.6.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-08.01B",
+ "Description": "The cloud service provider determines in a risk assessment (cf. OIS-07) if loss of or unauthorised access to assets could compromise the information security of the cloud service. If so, the cloud service provider's internal and external employees are provably committed to the policies and instructions for proper use and safe and secure handling of assets before they can be used.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-08 Commitment to Proper Use, Safe and Secure Handling and Return of Assets",
+ "Type": "Basic",
+ "AboutCriteria": "The criterion essentially concerns mobile devices (e.g. notebooks, tablets, smartphones, etc.), especially if confidential information is stored on them that can be used, in the event of unauthorised access, to obtain privileged access to the cloud service (e.g. if these are used as security tokens for authentication).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-08.02B",
+ "Description": "Any assets handed over are provably returned upon termination of employment.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-08 Commitment to Proper Use, Safe and Secure Handling and Return of Assets",
+ "Type": "Basic",
+ "AboutCriteria": "The criterion essentially concerns mobile devices (e.g. notebooks, tablets, smartphones, etc.), especially if confidential information is stored on them that can be used, in the event of unauthorised access, to obtain privileged access to the cloud service (e.g. if these are used as security tokens for authentication).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-09.01B",
+ "Description": "Assets are classified and, if possible, labelled. Classification and labelling of an asset reflect the protection needs of the category of cloud service customer data, cloud service derived data, cloud service provider data and account data it processes, stores, or transmits.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-09 Asset Classification and Labelling",
+ "Type": "Basic",
+ "AboutCriteria": "If the cloud service provider does not categorize the assets specifically, then all assets may be treated as requiring the highest level of protection needs.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that the need for protection of the information that can be processed or stored with the cloud service is adequately determined. Cloud service customers ensure through suitable controls that the information processed or stored with the cloud service is protected against tampering, copying, modifying, redirecting or deleting in accordance with its protection needs."
+ }
+ ],
+ "Checks": [
+ "ecr_repositories_tag_immutability",
+ "fsx_file_system_copy_tags_to_backups_enabled",
+ "fsx_file_system_copy_tags_to_volumes_enabled",
+ "neptune_cluster_copy_tags_to_snapshots",
+ "organizations_tags_policies_enabled_and_attached",
+ "rds_cluster_copy_tags_to_snapshots",
+ "rds_instance_copy_tags_to_snapshots"
+ ]
+ },
+ {
+ "Id": "AM-09.02B",
+ "Description": "Classification levels are reviewed at least annually and updated, where appropriate.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-09 Asset Classification and Labelling",
+ "Type": "Basic",
+ "AboutCriteria": "If the cloud service provider does not categorize the assets specifically, then all assets may be treated as requiring the highest level of protection needs.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-09.03B",
+ "Description": "The need for protection is determined by the individuals or groups responsible for the assets of the cloud service provider according to a uniform and documented classification schema.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-09 Asset Classification and Labelling",
+ "Type": "Basic",
+ "AboutCriteria": "If the cloud service provider does not categorize the assets specifically, then all assets may be treated as requiring the highest level of protection needs.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-09.04B",
+ "Description": "The classification schema provides levels of protection for the confidentiality, integrity, availability, and authenticity protection objectives. These protection objectives are aligned with delivery and recovery objectives set out in business and disaster recovery plans.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-09 Asset Classification and Labelling",
+ "Type": "Basic",
+ "AboutCriteria": "If the cloud service provider does not categorize the assets specifically, then all assets may be treated as requiring the highest level of protection needs.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-09.01AC",
+ "Description": "All physical assets are uniquely identified. This unique identification of devices serves as an additional method for connection authentication.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-09 Asset Classification and Labelling",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "To ensure that all physical assets are uniquely identified, the cloud service provider may implement practices such as: - Use of a centralised device management platform to monitor and control all devices;- Assigning unique identifiers (e.g. MAC addresses, serial numbers) to all devices; and- Use of automated mechanisms to register connecting devices.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-09.02AC",
+ "Description": "Device identification is integrated into the asset classification and labeling processes.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-09 Asset Classification and Labelling",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-09.03AC",
+ "Description": "Logging and monitoring applications take the asset protection needs into account in order to inform the responsible stakeholder of events that could lead to a violation of the protection goals, so that the necessary measures are taken with an appropriate priority.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-09 Asset Classification and Labelling",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "networkfirewall_logging_enabled",
+ "guardduty_no_high_severity_findings",
+ "cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_authentication_failures",
+ "cloudwatch_log_metric_filter_aws_organizations_changes",
+ "cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk",
+ "cloudwatch_log_metric_filter_for_s3_bucket_policy_changes",
+ "cloudwatch_log_metric_filter_policy_changes",
+ "cloudwatch_log_metric_filter_root_usage",
+ "cloudwatch_log_metric_filter_security_group_changes",
+ "cloudwatch_log_metric_filter_sign_in_without_mfa",
+ "cloudwatch_log_metric_filter_unauthorized_api_calls",
+ "cloudwatch_alarm_actions_alarm_state_configured",
+ "cloudwatch_alarm_actions_enabled",
+ "cloudwatch_changes_to_network_acls_alarm_configured",
+ "cloudwatch_changes_to_network_gateways_alarm_configured",
+ "cloudwatch_changes_to_network_route_tables_alarm_configured",
+ "cloudwatch_changes_to_vpcs_alarm_configured",
+ "cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled"
+ ]
+ },
+ {
+ "Id": "AM-09.04AC",
+ "Description": "Actions for events on assets with a higher level of protection take precedence over events on assets with a lower need for protection.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-09 Asset Classification and Labelling",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "shield_advanced_protection_in_global_accelerators",
+ "iam_inline_policy_allows_privilege_escalation",
+ "inspector2_active_findings_exist",
+ "accessanalyzer_enabled_without_findings"
+ ]
+ },
+ {
+ "Id": "AM-10.01B",
+ "Description": "The cloud service provider has documented and implemented a procedure for protecting hardware that is temporarily not in use. The procedure ensures that inactive hardware is stored securely and protected against unauthorised access or damage until it is needed again.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-10 Protection of Hardware on Hold",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-11.01B",
+ "Description": "The cloud service provider ensures the secure and controlled transfer of hardware used in the cloud service production environment to an offsite or alternate location.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-11 Transfer of Hardware",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-11.02B",
+ "Description": "The transfer of hardware is authorised by designated personnel.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-11 Transfer of Hardware",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-11.03B",
+ "Description": "The transfer of hardware is conducted using secure methods to prevent unauthorised access, tampering, or loss during transit.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-11 Transfer of Hardware",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "elbv2_nlb_tls_termination_enabled",
+ "kafka_cluster_mutual_tls_authentication_enabled",
+ "dms_endpoint_redis_in_transit_encryption_enabled",
+ "dynamodb_accelerator_cluster_in_transit_encryption_enabled",
+ "ec2_transitgateway_auto_accept_vpc_attachments",
+ "elasticache_redis_cluster_in_transit_encryption_enabled",
+ "kafka_cluster_in_transit_encryption_enabled",
+ "kafka_connector_in_transit_encryption_enabled",
+ "redshift_cluster_in_transit_encryption_enabled",
+ "transfer_server_in_transit_encryption_enabled"
+ ]
+ },
+ {
+ "Id": "AM-12.01B",
+ "Description": "Policies and instructions for endpoint devices and removable storage media are documented, communicated and provided in accordance with SP-01 regarding the following aspects: - The use of removable media is forbidden except for unavoidable essential system administration actions, and then only in the event that no other mechanism is possible;- Use of removable media is dedicated to a single specific purpose;- The decision to use removable media is documented;- Storage encryption is enabled on managed endpoints and removable storage media to protect information from unauthorised disclosure;- Managed endpoints are configured with anti-malware detection and prevention technology and services;- Self-execution from removable storage is disabled and storage media is scanned before use on the cloud service provider's systems;- Measures are to be taken by users to protect mobile endpoints and removable storage in transit and in storage;- Protection during the transfer of any equipment containing cloud service customer data off-site for disposal to guarantee that the level of protection in terms of confidentiality and integrity of the assets during their transport is equivalent to that on the site;- Sharing equipment containing media with data (including cloud service customer data and cloud service derived data) with a third party only if the data (including cloud service customer data and cloud service derived data) stored on it is encrypted in accordance with CRY-05 or has been destroyed beforehand using a secure deletion mechanism;- Users are to use mobile endpoints and removable storage in a secure manner, this includes for example not leaving media openly accessable in public spaces, using screen locks and screen privacy films; and- Measures for maintaining proper security of third party endpoints with access to organisational assets are to be defined.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-12 Policy for Removable Media and Endpoint Devices",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "AM-12.01AC",
+ "Description": "Policies and instructions for endpoint devices and removable storage media shall furthermore contain the following aspects: - Managed endpoints are configured with appropriate software firewalls;- Managed endpoints are configured with Data Loss Prevention (DLP) technologies and rules in accordance with a risk assessment (cf. OIS-07);- Remote geo-location capabilities are enabled for all managed mobile endpoints; and- Define, implement and evaluate processes, procedures and technical measures to enable the deletion of company data remotely on managed endpoint devices.",
+ "Attributes": [
+ {
+ "Section": "Asset Management (AM)",
+ "SubSection": "AM-12 Policy for Removable Media and Endpoint Devices",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "networkfirewall_deletion_protection",
+ "networkfirewall_in_all_vpc",
+ "networkfirewall_logging_enabled",
+ "networkfirewall_multi_az",
+ "networkfirewall_policy_default_action_fragmented_packets",
+ "networkfirewall_policy_default_action_full_packets",
+ "networkfirewall_policy_rule_group_associated"
+ ]
+ },
+ {
+ "Id": "PS-01.01B",
+ "Description": "The cloud service provider defines and documents at least two security areas, with at least one sensitive area covering sensitive activities such as the buildings and premises hosting the information system for the provision of the cloud service, and at least one public area covering all remaining buildings and premises, not covered by other security areas.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-01 Physical Security and Environmental Control Requirements",
+ "Type": "Basic",
+ "AboutCriteria": "Incorrect planning can endanger the operational safety and availability of the premises or buildings. This can result from an incorrect assessment of elementary hazards at the site (e.g. air traffic, earthquakes, floods, hazardous substances) as well as an incorrect conception of the bandwidth or energy supply. Premises and buildings related to the cloud service provided include data centres and server rooms housing system components used to process cloud service customer data (including data centres for backup or redundancy purposes) and the technical utilities required to operate these system components (e.g. power supply, refrigeration, fire-fighting, telecommunications, security, etc.). Premises and buildings in which no data from cloud service customers is processed or stored (e.g. offices of the cloud service provider, server rooms with system components for internal development and test systems) adhere to requirements specifically covered under PS-08.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-01.02B",
+ "Description": "Security requirements for premises and buildings related to the cloud service provided are based on the security objectives of the information security policy, identified protection requirements for the cloud service and the assessment of risks to physical and environmental security. The security requirements are documented, communicated and provided in a policy or concept according to SP-01.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-01 Physical Security and Environmental Control Requirements",
+ "Type": "Basic",
+ "AboutCriteria": "Incorrect planning can endanger the operational safety and availability of the premises or buildings. This can result from an incorrect assessment of elementary hazards at the site (e.g. air traffic, earthquakes, floods, hazardous substances) as well as an incorrect conception of the bandwidth or energy supply. Premises and buildings related to the cloud service provided include data centres and server rooms housing system components used to process cloud service customer data (including data centres for backup or redundancy purposes) and the technical utilities required to operate these system components (e.g. power supply, refrigeration, fire-fighting, telecommunications, security, etc.). Premises and buildings in which no data from cloud service customers is processed or stored (e.g. offices of the cloud service provider, server rooms with system components for internal development and test systems) adhere to requirements specifically covered under PS-08.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-01.03B",
+ "Description": "Security requirements for data centres are based on criteria in accordance with established rules of technology and the criteria PS-02 to PS-07. They are suitable for addressing the following risks in accordance with the applicable legal and contractual requirements: - Faults in planning;- Unauthorised access;- Insufficient surveillance;- Lightning and overvoltage (aligned with the internationally harmonised standards of IEC 62305);- Fire and smoke;- Unwanted water;- Failures and/or unavailable telecommunications;- Power failure; and- Heating, ventilation, airconditioning (HVAC) and filtration.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-01 Physical Security and Environmental Control Requirements",
+ "Type": "Basic",
+ "AboutCriteria": "Incorrect planning can endanger the operational safety and availability of the premises or buildings. This can result from an incorrect assessment of elementary hazards at the site (e.g. air traffic, earthquakes, floods, hazardous substances) as well as an incorrect conception of the bandwidth or energy supply. Premises and buildings related to the cloud service provided include data centres and server rooms housing system components used to process cloud service customer data (including data centres for backup or redundancy purposes) and the technical utilities required to operate these system components (e.g. power supply, refrigeration, fire-fighting, telecommunications, security, etc.). Premises and buildings in which no data from cloud service customers is processed or stored (e.g. offices of the cloud service provider, server rooms with system components for internal development and test systems) adhere to requirements specifically covered under PS-08. The recognised established rules of technology are defined in relevant standards, e.g. EN 50600 (facilities and infrastructures of data centres). Note for German readers: The German version of C5 uses the term *Stand der Technik* for established rules of technology although the German reader might expect the term *state of the art*. Without discussing the semantic, please note that *state of the art* defines a higher level than *Stand der Technik* and therefore *established rules of technology* is used here.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-01.04B",
+ "Description": "The maximum tolerable downtimes of utility facilities are suitable for meeting the availability requirements contained in the service level agreement.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-01 Physical Security and Environmental Control Requirements",
+ "Type": "Basic",
+ "AboutCriteria": "Incorrect planning can endanger the operational safety and availability of the premises or buildings. This can result from an incorrect assessment of elementary hazards at the site (e.g. air traffic, earthquakes, floods, hazardous substances) as well as an incorrect conception of the bandwidth or energy supply. Premises and buildings related to the cloud service provided include data centres and server rooms housing system components used to process cloud service customer data (including data centres for backup or redundancy purposes) and the technical utilities required to operate these system components (e.g. power supply, refrigeration, fire-fighting, telecommunications, security, etc.). Premises and buildings in which no data from cloud service customers is processed or stored (e.g. offices of the cloud service provider, server rooms with system components for internal development and test systems) adhere to requirements specifically covered under PS-08.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-01.05B",
+ "Description": "If the cloud service provider operates the cloud service in data centres operated by service organisations, the document describes the complementary subservice organisation controls (CSOC) expected at the service organisations and the measures for monitoring the design and operation of controls at the service organisations with respect to these CSOC (cf. SSO-05).",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-01 Physical Security and Environmental Control Requirements",
+ "Type": "Basic",
+ "AboutCriteria": "Incorrect planning can endanger the operational safety and availability of the premises or buildings. This can result from an incorrect assessment of elementary hazards at the site (e.g. air traffic, earthquakes, floods, hazardous substances) as well as an incorrect conception of the bandwidth or energy supply. Premises and buildings related to the cloud service provided include data centres and server rooms housing system components used to process cloud service customer data (including data centres for backup or redundancy purposes) and the technical utilities required to operate these system components (e.g. power supply, refrigeration, fire-fighting, telecommunications, security, etc.). Premises and buildings in which no data from cloud service customers is processed or stored (e.g. offices of the cloud service provider, server rooms with system components for internal development and test systems) adhere to requirements specifically covered under PS-08. Premises and buildings operated by third parties are e.g. server housing, colocation, IaaS.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-01.06B",
+ "Description": "The appropriate and effective verification of implementation is carried out in accordance with the criteria for controlling and monitoring subcontractors (cf. SSO-01, SSO-02).",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-01 Physical Security and Environmental Control Requirements",
+ "Type": "Basic",
+ "AboutCriteria": "Incorrect planning can endanger the operational safety and availability of the premises or buildings. This can result from an incorrect assessment of elementary hazards at the site (e.g. air traffic, earthquakes, floods, hazardous substances) as well as an incorrect conception of the bandwidth or energy supply. Premises and buildings related to the cloud service provided include data centres and server rooms housing system components used to process cloud service customer data (including data centres for backup or redundancy purposes) and the technical utilities required to operate these system components (e.g. power supply, refrigeration, fire-fighting, telecommunications, security, etc.). Premises and buildings in which no data from cloud service customers is processed or stored (e.g. offices of the cloud service provider, server rooms with system components for internal development and test systems) adhere to requirements specifically covered under PS-08.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-01.01AC",
+ "Description": "The security requirements include time constraints for self-sufficient operation in the event of exceptional events (e.g. prolonged power outage, heat waves, low water in cold river water supply) and maximum tolerable utility downtime.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-01 Physical Security and Environmental Control Requirements",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Incorrect planning can endanger the operational safety and availability of the premises or buildings. This can result from an incorrect assessment of elementary hazards at the site (e.g. air traffic, earthquakes, floods, hazardous substances) as well as an incorrect conception of the bandwidth or energy supply. Premises and buildings related to the cloud service provided include data centres and server rooms housing system components used to process cloud service customer data (including data centres for backup or redundancy purposes) and the technical utilities required to operate these system components (e.g. power supply, refrigeration, fire-fighting, telecommunications, security, etc.). Premises and buildings in which no data from cloud service customers is processed or stored (e.g. offices of the cloud service provider, server rooms with system components for internal development and test systems) adhere to requirements specifically covered under PS-08. Time specifications for self-sustaining operation as well as maximum tolerable downtimes of utility facilities are typically collected during the business impact analysis (cf. BCM-02, BCM-03).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-01.02AC",
+ "Description": "The time limits for self-sufficient operation provide for at least 72 hours in the event of a failure of the external power supply.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-01 Physical Security and Environmental Control Requirements",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Incorrect planning can endanger the operational safety and availability of the premises or buildings. This can result from an incorrect assessment of elementary hazards at the site (e.g. air traffic, earthquakes, floods, hazardous substances) as well as an incorrect conception of the bandwidth or energy supply. Premises and buildings related to the cloud service provided include data centres and server rooms housing system components used to process cloud service customer data (including data centres for backup or redundancy purposes) and the technical utilities required to operate these system components (e.g. power supply, refrigeration, fire-fighting, telecommunications, security, etc.). Premises and buildings in which no data from cloud service customers is processed or stored (e.g. offices of the cloud service provider, server rooms with system components for internal development and test systems) adhere to requirements specifically covered under PS-08. The 72-hour timeframe for self-sufficient operation aligns with guidelines for government agencies, businesses and critical infrastructure operators (KRITIS) as per the Federal Office for Civil Protection and Disaster Assistance (BBK).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-01.03AC",
+ "Description": "For a self-sufficient operation during a heat period, the highest outside temperatures measured to date at the three nearest official measurement stations around the locations of the premises and buildings have been determined with a safety margin of 3 K.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-01 Physical Security and Environmental Control Requirements",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Incorrect planning can endanger the operational safety and availability of the premises or buildings. This can result from an incorrect assessment of elementary hazards at the site (e.g. air traffic, earthquakes, floods, hazardous substances) as well as an incorrect conception of the bandwidth or energy supply. Premises and buildings related to the cloud service provided include data centres and server rooms housing system components used to process cloud service customer data (including data centres for backup or redundancy purposes) and the technical utilities required to operate these system components (e.g. power supply, refrigeration, fire-fighting, telecommunications, security, etc.). Premises and buildings in which no data from cloud service customers is processed or stored (e.g. offices of the cloud service provider, server rooms with system components for internal development and test systems) adhere to requirements specifically covered under PS-08.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-01.04AC",
+ "Description": "The security requirements stipulate that the permissible operating and environmental parameters of the cooling supply shall also be maintained on at least five consecutive days with these outside temperatures including the safety margin (cf. PS-06).",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-01 Physical Security and Environmental Control Requirements",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Incorrect planning can endanger the operational safety and availability of the premises or buildings. This can result from an incorrect assessment of elementary hazards at the site (e.g. air traffic, earthquakes, floods, hazardous substances) as well as an incorrect conception of the bandwidth or energy supply. Premises and buildings related to the cloud service provided include data centres and server rooms housing system components used to process cloud service customer data (including data centres for backup or redundancy purposes) and the technical utilities required to operate these system components (e.g. power supply, refrigeration, fire-fighting, telecommunications, security, etc.). Premises and buildings in which no data from cloud service customers is processed or stored (e.g. offices of the cloud service provider, server rooms with system components for internal development and test systems) adhere to requirements specifically covered under PS-08.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-01.05AC",
+ "Description": "If water is taken from a river for air conditioning, it is determined at which water levels and water temperatures the air conditioning can be maintained for how long.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-01 Physical Security and Environmental Control Requirements",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Incorrect planning can endanger the operational safety and availability of the premises or buildings. This can result from an incorrect assessment of elementary hazards at the site (e.g. air traffic, earthquakes, floods, hazardous substances) as well as an incorrect conception of the bandwidth or energy supply. Premises and buildings related to the cloud service provided include data centres and server rooms housing system components used to process cloud service customer data (including data centres for backup or redundancy purposes) and the technical utilities required to operate these system components (e.g. power supply, refrigeration, fire-fighting, telecommunications, security, etc.). Premises and buildings in which no data from cloud service customers is processed or stored (e.g. offices of the cloud service provider, server rooms with system components for internal development and test systems) adhere to requirements specifically covered under PS-08.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-02.01B",
+ "Description": "The cloud service is provided from at least two locations that provide each other with operational redundancy and resilience. The locations meet the security requirements of the cloud service provider (cf. PS-01) and are located in an adequate distance to each other to achieve operational redundancy.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-02 Redundancy Model",
+ "Type": "Basic",
+ "AboutCriteria": "Operational redundancy of the sites to each other in the sense of this criterion is given if based on the assessment of elementary risks at the site corresponding distances of the premises and buildings to these risks are maintained. Very extensive events which, due to their extent, could affect several sites of the same redundancy group simultaneously or in a timely manner (e.g. floods, earthquakes) are not considered. There are cloud service providers who no longer address the issue of reliability of the cloud service on a physical level through redundancy from two independent locations, but through resilience. The cloud service is provided simultaneously from more than two locations. The underlying distributed data centre architecture ensures that the failure of a location or components of a location does not violate the defined availability criteria of the cloud service. Such an architecture can represent an alternative fulfilment (cf. Chapter 3.4.8) of the criterion. The tests and exercises on functionality required in the criterion also apply analogously to resilient architectures.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that the existing redundancy model of the cloud service provider and the evidence for the verification of the model comply with their own requirements for the availability and reliability of the cloud service."
+ }
+ ],
+ "Checks": [
+ "opensearch_service_domains_fault_tolerant_data_nodes",
+ "vpc_subnet_different_az",
+ "cloudtrail_multi_region_enabled",
+ "cloudtrail_multi_region_enabled_logging_management_events",
+ "config_recorder_all_regions_enabled",
+ "kms_cmk_not_multi_region",
+ "organizations_scp_check_deny_regions",
+ "s3_bucket_cross_region_replication",
+ "s3_multi_region_access_point_public_access_block",
+ "vpc_different_regions",
+ "autoscaling_group_multiple_az",
+ "storagegateway_gateway_fault_tolerant"
+ ]
+ },
+ {
+ "Id": "PS-02.01AS",
+ "Description": "The cloud service is provided from more than two locations that provide each other with redundancy. The locations are sufficiently far apart to achieve georedundancy. If two locations fail at the same time, at least one third location is still available to prevent a total service failure.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-02 Redundancy Model",
+ "Type": "Additional (Sharpening)",
+ "AboutCriteria": "A georedundancy of the sites to each other in the sense of this criterion is given if a very extensive event at a site under no circumstances affects several sites of the same redundancy group simultaneously or promptly. The BSI publication 'Kriterien für die Standortwahl von Rechenzentren' provides assistance in this regard.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "s3_bucket_cross_region_replication",
+ "opensearch_service_domains_fault_tolerant_data_nodes",
+ "autoscaling_group_multiple_az",
+ "directconnect_connection_redundancy",
+ "cloudfront_distributions_multiple_origin_failover_configured",
+ "cloudtrail_multi_region_enabled",
+ "cloudtrail_multi_region_enabled_logging_management_events",
+ "config_recorder_all_regions_enabled",
+ "kms_cmk_not_multi_region",
+ "organizations_scp_check_deny_regions",
+ "s3_multi_region_access_point_public_access_block",
+ "vpc_different_regions"
+ ]
+ },
+ {
+ "Id": "PS-02.02B",
+ "Description": "Operational redundancy is designed in a way that ensures that the availability requirements specified in the service level agreement are met.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-02 Redundancy Model",
+ "Type": "Basic",
+ "AboutCriteria": "Operational redundancy of the sites to each other in the sense of this criterion is given if based on the assessment of elementary risks at the site corresponding distances of the premises and buildings to these risks are maintained. Very extensive events which, due to their extent, could affect several sites of the same redundancy group simultaneously or in a timely manner (e.g. floods, earthquakes) are not considered. There are cloud service providers who no longer address the issue of reliability of the cloud service on a physical level through redundancy from two independent locations, but through resilience. The cloud service is provided simultaneously from more than two locations. The underlying distributed data centre architecture ensures that the failure of a location or components of a location does not violate the defined availability criteria of the cloud service. Such an architecture can represent an alternative fulfilment (cf. Chapter 3.4.8) of the criterion. The tests and exercises on functionality required in the criterion also apply analogously to resilient architectures.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "autoscaling_group_multiple_az",
+ "opensearch_service_domains_fault_tolerant_data_nodes",
+ "opensearch_service_domains_fault_tolerant_master_nodes",
+ "directconnect_connection_redundancy",
+ "directconnect_virtual_interface_redundancy"
+ ]
+ },
+ {
+ "Id": "PS-02.02AS",
+ "Description": "The georedundancy is designed in a way that ensures that the availability requirements specified in the service level agreement are met.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-02 Redundancy Model",
+ "Type": "Additional (Sharpening)",
+ "AboutCriteria": "A georedundancy of the sites to each other in the sense of this criterion is given if a very extensive event at a site under no circumstances affects several sites of the same redundancy group simultaneously or promptly. The BSI publication 'Kriterien für die Standortwahl von Rechenzentren' provides assistance in this regard.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "s3_bucket_cross_region_replication",
+ "autoscaling_group_multiple_az",
+ "directconnect_connection_redundancy",
+ "opensearch_service_domains_fault_tolerant_data_nodes",
+ "vpc_subnet_different_az",
+ "cloudtrail_multi_region_enabled",
+ "cloudtrail_multi_region_enabled_logging_management_events",
+ "config_recorder_all_regions_enabled",
+ "kms_cmk_not_multi_region",
+ "organizations_scp_check_deny_regions",
+ "s3_multi_region_access_point_public_access_block",
+ "vpc_different_regions"
+ ]
+ },
+ {
+ "Id": "PS-02.03B",
+ "Description": "The functionality of the redundancy is checked at least annually by suitable tests and exercises (cf. BCM-04).",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-02 Redundancy Model",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-03.01B",
+ "Description": "The structural shell of premises and buildings related to the cloud service provided are physically solid and protected by adequate security measures that meet the security requirements of the cloud service provider (cf. PS-01).",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-03 Perimeter Protection",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-03.02B",
+ "Description": "The security measures are designed to detect and prevent unauthorised access so that the information security of the cloud service is not compromised.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-03 Perimeter Protection",
+ "Type": "Basic",
+ "AboutCriteria": "Security measures for detecting unauthorised access can be security personnel, video surveillance or burglar alarm systems.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "apigateway_restapi_public",
+ "apigateway_restapi_public_with_authorizer",
+ "autoscaling_group_launch_configuration_no_public_ip",
+ "awslambda_function_not_publicly_accessible",
+ "awslambda_function_url_public",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "cloudwatch_log_group_not_publicly_accessible",
+ "codeartifact_packages_external_public_publishing_disabled",
+ "codebuild_project_not_publicly_accessible",
+ "dms_instance_no_public_access",
+ "documentdb_cluster_public_snapshot",
+ "ec2_ami_public",
+ "ec2_ebs_public_snapshot",
+ "ec2_ebs_snapshot_account_block_public_access",
+ "ec2_instance_public_ip",
+ "ec2_launch_template_no_public_ip",
+ "ec2_securitygroup_allow_wide_open_public_ipv4",
+ "ecr_repositories_not_publicly_accessible",
+ "ecs_service_no_assign_public_ip",
+ "ecs_task_set_no_assign_public_ip",
+ "efs_mount_target_not_publicly_accessible",
+ "efs_not_publicly_accessible",
+ "eks_cluster_not_publicly_accessible",
+ "elasticache_cluster_uses_public_subnet",
+ "emr_cluster_account_public_block_enabled",
+ "emr_cluster_master_nodes_no_public_ip",
+ "emr_cluster_publicly_accesible",
+ "glacier_vaults_policy_public_access",
+ "glue_data_catalogs_not_publicly_accessible",
+ "kafka_cluster_is_public",
+ "kms_key_not_publicly_accessible",
+ "lightsail_database_public",
+ "lightsail_instance_public",
+ "mq_broker_not_publicly_accessible",
+ "neptune_cluster_public_snapshot",
+ "neptune_cluster_uses_public_subnet",
+ "opensearch_service_domains_not_publicly_accessible",
+ "rds_instance_no_public_access",
+ "rds_snapshots_public_access",
+ "redshift_cluster_public_access",
+ "route53_public_hosted_zones_cloudwatch_logging_enabled",
+ "s3_access_point_public_access_block",
+ "s3_account_level_public_access_blocks",
+ "s3_bucket_level_public_access_block",
+ "s3_bucket_policy_public_write_access",
+ "s3_bucket_public_access",
+ "s3_bucket_public_list_acl",
+ "s3_bucket_public_write_acl",
+ "s3_multi_region_access_point_public_access_block",
+ "secretsmanager_not_publicly_accessible",
+ "ses_identity_not_publicly_accessible",
+ "sns_topics_not_publicly_accessible",
+ "sqs_queues_not_publicly_accessible",
+ "ssm_documents_set_as_public",
+ "vpc_subnet_no_public_ip_by_default",
+ "vpc_subnet_separate_private_public",
+ "workspaces_vpc_2private_1public_subnets_nat"
+ ]
+ },
+ {
+ "Id": "PS-03.03B",
+ "Description": "The outer doors, windows and other construction elements exhibit an appropriate security level and withstand a break-in attempt for at least ten minutes.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-03 Perimeter Protection",
+ "Type": "Basic",
+ "AboutCriteria": "The resistance class RC4 according to DIN EN 1627 stipulates that doors, windows and other components shall withstand a break-in attempt for at least ten minutes. The US standard SD-STD-01.01 Rev.G. is an international equivalent to this standard.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-03.04B",
+ "Description": "The surrounding wall constructions as well as the locking mechanisms meet the associated requirements.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-03 Perimeter Protection",
+ "Type": "Basic",
+ "AboutCriteria": "The resistance class RC4 according to DIN EN 1627 stipulates that doors, windows and other components shall withstand a break-in attempt for at least ten minutes. The US standard SD-STD-01.01 Rev.G. is an international equivalent to this standard.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-03.05B",
+ "Description": "If any construction element on its own does not fully meet the associated requirements, additional security measures are implemented to restore the appropriate security level.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-03 Perimeter Protection",
+ "Type": "Basic",
+ "AboutCriteria": "Compensating measures can include additional security layers (e.g. security areas) on the premise, an increased presence of security personnel, video surveillance and anti-burglary systems.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-03.06B",
+ "Description": "Data centre personnel are trained on how to respond effectively to attempts of unauthorised ingress or egress attempts.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-03 Perimeter Protection",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-03.01AC",
+ "Description": "The security measures installed at the site include permanently present security personnel (at least two individuals), video surveillance and anti-burglary systems.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-03 Perimeter Protection",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-04.01B",
+ "Description": "Preventive and detective physical access controls in premises and buildings related to the cloud service provided are implemented. They are in accordance with the cloud service provider's security requirements (cf. PS-01) and based on the principles defined in IAM-01 to prevent unauthorised access. They are documented and communicated in a policy or concept in accordance with SP-01 and include the following aspects: - Specified procedure for the granting and revoking of access authorisations (cf. IAM-02) based on the principle of least authorisation ('least-privilege-principle') and as necessary for the performance of tasks ('need-to-know-principle');- Revocation of access authorisations if they have not been used for a period of 2 months. Exceptions are only made for well-founded individual cases and follow a defined exception process according to SP-03;- Authentication with at least one factor for access to any non-public area;- Two-factor authentication for access to areas hosting system components that process cloud service customer data;- Visitors and external personnel are tracked individually by the access control during their work in the premises and buildings, identified as such (e.g. by visible wearing of a visitor pass) and supervised during their stay by employees who authorise or deny their actions, and question them if needed about their actions;- Existence and nature of access logging that enables the cloud service provider, in the sense of an effectiveness audit, to check whether only defined personnel have entered the premises and buildings related to the cloud service provided;- Physical access control derogations in case of emergency, including an analysis procedure after every use of these derogations; and- Measures to identify individuals who are not part of the personnel, incorporating them into the access policy system and defining the conditions, if any, under which they may be granted access to the premises.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-04 Physical Site Access Control",
+ "Type": "Basic",
+ "AboutCriteria": "For implementing access control based on the need-to-know-principle, a zoning concept can be deployed with each on-premises area having separate access permissions. If a zoning concept is implemented, each on-premises area should be physically separated with its own access control system. Examples for zoning on-premises can be: - Green zone: Public area, contains no resources that are relevant to the provisioning of the cloud service;- Yellow zone: Private area, contains means for supporting the cloud service such as development, administration and supervision; and- Red zone: Sensitive area for production systems such as the server rooms. Exceptions to the revocation of access authorisations after two months of inactivity are limited to cases where employees with specific roles, such as management positions or supervisors, require only occasional but crucial entry. For all other employees, the revocation of access rights takes place after two months as described in the criterion.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-04.02B",
+ "Description": "At the entrance of applicable non-public perimeters, the cloud service provider displays a warning concerning the limits and access conditions to the corresponding areas.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-04 Physical Site Access Control",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-04.03B",
+ "Description": "Physical access controls are supported by an access control system.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-04 Physical Site Access Control",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-05.01B",
+ "Description": "Premises and buildings related to the cloud service provided are protected from fire, smoke, lightning and unwanted water by structural, technical and organisational measures that meet the security requirements of the cloud service provider (cf. PS-01).",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-05 Protection against Threats from Outside and from the Environment",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-05.02B",
+ "Description": "Structural Measures include the following aspects: - Establishment of fire sections with a fire resistance duration of at least 90 minutes for all structural parts, or alternatively, equivalent organisational and technical measures that ensure the same level of protection standard as 90-minutes fire-resistant structural parts or establishment of compensating measures for containing fires and maintaining operational capability;- Effective implementation of measures to protect against lightning and overvoltage damage; and- Effective implementation of measures to protect against flooding and heavy rain, unless critical facilities are located significantly above the highest flood level or the backwater level at the location of the cloud data centre.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-05 Fire Protection",
+ "Type": "Basic",
+ "AboutCriteria": "Structural parts are walls, ceilings, floors, doors, windows and other breakthroughs like ventilation flaps, etc. Compensating measures can take into account aspects such as: - Partitioning and layout of fire sections;- Extinguishing systems within the fire sections;- Early and very early fire detection mechanisms;- Arrival time of the fire brigade after the fire alarm was triggered; and- Redundancy of systems and supply facilities within the premise. The location of all critical facilities in relation to the highest historically recorded flood level at the cloud data centre site or the site's backwater level acts as the starting point for considering flood and heavy rain protection measures.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-05.03B",
+ "Description": "Technical Measures include the following aspects: - Early fire detection with automatic voltage release. The monitored areas are sufficiently fragmented to ensure that the prevention of the spread of incipient fires is proportionate to the maintenance of the availability of the cloud service provided;- Extinguishing system or oxygen reduction; and- Fire alarm system with reporting to the local fire department.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-05 Fire Protection",
+ "Type": "Basic",
+ "AboutCriteria": "The monitoring of the environmental parameters is addressed in PS-07. When exceeding the allowed control range, alarm messages are generated and forwarded to the responsible cloud service provider.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-05.04B",
+ "Description": "Organisational Measures include the following aspects: - Regular fire protection inspections to check compliance with fire protection requirements; and- Regular fire protection exercises.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-05 Fire Protection",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-06.01B",
+ "Description": "Measures to prevent the failure of the technical supply facilities required for the operation of system components with which cloud service customer data is processed and to protect equipment holding cloud service customer data, are documented and set up in accordance with the security requirements of the cloud service provider (cf. PS-01) with respect to the following aspects: - Operational redundancy (N+1) in power and cooling supply;- Use of appropriately sized uninterruptible power supplies (UPS) and emergency power supplies (EPS), designed to ensure that all data remains undamaged in the event of a power failure. The functionality of UPS and NEA is checked at least annually by suitable tests and exercises (cf. BCM-04);- Maintenance (servicing, inspection, repair) of the utilities in accordance with the manufacturer's recommendations; and- Protection of power supply and telecommunications lines against interruption, interference, damage and eavesdropping.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-06 Protection against Interruptions caused by Power Failures and similar Risks to Supply Facilities",
+ "Type": "Basic",
+ "AboutCriteria": "Measures to prevent the failure of the technical supply facilities are e.g. power supply, cooling, fire-fighting technology, telecommunications, security technology, etc. Cloud service providers can ensure that all data remains undamaged in the event of a power failure by shutting down servers following a defined procedure. Power supply and telecommunications lines can be protected against interruption, interference, damage and eavesdropping by e.g. underground supply via different supply routes.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-06.02B",
+ "Description": "Uninterruptible Power Supplies (UPS) and Emergency Power Supplies (EPS) are designed to meet the availability requirements defined in the Service Level Agreement.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-06 Power Supply",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-06.03B",
+ "Description": "The cloud service provider ensures that equipment containing media with data (including cloud service customer data and cloud service derived data) is shared with a third party only if the data (including cloud service customer data and cloud service derived data) stored on it is encrypted in accordance with CRY-05 or has been destroyed beforehand using a secure deletion mechanism.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-06 Power Supply",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "storagegateway_fileshare_encryption_enabled"
+ ]
+ },
+ {
+ "Id": "PS-06.04B",
+ "Description": "The protection of power supply and telecommunications lines is checked regularly, but at least every two years as well as in case of suspected manipulation, by qualified personnel regarding the following aspects: - Traces of violent attempts to open closed distributors;- Up-to-dateness of the documentation within the distributor;- Conformity of the actual wiring and patching with the documentation;- The short-circuits and earthing of unneeded cables are intact; and- Impermissible installations and modifications.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-06 Power Supply",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-06.01AC",
+ "Description": "The cooling supply is designed in such a way that the permissible operating and environmental parameters are also ensured on at least five consecutive days with the highest outside temperatures measured to date at the three nearest official measurement stations around the locations of the premises and buildings, with a safety margin of 3 K (in relation to the outside temperature). The cloud service provider has previously determined the highest outdoor temperatures measured to date (cf. PS-01).",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-06 Power Supply",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-06.02AC",
+ "Description": "The connection to the telecommunications network is designed with sufficient redundancy so that the failure of a telecommunications network does not impair the security or performance of the cloud service provider.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-06 Power Supply",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-06.03AC",
+ "Description": "Measures are implemented to ensure that the conditions for installation, maintenance and servicing of the related technical equipment (e.g., electrical power, air conditioning, fire protection) are compatible with the cloud service's availability and security requirements.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-06 Power Supply",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-06.04AC",
+ "Description": "The cloud service provider ensures that the maintenance agreements for equipment used to host the cloud service enables to have security updates installed in timely fashion on this equipment.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-06 Power Supply",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-07.01B",
+ "Description": "The operating parameters of the technical utilities (cf. PS-06) and the environmental parameters of the premises and buildings related to the cloud service provided are monitored and controlled in accordance with the security requirements of the cloud service provider (cf. PS-01).",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-07 Surveillance of Operational and Environmental Parameters",
+ "Type": "Basic",
+ "AboutCriteria": "Operating parameters and environmental parameters of the premises and buildings are, e.g. air temperature and humidity, leakage, smoke.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-07.02B",
+ "Description": "When the permitted control range is exceeded, the responsible departments at the cloud service provider are automatically informed in order to promptly initiate the necessary measures for return to the control range.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-07 Environmental Monitoring",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PS-08.01B",
+ "Description": "Based on risk assessment according to OIS-07, security requirements for office environments, including home offices, are documented, communicated and provided in accordance with SP-01. These security requirements encompass various aspects to ensure a safe and secure working environment, including: - Physical access controls, such as key cards and biometric scanners, for office buildings;- Use of screen locks and privacy screens for workstations;- No openly visible confidential data at temporarily unattended workstations;- Disposal of all company documents that are no longer required within the company premise;- Prohibition of the use of third party equipment;- Secure office networks with firewalls and secure WIFI configurations as well as VPN for remote access; and- Secure office premises with alarm systems and surveillance cameras.",
+ "Attributes": [
+ {
+ "Section": "Physical Security (PS)",
+ "SubSection": "PS-08 Workplace Security Requirements",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-01.01B",
+ "Description": "The planning of capacities and resources (personnel and IT resources) follows an established procedure in order to avoid possible capacity bottlenecks.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-01 Capacity Management - Planning",
+ "Type": "Basic",
+ "AboutCriteria": "For economic reasons, cloud service providers typically strive for a high utilisation of IT resources (CPU, RAM, storage space, network). In multi-tenant environments, existing resources should still be shared between cloud users (clients) in such a way that service level agreements are adhered to. In this respect, proper planning and monitoring of IT resources is critical to the availability and competitiveness of the cloud service. If the procedures are not documented or are subject to a higher degree of confidentiality as a trade secret of the cloud service provider, the cloud service provider should be able to explain the procedures at least orally within the scope of this audit. Capacity bottlenecks are limitations in the cloud service provider’s resources, resulting in disruptions of the cloud service or impacting compliance with contractual agreements and service levels.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that the capacity and resource requirements to be covered by the cloud service provider are planned and reflected in the SLA with the cloud service provider. The requirements are reviewed regularly and the adjustment of SLA demanded accordingly."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-01.02B",
+ "Description": "The procedures include forecasting future capacity requirements in order to identify usage trends and manage system overload.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-01 Operational Security",
+ "Type": "Basic",
+ "AboutCriteria": "For economic reasons, cloud service providers typically strive for a high utilisation of IT resources (CPU, RAM, storage space, network). In multi-tenant environments, existing resources should still be shared between cloud users (clients) in such a way that service level agreements are adhered to. In this respect, proper planning and monitoring of IT resources is critical to the availability and competitiveness of the cloud service. If the procedures are not documented or are subject to a higher degree of confidentiality as a trade secret of the cloud service provider, the cloud service provider should be able to explain the procedures at least orally within the scope of this audit.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-01.03B",
+ "Description": "Cloud service providers take appropriate measures to ensure that they continue to meet the requirements agreed with cloud service customers for the provision of the cloud service in the event of capacity bottlenecks or outages regarding personnel and IT resources. This applies in particular to those relating to the dedicated use of system components, in accordance with the respective agreements.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-01 Operational Security",
+ "Type": "Basic",
+ "AboutCriteria": "For economic reasons, cloud service providers typically strive for a high utilisation of IT resources (CPU, RAM, storage space, network). In multi-tenant environments, existing resources should still be shared between cloud users (clients) in such a way that service level agreements are adhered to. In this respect, proper planning and monitoring of IT resources is critical to the availability and competitiveness of the cloud service. If the procedures are not documented or are subject to a higher degree of confidentiality as a trade secret of the cloud service provider, the cloud service provider should be able to explain the procedures at least orally within the scope of this audit.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-01.01AC",
+ "Description": "The forecasts are considered in accordance with the service level agreement for planning and preparing the provisioning.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-01 Operational Security",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "For economic reasons, cloud service providers typically strive for a high utilisation of IT resources (CPU, RAM, storage space, network). In multi-tenant environments, existing resources should still be shared between cloud users (clients) in such a way that service level agreements are adhered to. In this respect, proper planning and monitoring of IT resources is critical to the availability and competitiveness of the cloud service. If the procedures are not documented or are subject to a higher degree of confidentiality as a trade secret of the cloud service provider, the cloud service provider should be able to explain the procedures at least orally within the scope of this audit.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-02.01B",
+ "Description": "Technical and organisational safeguards for the monitoring and provisioning and de-provisioning of cloud services are defined. The cloud service provider ensures that resources are delivered as contractually agreed with the customers. The cloud service provider ensures compliance with the service level agreements.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-02 Capacity Management - Monitoring",
+ "Type": "Basic",
+ "AboutCriteria": "Technical and organisational measures typically include: - Use of monitoring tools with alarm function when defined threshold values are exceeded;- Process for correlating events and interface to incident management;- Continuous monitoring of the systems by qualified personnel; and- Redundancies in the IT systems.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that the contractual agreements made with the cloud service provider for the provision of resources or services can be monitored. In case of deviations, appropriate controls ensure that the cloud service provider is informed so that the cloud service provider can take appropriate action."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-02.02B",
+ "Description": "Capacity bottlenecks are to be reported to cloud service customers analogous to OPS-24.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-02 Change Management",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-02.01AC",
+ "Description": "To monitor capacity and availability managed by the cloud service customer, the relevant information is available to the cloud service customer in a self-service portal.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-02 Change Management",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-03.01B",
+ "Description": "Depending on the capabilities of the respective service model, the cloud service customer can control and monitor the allocation of the IT resources assigned to the customer for administration/use in order to avoid overcrowding of resources and to achieve sufficient performance.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-03 Capacity Management - Controlling of Resources",
+ "Type": "Basic",
+ "AboutCriteria": "Resources according to the possibilities of the service model are for example: - Computing capacity;- Storage capacity;- Configuration of network properties;- Application Programming Interfaces (APIs); and- Databases. System resource allocation may need to take into account any container-based infrastructure used in the service models.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that they manage and monitor the system resources in their area of responsibility."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-03.02B",
+ "Description": "The cloud service provider informs the cloud service customer about significant security changes in the allocated IT resources and the planned significant security changes.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-03 Capacity Management",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-04.01B",
+ "Description": "Policies and instructions with specifications for protection against malware are documented, communicated, and provided in accordance with SP-01 with respect to the following aspects: - Use of system-specific protection mechanisms;- Operating protection programmes on system components under the responsibility of the cloud service provider that are used to provide the cloud service in the production environment;- Operation of protection programmes for employees' terminal equipment; and- Operation of protection programmes on all the incoming flows, including those over cloud service provider end-devices.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-04 Protection Against Malware - Concept",
+ "Type": "Basic",
+ "AboutCriteria": "Protection programmes for employee devices can be, for example, server-based protection programmes that scan files in attachments on the server or filter network traffic.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "guardduty_ec2_malware_protection_enabled",
+ "guardduty_no_high_severity_findings",
+ "inspector2_active_findings_exist"
+ ]
+ },
+ {
+ "Id": "OPS-05.01B",
+ "Description": "System components under the cloud service provider's responsibility that are used to operate the cloud service in the production environment are configured with malware protection according to the policies and instructions.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-05 Protection Against Malware - Implementation",
+ "Type": "Basic",
+ "AboutCriteria": "Protection against malicious programmes can be implemented by operating system-specific protection mechanisms or explicit protection programmes (e.g. for signature- and behaviour-based detection and removal of malicious programmes). If the cloud provider operates malware protected containers or virtual machines to provide the cloud service, the malware protection should include container-specific measures. This can include, for example, monitoring the container images and the container runtime, and due to the frequent start and stop of the containers, real-time scans and -monitoring processes.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that the layers of the cloud service which they are responsible for have security products in place to detect and remove malware."
+ }
+ ],
+ "Checks": [
+ "guardduty_ec2_malware_protection_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-05.02B",
+ "Description": "If protection programmes are set up with signature or behaviour-based malware detection and removal, these protection programmes are regularly updated with the latest malware definitions when such updates are available, at least on a daily basis.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-05 Logging and Monitoring",
+ "Type": "Basic",
+ "AboutCriteria": "Protection against malicious programmes can be implemented by operating system-specific protection mechanisms or explicit protection programmes (e.g. for signature- and behaviour-based detection and removal of malicious programmes). If the cloud provider operates malware protected containers or virtual machines to provide the cloud service, the malware protection should include container-specific measures. This can include, for example, monitoring the container images and the container runtime, and due to the frequent start and stop of the containers, real-time scans and -monitoring processes.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "guardduty_ec2_malware_protection_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-05.01AS",
+ "Description": "If protection programmes are set up with signature and behaviour-based malware detection and removal, these protection programmes are regularly updated with the latest malware definitions when such updates are available, at the highest frequency that the vendor(s) contractually offer(s).",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-05 Logging and Monitoring",
+ "Type": "Additional (Sharpening)",
+ "AboutCriteria": "Protection against malicious programmes can be implemented by operating system-specific protection mechanisms or explicit protection programmes (e.g. for signature- and behaviour-based detection and removal of malicious programmes). If the cloud provider operates malware protected containers or virtual machines to provide the cloud service, the malware protection should include container-specific measures. This can include, for example, monitoring the container images and the container runtime, and due to the frequent start and stop of the containers, real-time scans and -monitoring processes.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "guardduty_ec2_malware_protection_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-05.01AC",
+ "Description": "The cloud service provider creates regular reports on the checks performed by the operated protection programs, which are reviewed and analysed by authorised bodies or committees.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-05 Logging and Monitoring",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "backup_reportplans_exist",
+ "codebuild_report_group_export_encrypted",
+ "elasticbeanstalk_environment_enhanced_health_reporting"
+ ]
+ },
+ {
+ "Id": "OPS-05.02AC",
+ "Description": "Policies and instructions describe the technical measures taken to securely configure and monitor the management console (both the customer's self-service and the service provider's cloud administration) to protect it from malware.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-05 Logging and Monitoring",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_user_mfa_enabled_console_access",
+ "iam_user_console_access_unused",
+ "iam_user_no_setup_initial_access_key"
+ ]
+ },
+ {
+ "Id": "OPS-05.03AC",
+ "Description": "The configuration of the protection mechanisms is monitored automatically.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-05 Logging and Monitoring",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "guardduty_is_enabled",
+ "athena_workgroup_enforce_configuration",
+ "shield_advanced_protection_in_global_accelerators"
+ ]
+ },
+ {
+ "Id": "OPS-05.04AC",
+ "Description": "Deviations from the specifications are automatically reported to the cloud service provider's subject matter experts so that they can be immediately assessed and the necessary measures taken.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-05 Logging and Monitoring",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-06.01B",
+ "Description": "Policies and instructions for at least daily backup and restore of cloud service customer data, cloud service derived data and cloud service provider data according to the sensitivity of the data are documented, communicated and provided in accordance with SP-01 regarding the following aspects. - The extent and frequency of data backups and the duration of data retention are consistent with the contractual agreements with the cloud service customers and the cloud service provider's operational continuity requirements for Recovery Time Objective (RTO) and Recovery Point Objective (RPO);- Data is backed up in encrypted, state-of-the-art form;- Secure storage, transfer, management and disposal of backup data;- Access to the backed-up data and the execution of restores is performed only by authorised persons;- Tests of data restore procedures by the cloud service provider (cf. OPS-08); and- If part of the contractual agreement: Execution of actual data restore requests or restore tests initiated by the cloud service customer.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-06 Data Backup and Recovery - Concept",
+ "Type": "Basic",
+ "AboutCriteria": "If the data backup of cloud service customer data is not part of the contract concluded between the cloud service provider and the cloud service customer, this criterion is not applicable for cloud service customer data, but it is still applicable for cloud service derived data and cloud service provider data. The extent to which the criterion is applicable to the cloud service is presented in the system description.The data backup concept specifies which type of data backup is to be carried out (e.g. scope, frequency and duration) and specifies which data shall also be backed up in special cases (e.g. pure use of compute nodes without data storage). When backing up data, one has to distinct between *backups* and *snapshots* of virtual machines. Snapshots do not replace backups but can be part of the backup strategy to achieve Recovery Point Objectives (RPO) if they are additionally stored outside the original data location. The business requirements of the cloud service provider for the scope, frequency and duration of the data backup result from the business impact analysis (cf. BCM-02) for development and operational processes of the cloud service. If different data backup and recovery procedures exist for cloud service customer data and cloud service provider data, both variants should be in scope for tests of controls according to this criteria catalogue. Existing contractual agreements prior to a C5 attestation do not need to be updated to incorporate the requirements specified in this criterion. Instead, new contractual agreements should be designed to ensure that specified requirements are clearly defined and agreed upon with cloud service customers.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that the contractual agreements made with the cloud service provider regarding the scope, frequency and duration of data retention meet business requirements. The business requirements are assessed as part of the business impact analysis (cf. BCM-02)."
+ }
+ ],
+ "Checks": [
+ "backup_plans_exist",
+ "backup_recovery_point_encrypted",
+ "backup_reportplans_exist",
+ "backup_vaults_encrypted",
+ "backup_vaults_exist",
+ "documentdb_cluster_backup_enabled",
+ "dynamodb_table_protected_by_backup_plan",
+ "ec2_ebs_volume_protected_by_backup_plan",
+ "efs_have_backup_enabled",
+ "elasticache_redis_cluster_backup_enabled",
+ "fsx_file_system_copy_tags_to_backups_enabled",
+ "neptune_cluster_backup_enabled",
+ "rds_cluster_protected_by_backup_plan",
+ "rds_instance_backup_enabled",
+ "rds_instance_protected_by_backup_plan"
+ ]
+ },
+ {
+ "Id": "OPS-07.01B",
+ "Description": "The execution of backups of cloud service customer data, cloud service derived data and cloud service provider data is monitored by technical and organisational measures documented and implemented in accordance with the policies and instructions defined in OPS-06.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-07 Data Backup and Recovery - Monitoring",
+ "Type": "Basic",
+ "AboutCriteria": "If the data backup of cloud service customer data is not part of the contract concluded between the cloud service provider and the cloud service customer, this criterion is not applicable for cloud service customer data, but it is still applicable for cloud service derived data and cloud service provider data. The extent to which the criterion is applicable to the cloud service is presented in the system description.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that the backup of data within their area of responsibility is monitored by technical and organisational measures."
+ }
+ ],
+ "Checks": [
+ "backup_plans_exist",
+ "backup_recovery_point_encrypted",
+ "backup_reportplans_exist",
+ "backup_vaults_encrypted",
+ "backup_vaults_exist",
+ "documentdb_cluster_backup_enabled",
+ "dynamodb_table_protected_by_backup_plan",
+ "ec2_ebs_volume_protected_by_backup_plan",
+ "efs_have_backup_enabled",
+ "elasticache_redis_cluster_backup_enabled",
+ "fsx_file_system_copy_tags_to_backups_enabled",
+ "neptune_cluster_backup_enabled",
+ "rds_cluster_protected_by_backup_plan",
+ "rds_instance_backup_enabled",
+ "rds_instance_protected_by_backup_plan"
+ ]
+ },
+ {
+ "Id": "OPS-07.02B",
+ "Description": "Malfunctions are investigated by qualified staff and rectified promptly to ensure compliance with contractual obligations to cloud service customers or the cloud service provider's business requirements regarding the scope and frequency of data backup and the duration of storage.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-07 Security Testing",
+ "Type": "Basic",
+ "AboutCriteria": "If the data backup of cloud service customer data is not part of the contract concluded between the cloud service provider and the cloud service customer, this criterion is not applicable for cloud service customer data, but it is still applicable for cloud service derived data and cloud service provider data. The extent to which the criterion is applicable to the cloud service is presented in the system description.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-07.01AC",
+ "Description": "The relevant logs or summarised results are available to the cloud service customer in a self-service portal for monitoring the data backup.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-07 Security Testing",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "If the data backup of cloud service customer data is not part of the contract concluded between the cloud service provider and the cloud service customer, this criterion is not applicable for cloud service customer data, but it is still applicable for cloud service derived data and cloud service provider data. The extent to which the criterion is applicable to the cloud service is presented in the system description.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-08.01B",
+ "Description": "Restore procedures are tested regularly, at least annually. The tests include cloud service customer data, cloud service derived data and cloud service provider data in accordance with the contractual agreements.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-08 Data Backup and Recovery - Regular Testing",
+ "Type": "Basic",
+ "AboutCriteria": "The use of cloud service customer data in backup and restore procedures as described in the basic criterion is a carefully considered exception. This exception does not extend to general software development or other testing environments and the use of cloud service customer data for testing is restricted specifically to backup and restore procedures.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that they actively request information on the results of recovery tests from the cloud service provider. Customers assess the effectiveness of applied data recovery strategies and integrate insights into their own emergency plans in alignment with their business needs and security standards."
+ }
+ ],
+ "Checks": [
+ "backup_recovery_point_encrypted",
+ "backup_vaults_encrypted",
+ "backup_vaults_exist"
+ ]
+ },
+ {
+ "Id": "OPS-08.02B",
+ "Description": "The tests allow an assessment as to whether the contractual agreements as well as the specifications for the maximum tolerable downtime (Recovery Time Objective, RTO) and the maximum permissible data loss (Recovery Point Objective, RPO) are adhered to (cf. BCM-02).",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-08 Incident Response",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-08.03B",
+ "Description": "Cloud service customer data is only restored in environments that are subject to the same access restrictions as the production environment.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-08 Incident Response",
+ "Type": "Basic",
+ "AboutCriteria": "If cloud service customer data is restored in an environment with differing access restrictions, the confidentiality of the data may be affected.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "backup_recovery_point_encrypted"
+ ]
+ },
+ {
+ "Id": "OPS-08.04B",
+ "Description": "The cloud service provider thoroughly documents restore tests, including the safe disposal of restored data.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-08 Incident Response",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-08.05B",
+ "Description": "Deviations from the specifications are reported to the responsible personnel or system components so that these can promptly assess the deviations and initiate the necessary actions.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-08 Incident Response",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-08.06B",
+ "Description": "If the data backup is not part of the contract concluded between the cloud service provider and the cloud service customer, this criterion is not applicable. The cloud service provider shall present this situation transparently in the system description.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-08 Incident Response",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-08.01AC",
+ "Description": "At the customer's request, the cloud service provider informs the cloud service customer of the results of the recovery tests.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-08 Incident Response",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-08.02AC",
+ "Description": "Recovery tests are included in the cloud service provider's business continuity management.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-08 Incident Response",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-09.01B",
+ "Description": "The cloud service provider transfers cloud service provider data and, if contractually agreed upon, cloud service customer data and cloud service derived data to be backed up to a remote location or transports these on backup media to a remote location.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-09 Data Backup and Recovery - Storage",
+ "Type": "Basic",
+ "AboutCriteria": "A remote location can be e.g. another data centre of the cloud service provider.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "backup_recovery_point_encrypted",
+ "backup_vaults_encrypted"
+ ]
+ },
+ {
+ "Id": "OPS-09.02B",
+ "Description": "The data classification of the original data is applied to backups.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-09 Business Continuity",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "backup_vaults_encrypted",
+ "backup_recovery_point_encrypted",
+ "backup_vaults_exist",
+ "rds_instance_backup_enabled",
+ "efs_have_backup_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-09.03B",
+ "Description": "If the data backup is transmitted to the remote location via a network, the data backup or the transmission of the data takes place in an encrypted form that corresponds to the state-of-the-art.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-09 Business Continuity",
+ "Type": "Basic",
+ "AboutCriteria": "A remote location can be e.g. another data centre of the cloud service provider.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "backup_recovery_point_encrypted",
+ "backup_vaults_encrypted",
+ "neptune_cluster_snapshot_encrypted"
+ ]
+ },
+ {
+ "Id": "OPS-09.04B",
+ "Description": "The distance to the main site is chosen after sufficient consideration of the factors recovery times and impact of disasters on both sites.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-09 Business Continuity",
+ "Type": "Basic",
+ "AboutCriteria": "A remote location can be e.g. another data centre of the cloud service provider.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-09.05B",
+ "Description": "The physical and environmental security measures at the remote site are at the same level as at the main site.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-09 Business Continuity",
+ "Type": "Basic",
+ "AboutCriteria": "A remote location can be e.g. another data centre of the cloud service provider.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-09.06B",
+ "Description": "If the data backup is not part of the contract concluded between the cloud service provider and the cloud service customer, this criterion is not applicable. The cloud service provider shall present this situation transparently in the system description.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-09 Business Continuity",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "backup_reportplans_exist"
+ ]
+ },
+ {
+ "Id": "OPS-10.01B",
+ "Description": "The cloud service provider has established policies and instructions that govern the logging and monitoring of events on system components within its area of responsibility. These policies and instructions are documented, communicated and provided according to SP-01 with respect to the following aspects: - Definition of events that could lead to a violation of the protection goals;- Specifications for activating, stopping and pausing the various logs;- Information regarding the purpose and retention period of the logs.- Define roles, responsibilities and authorities for setting up and monitoring logging;- Definition of log data that may be transferred to cloud service customers and technical requirements of such log forwarding;- Information about timestamps in event creation;- Time synchronisation of system components with one or more approved time sources that are consistent with each other and that the cloud service provider considers to be reliable based on defined criteria. These sources can themselves be synchronised to several external reliable sources, except for isolated networks; and- Compliance with legal and regulatory frameworks.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-10 Logging and Monitoring - Concept",
+ "Type": "Basic",
+ "AboutCriteria": "Logs as referred to in the basic criterion include cloud service derived data and cloud service provider data.Legal and regulatory frameworks can define e.g. legal requirements for retention and deletion of data.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that appropriate logging and monitoring of events that may affect the security and availability of the cloud service (e.g. administrator activities, system failures, authentication checks, data deletions, etc.) takes place for those layers of the cloud service under their responsibility."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-11.01B",
+ "Description": "Policies and instructions for the secure handling of cloud service derived data and account data are documented, communicated and provided according to SP-01 with regard to the following aspects: - Cloud service derived data and account data is collected and used solely to administer and operate the cloud service, including purposes related to the implementation of security controls;- Protection in confidentiality and integrity of the logs;- As far as technically possible, anonymised cloud service derived data is used only in a way so that no conclusions can be drawn about the usage behaviour of individual users of the cloud service customer;- No commercial use beyond the aforementioned purpose to administer and operate the cloud service;- Storage for a fixed period reasonably related to the purposes of the collection;- Cloud service derived data that has been fully anonymised and cannot be traced back to individual cloud service customers may be further processed and retained, provided no contractual or legal restrictions exist, otherwise immediate deletion if the purposes of the collection are fulfilled and further storage is no longer necessary; and- Provision to cloud service customers according to contractual agreements.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-11 Logging and Monitoring Management Concept for Cloud Service Derived Data and Account Data",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that their contracts with the cloud service provider clearly outline the permissible uses of cloud service derived data. Cloud service customers verify that such data processing complies with contractual or legal restrictions and understand that the provider is obligated to delete data when it is no longer necessary for its initial purposes, unless agreed otherwise."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-11.02B",
+ "Description": "The cloud service provider lists in the contractual agreements with the cloud service customers all purposes for the collection and use of cloud service derived data that are not related to the universal requirements that apply inherently to all cloud services.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-11 Configuration Management",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-11.01AC",
+ "Description": "Personal data is automatically removed from the log data before the cloud service provider processes it, as far as technically possible. The removal is done in a way that allows the cloud service provider to continue to use the log data for the purpose for which it was collected.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-11 Configuration Management",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "route53_domains_privacy_protection_enabled",
+ "glue_development_endpoints_cloudwatch_logs_encryption_enabled",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "cloudwatch_log_group_no_secrets_in_logs"
+ ]
+ },
+ {
+ "Id": "OPS-11.02AC",
+ "Description": "Cloud service derived data, including log data, is taken into consideration in regulatory compliance assessments.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-11 Configuration Management",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "acm_certificates_transparency_logs_enabled",
+ "apigateway_restapi_logging_enabled",
+ "apigatewayv2_api_access_logging_enabled",
+ "appsync_field_level_logging_enabled",
+ "athena_workgroup_logging_enabled",
+ "awslambda_function_invoke_api_operations_cloudtrail_logging_enabled",
+ "bedrock_model_invocation_logging_enabled",
+ "bedrock_model_invocation_logs_encryption_enabled",
+ "cloudfront_distributions_logging_enabled",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_kms_encryption_enabled",
+ "cloudtrail_log_file_validation_enabled",
+ "cloudtrail_logs_s3_bucket_access_logging_enabled",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "cloudtrail_multi_region_enabled_logging_management_events",
+ "cloudtrail_s3_dataevents_read_enabled",
+ "cloudtrail_s3_dataevents_write_enabled",
+ "cloudwatch_changes_to_network_acls_alarm_configured",
+ "cloudwatch_changes_to_network_gateways_alarm_configured",
+ "cloudwatch_changes_to_vpcs_alarm_configured",
+ "cloudwatch_log_group_kms_encryption_enabled",
+ "cloudwatch_log_group_no_secrets_in_logs",
+ "cloudwatch_log_group_not_publicly_accessible",
+ "cloudwatch_log_group_retention_policy_specific_days_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_authentication_failures",
+ "cloudwatch_log_metric_filter_aws_organizations_changes",
+ "cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk",
+ "cloudwatch_log_metric_filter_for_s3_bucket_policy_changes",
+ "cloudwatch_log_metric_filter_policy_changes",
+ "cloudwatch_log_metric_filter_root_usage",
+ "cloudwatch_log_metric_filter_security_group_changes",
+ "cloudwatch_log_metric_filter_sign_in_without_mfa",
+ "cloudwatch_log_metric_filter_unauthorized_api_calls",
+ "codebuild_project_logging_enabled",
+ "codebuild_project_s3_logs_encrypted",
+ "datasync_task_logging_enabled",
+ "directoryservice_directory_log_forwarding_enabled",
+ "dms_replication_task_source_logging_enabled",
+ "dms_replication_task_target_logging_enabled",
+ "documentdb_cluster_cloudwatch_log_export",
+ "ec2_client_vpn_endpoint_connection_logging_enabled",
+ "ecs_task_definitions_logging_block_mode",
+ "ecs_task_definitions_logging_enabled",
+ "eks_control_plane_logging_all_types_enabled",
+ "elasticbeanstalk_environment_cloudwatch_logging_enabled",
+ "elb_logging_enabled",
+ "elbv2_logging_enabled",
+ "glue_data_catalogs_connection_passwords_encryption_enabled",
+ "glue_data_catalogs_metadata_encryption_enabled",
+ "glue_data_catalogs_not_publicly_accessible",
+ "glue_development_endpoints_cloudwatch_logs_encryption_enabled",
+ "glue_etl_jobs_cloudwatch_logs_encryption_enabled",
+ "glue_etl_jobs_logging_enabled",
+ "guardduty_eks_audit_log_enabled",
+ "mq_broker_logging_enabled",
+ "neptune_cluster_integration_cloudwatch_logs",
+ "networkfirewall_logging_enabled",
+ "opensearch_service_domains_audit_logging_enabled",
+ "opensearch_service_domains_cloudwatch_logging_enabled",
+ "rds_cluster_integration_cloudwatch_logs",
+ "rds_instance_integration_cloudwatch_logs",
+ "redshift_cluster_audit_logging",
+ "route53_public_hosted_zones_cloudwatch_logging_enabled",
+ "s3_bucket_server_access_logging_enabled",
+ "servicecatalog_portfolio_shared_within_organization_only",
+ "stepfunctions_statemachine_logging_enabled",
+ "vpc_flow_logs_enabled",
+ "waf_global_webacl_logging_enabled",
+ "wafv2_webacl_logging_enabled",
+ "wafv2_webacl_rule_logging_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-12.01B",
+ "Description": "The requirements for the logging and monitoring of events and for the secure handling of cloud service derived data and cloud service provider data are implemented by technically supported procedures with regard to the following restrictions: - Access only for authorised users and systems;- Retention for the specified period; and- Deletion when further retention is no longer necessary for the purpose of collection.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-12 Logging and Monitoring - Access, Storage and Deletion",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "kinesis_stream_data_retention_period",
+ "cloudtrail_multi_region_enabled_logging_management_events"
+ ]
+ },
+ {
+ "Id": "OPS-13.01B",
+ "Description": "The cloud service provider integrates relevant log data (cloud service derived data and cloud service provider data) into a Security Information and Event Management (SIEM) system to establish a seamless connection between logging, monitoring, and security incident management.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-13 Security Information and Event Management",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudtrail_cloudwatch_logging_enabled",
+ "guardduty_is_enabled",
+ "guardduty_no_high_severity_findings"
+ ]
+ },
+ {
+ "Id": "OPS-13.02B",
+ "Description": "The SIEM system can be deployed within the cloud environment or externally and shall include the following capabilities: - Standardisation of log data;- Automated analysis to identify and correlate potential security incidents;- Capabilities to detect unusual behaviour and potential threats;- Real-time alerting to inform the incident response team of critical events;- Reporting to the incident response team in case new information relevant to an event becomes available; and- Automated response mechanisms for addressing security incidents.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-13 Network Security",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "ssmincidents_enabled_with_plans",
+ "ses_identity_not_publicly_accessible",
+ "iam_support_role_created",
+ "cloudtrail_multi_region_enabled_logging_management_events",
+ "cloudtrail_cloudwatch_logging_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-13.03B",
+ "Description": "The cloud service provider protects all SIEM logs to avoid tampering and deletion.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-13 Network Security",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudtrail_kms_encryption_enabled",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "cloudwatch_log_group_no_secrets_in_logs",
+ "cloudwatch_log_group_kms_encryption_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-13.01AC",
+ "Description": "The cloud service provider validates that event detection processes operate as intended on appropriate assets as identified in the asset classification schema (cf. AM-09).",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-13 Network Security",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "s3_bucket_event_notifications_enabled",
+ "s3_bucket_object_versioning",
+ "cloudtrail_log_file_validation_enabled",
+ "cloudtrail_multi_region_enabled_logging_management_events"
+ ]
+ },
+ {
+ "Id": "OPS-13.02AC",
+ "Description": "Any deviations identified during validation are addressed through timely and appropriate remediation measures.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-13 Network Security",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-13.03AC",
+ "Description": "Issued events which can lead to security incidents trigger incident handling activities by the cloud service provider without undue delay.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-13 Network Security",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "ssmincidents_enabled_with_plans",
+ "s3_bucket_event_notifications_enabled",
+ "eventbridge_bus_cross_account_access",
+ "cloudtrail_multi_region_enabled_logging_management_events",
+ "iam_support_role_created",
+ "cloudwatch_alarm_actions_alarm_state_configured",
+ "cloudwatch_alarm_actions_enabled",
+ "cloudwatch_changes_to_network_acls_alarm_configured",
+ "cloudwatch_changes_to_network_gateways_alarm_configured",
+ "cloudwatch_changes_to_network_route_tables_alarm_configured",
+ "cloudwatch_changes_to_vpcs_alarm_configured",
+ "cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-14.01B",
+ "Description": "The cloud service provider retains the generated log data and keeps it in an appropriate, unchangeable and aggregated form, regardless of the source of such data, so that a central, authorised evaluation of the data is possible.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-14 Logging and Monitoring - Storage of the Logging Data",
+ "Type": "Basic",
+ "AboutCriteria": "Log' refers to a document used to record and describe or denote selected items identified during execution of a process or activity. Log data includes both cloud service derived data and cloud service provider data.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that they actively request the customer-specific portion of the cloud service derived data that consists of log data, if required."
+ }
+ ],
+ "Checks": [
+ "cloudwatch_log_group_retention_policy_specific_days_enabled",
+ "kinesis_stream_data_retention_period",
+ "neptune_cluster_backup_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-14.02B",
+ "Description": "Log data is deleted if it is no longer required for the purpose for which it was collected.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-14 Data Protection",
+ "Type": "Basic",
+ "AboutCriteria": "Log' refers to a document used to record and describe or denote selected items identified during execution of a process or activity. Log data includes both cloud service derived data and cloud service provider data.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudwatch_log_group_retention_policy_specific_days_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-14.03B",
+ "Description": "Between logging servers and the assets to be logged, authentication measures are in place to protect the integrity and authenticity of the information transmitted and stored. The transfer uses state-of-the-art encryption or a dedicated administration network (out-of-band management).",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-14 Data Protection",
+ "Type": "Basic",
+ "AboutCriteria": "Log' refers to a document used to record and describe or denote selected items identified during execution of a process or activity. Log data includes both cloud service derived data and cloud service provider data.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudwatch_log_group_kms_encryption_enabled",
+ "dms_replication_task_source_logging_enabled",
+ "datasync_task_logging_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-14.01AC",
+ "Description": "Depending on the protection requirements of the cloud service provider and the technical feasibility, log data and cloud service customer data is logically or physically separated.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-14 Data Protection",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Log' refers to a document used to record and describe or denote selected items identified during execution of a process or activity. Log data includes both cloud service derived data and cloud service provider data.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-15.01B",
+ "Description": "The log data generated (cloud service derived data and cloud service provider data) allows an unambiguous identification of user accesses at tenant level to support (forensic) analysis in the event of an incident.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-15 Logging and Monitoring - Accountability",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that unique user IDs are assigned which allow a corresponding analysis in the event of an incident."
+ }
+ ],
+ "Checks": [
+ "acm_certificates_transparency_logs_enabled",
+ "apigateway_restapi_logging_enabled",
+ "apigatewayv2_api_access_logging_enabled",
+ "appsync_field_level_logging_enabled",
+ "athena_workgroup_logging_enabled",
+ "awslambda_function_invoke_api_operations_cloudtrail_logging_enabled",
+ "bedrock_model_invocation_logging_enabled",
+ "cloudfront_distributions_logging_enabled",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_logs_s3_bucket_access_logging_enabled",
+ "cloudtrail_multi_region_enabled_logging_management_events",
+ "cloudtrail_s3_dataevents_read_enabled",
+ "cloudtrail_s3_dataevents_write_enabled",
+ "codebuild_project_logging_enabled",
+ "datasync_task_logging_enabled",
+ "dms_replication_task_source_logging_enabled",
+ "dms_replication_task_target_logging_enabled",
+ "ec2_client_vpn_endpoint_connection_logging_enabled",
+ "ecs_task_definitions_logging_block_mode",
+ "ecs_task_definitions_logging_enabled",
+ "eks_control_plane_logging_all_types_enabled",
+ "elasticbeanstalk_environment_cloudwatch_logging_enabled",
+ "elb_logging_enabled",
+ "elbv2_logging_enabled",
+ "glue_etl_jobs_logging_enabled",
+ "mq_broker_logging_enabled",
+ "networkfirewall_logging_enabled",
+ "opensearch_service_domains_audit_logging_enabled",
+ "opensearch_service_domains_cloudwatch_logging_enabled",
+ "redshift_cluster_audit_logging",
+ "route53_public_hosted_zones_cloudwatch_logging_enabled",
+ "s3_bucket_server_access_logging_enabled",
+ "stepfunctions_statemachine_logging_enabled",
+ "waf_global_webacl_logging_enabled",
+ "wafv2_webacl_logging_enabled",
+ "wafv2_webacl_rule_logging_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-15.02B",
+ "Description": "Each logged event shall include a time/date stamp to ensure accurate and traceable records.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-15 Access Control",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "acm_certificates_transparency_logs_enabled",
+ "apigateway_restapi_logging_enabled",
+ "apigatewayv2_api_access_logging_enabled",
+ "appsync_field_level_logging_enabled",
+ "athena_workgroup_logging_enabled",
+ "awslambda_function_invoke_api_operations_cloudtrail_logging_enabled",
+ "bedrock_model_invocation_logging_enabled",
+ "cloudfront_distributions_logging_enabled",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_logs_s3_bucket_access_logging_enabled",
+ "cloudtrail_multi_region_enabled_logging_management_events",
+ "cloudtrail_s3_dataevents_read_enabled",
+ "cloudtrail_s3_dataevents_write_enabled",
+ "codebuild_project_logging_enabled",
+ "datasync_task_logging_enabled",
+ "dms_replication_task_source_logging_enabled",
+ "dms_replication_task_target_logging_enabled",
+ "ec2_client_vpn_endpoint_connection_logging_enabled",
+ "ecs_task_definitions_logging_block_mode",
+ "ecs_task_definitions_logging_enabled",
+ "eks_control_plane_logging_all_types_enabled",
+ "elasticbeanstalk_environment_cloudwatch_logging_enabled",
+ "elb_logging_enabled",
+ "elbv2_logging_enabled",
+ "glue_etl_jobs_logging_enabled",
+ "mq_broker_logging_enabled",
+ "networkfirewall_logging_enabled",
+ "opensearch_service_domains_audit_logging_enabled",
+ "opensearch_service_domains_cloudwatch_logging_enabled",
+ "redshift_cluster_audit_logging",
+ "route53_public_hosted_zones_cloudwatch_logging_enabled",
+ "s3_bucket_server_access_logging_enabled",
+ "stepfunctions_statemachine_logging_enabled",
+ "waf_global_webacl_logging_enabled",
+ "wafv2_webacl_logging_enabled",
+ "wafv2_webacl_rule_logging_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-15.03B",
+ "Description": "The cloud service provider is able to support forensic analysis of incidents and to retain a chain of evidence. This implies that the cloud service provider capture the state of infrastructure components and network communication during security events.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-15 Access Control",
+ "Type": "Basic",
+ "AboutCriteria": "Infrastructure components within the meaning of this criterion are e.g. fabric controllers, network components and virtualisation servers.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudtrail_multi_region_enabled",
+ "acm_certificates_transparency_logs_enabled",
+ "apigateway_restapi_logging_enabled",
+ "apigatewayv2_api_access_logging_enabled",
+ "appsync_field_level_logging_enabled",
+ "athena_workgroup_logging_enabled",
+ "awslambda_function_invoke_api_operations_cloudtrail_logging_enabled",
+ "bedrock_model_invocation_logging_enabled",
+ "cloudfront_distributions_logging_enabled",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_logs_s3_bucket_access_logging_enabled",
+ "cloudtrail_multi_region_enabled_logging_management_events",
+ "cloudtrail_s3_dataevents_read_enabled",
+ "cloudtrail_s3_dataevents_write_enabled",
+ "codebuild_project_logging_enabled",
+ "datasync_task_logging_enabled",
+ "dms_replication_task_source_logging_enabled",
+ "dms_replication_task_target_logging_enabled",
+ "ec2_client_vpn_endpoint_connection_logging_enabled",
+ "ecs_task_definitions_logging_block_mode",
+ "ecs_task_definitions_logging_enabled",
+ "eks_control_plane_logging_all_types_enabled",
+ "elasticbeanstalk_environment_cloudwatch_logging_enabled",
+ "elb_logging_enabled",
+ "elbv2_logging_enabled",
+ "glue_etl_jobs_logging_enabled",
+ "mq_broker_logging_enabled",
+ "networkfirewall_logging_enabled",
+ "opensearch_service_domains_audit_logging_enabled",
+ "opensearch_service_domains_cloudwatch_logging_enabled",
+ "redshift_cluster_audit_logging",
+ "route53_public_hosted_zones_cloudwatch_logging_enabled",
+ "s3_bucket_server_access_logging_enabled",
+ "stepfunctions_statemachine_logging_enabled",
+ "waf_global_webacl_logging_enabled",
+ "wafv2_webacl_logging_enabled",
+ "wafv2_webacl_rule_logging_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-15.01AC",
+ "Description": "On request of the cloud service customer, the cloud service provider provides the logs relating to the cloud service customer in an appropriate form and in a timely manner so that the cloud service customer can investigate any incidents relating to them.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-15 Access Control",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "The additional criterion also refers to logs of system components under responsibility of the cloud service provider, to which the cloud service customer generally has no access, insofar as these logs are relevant for the analysis of security incidents and for identifying access to cloud service customer service data (cf. IAM-07 and INQ-04). For logging of system components under responsibility of the cloud service provider cf. PSS-04.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "acm_certificates_transparency_logs_enabled",
+ "acm_certificates_transparency_logs_enabled",
+ "apigateway_restapi_logging_enabled",
+ "apigatewayv2_api_access_logging_enabled",
+ "appsync_field_level_logging_enabled",
+ "athena_workgroup_logging_enabled",
+ "awslambda_function_invoke_api_operations_cloudtrail_logging_enabled",
+ "bedrock_model_invocation_logging_enabled",
+ "cloudfront_distributions_logging_enabled",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_logs_s3_bucket_access_logging_enabled",
+ "cloudtrail_multi_region_enabled_logging_management_events",
+ "cloudtrail_s3_dataevents_read_enabled",
+ "cloudtrail_s3_dataevents_write_enabled",
+ "codebuild_project_logging_enabled",
+ "datasync_task_logging_enabled",
+ "dms_replication_task_source_logging_enabled",
+ "dms_replication_task_target_logging_enabled",
+ "ec2_client_vpn_endpoint_connection_logging_enabled",
+ "ecs_task_definitions_logging_block_mode",
+ "ecs_task_definitions_logging_enabled",
+ "eks_control_plane_logging_all_types_enabled",
+ "elasticbeanstalk_environment_cloudwatch_logging_enabled",
+ "elb_logging_enabled",
+ "elbv2_logging_enabled",
+ "glue_etl_jobs_logging_enabled",
+ "mq_broker_logging_enabled",
+ "networkfirewall_logging_enabled",
+ "opensearch_service_domains_audit_logging_enabled",
+ "opensearch_service_domains_cloudwatch_logging_enabled",
+ "redshift_cluster_audit_logging",
+ "route53_public_hosted_zones_cloudwatch_logging_enabled",
+ "s3_bucket_server_access_logging_enabled",
+ "stepfunctions_statemachine_logging_enabled",
+ "waf_global_webacl_logging_enabled",
+ "wafv2_webacl_logging_enabled",
+ "wafv2_webacl_rule_logging_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-15.02AC",
+ "Description": "Such logs are collected in a way that allows their use as credible evidence. This includes: - Records are complete and have not been tampered with in any way;- Logging systems are clock synchronised, logs include accurate timestamps;- Copies of electronic evidence are provably identical to the originals; and- Any information system from which evidence has been gathered was operating correctly at the time the evidence was recorded.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-15 Access Control",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudtrail_log_file_validation_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-16.01B",
+ "Description": "Access to system components for logging and monitoring in the cloud service provider's area of responsibility is restricted to authorised users and requires authentication with two or more factors.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-16 Logging and Monitoring - Configuration",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "apigatewayv2_api_access_logging_enabled",
+ "iam_user_mfa_enabled_console_access",
+ "ec2_client_vpn_endpoint_connection_logging_enabled",
+ "cloudtrail_bucket_requires_mfa_delete",
+ "cloudwatch_log_metric_filter_sign_in_without_mfa",
+ "cognito_user_pool_mfa_enabled",
+ "directoryservice_supported_mfa_radius_enabled",
+ "iam_administrator_access_with_mfa",
+ "iam_root_hardware_mfa_enabled",
+ "iam_root_mfa_enabled",
+ "iam_user_hardware_mfa_enabled",
+ "iam_user_mfa_enabled_console_access",
+ "s3_bucket_no_mfa_delete"
+ ]
+ },
+ {
+ "Id": "OPS-16.02B",
+ "Description": "Changes to the configuration are made in accordance with the applicable policies (cf. DEV-03).",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-16 Security Monitoring",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-17.01B",
+ "Description": "The cloud service provider monitors the availability of the system components for logging and monitoring in its area of responsibility.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-17 Logging and Monitoring - Availability of the Monitoring Software",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-17.02B",
+ "Description": "Failures are automatically and promptly reported to the cloud service provider's responsible departments so that these can assess the failures and take required action.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-17 Security Operations",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_support_role_created"
+ ]
+ },
+ {
+ "Id": "OPS-17.01AC",
+ "Description": "The system components for logging and monitoring are designed in such a way that the overall functionality is not restricted if individual components fail.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-17 Security Operations",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-17.02AC",
+ "Description": "The cloud service provider defines, documents and implements measures to protect the integrity, availability and confidentiality of the logs and the associated infrastructure.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-17 Security Operations",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "bedrock_model_invocation_logs_encryption_enabled",
+ "codebuild_project_s3_logs_encrypted",
+ "glue_development_endpoints_cloudwatch_logs_encryption_enabled",
+ "glue_etl_jobs_cloudwatch_logs_encryption_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-18.01B",
+ "Description": "Guidelines and instructions with technical and organisational measures are documented, communicated and provided in accordance with SP-01 to ensure the timely identification and addressing of vulnerabilities in the system components used to provide the cloud service. These guidelines and instructions contain specifications regarding the following aspects: - Regular (proactive) identification of vulnerabilities through suitable measures, including vulnerability scans and penetration tests, considering typical vulnerability classes and Common Weaknesses (CWEs);- Assessing the severity of identified vulnerabilities using the Common Vulnerability Scoring System (CVSS);- Prioritising and implementing measures considering existing standards for timely remediation and/or mitigation of identified vulnerabilities based on severity according to defined timeframes and with reference to commonly used scoring systems like the Exploit Prediction Scoring System (EPSS) and the Stakeholder-Specific Vulnerability Categorisation (SSVC);- Deployment of Security Patches;- Handling system components for which no measures for timely remediation or mitigation of vulnerabilities are initiated based on a risk assessment;- Interfaces to incident management in case vulnerabilites become incidents;- If AI-based tools are used for performing vulnerability scans or penetration tests, requirements for the comprehensible (traceable, transparent) documentation on the use of such tools and that these tools shall be used to support the cloud service provider's subject matter experts, not to replace them; and- Providing information on the configuration of system components and cloud services, the existing vulnerabilities, and the available patches and/or mitigation measures, using widely adopted, preferably automated, formats.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-18 Managing Vulnerabilities - Concept",
+ "Type": "Basic",
+ "AboutCriteria": "Suitable measures for the identification of vulnerabilities include implementing RFC 9116 in conjunction with a Coordinated Vulnerability Disclosure (CVD) Policy according to established guidelines like ISO/IEC TR 5895:2022 and ISO/IEC 29147:2018 and community standards like Google's Project Zero Vulnerability Disclosure Policy. The Common Vulnerability Scoring System (CVSS) is a technical standard that can be used for assessing the severity of identified vulnerabilities. Scores are calculated based on a formula with several metrics that approximate ease and impact of an exploit. In CVSS version 4.0 the scores can be mapped to qualitative ratings as follows: - Low: 0.1 - 3.9;- Medium: 4.0 - 6.9;- High: 7.0 - 8.9; and- Critical: 9.0 - 10.0. Widely adopted formats on the configuration of system components and cloud services, the existing vulnerabilities, and the available patches and/or mitigation measures include: - Software Bill of Materials (SBOM),- Common Vulnerabilities and Exposures (CVE) or European Vulnerability Database (EUVD),- Vulnerability, Exploitability eXchange (VEX), and- Common Security Advisory Frameworks (CSAF). ISO/IEC 30111:2019 provides requirements and recommendations for prioritising and implementing measures to ensure the timely remediation or mitigation of identified vulnerabilities.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that they check system components in their area of responsibility for vulnerabilities on a regular basis and mitigate these with appropriate measures."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-18.02B",
+ "Description": "The cloud service provider mandates in its policies and procedures that 'critical' vulnerabilities are to be timely engaged with after identification of the critical vulnerability, even outside the working day.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-18 Security Governance",
+ "Type": "Basic",
+ "AboutCriteria": "ISO/IEC 30111:2019 provides requirements and recommendations for prioritising and implementing measures to ensure the timely remediation or mitigation of identified vulnerabilities.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "guardduty_no_high_severity_findings"
+ ]
+ },
+ {
+ "Id": "OPS-18.03B",
+ "Description": "The cloud service provider also mandates in its policies and procedures that for 'high' vulnerabilities, engagement is to begin within one working day after identification, with regular follow-up of the vulnerability until it has been remediated.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-18 Security Governance",
+ "Type": "Basic",
+ "AboutCriteria": "ISO/IEC 30111:2019 provides requirements and recommendations for prioritising and implementing measures to ensure the timely remediation or mitigation of identified vulnerabilities.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "guardduty_no_high_severity_findings"
+ ]
+ },
+ {
+ "Id": "OPS-18.04B",
+ "Description": "Based on a risk-assessment (cf. OIS-07), the cloud service provider can decide not to remediate or mitigate identified vulnerabilities. Such a risk-assessment and the compensating or mitigating measures are regularily reviewed.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-18 Security Governance",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-19.01B",
+ "Description": "Guidelines and instructions with technical and organisational measures are documented, communicated, and provided in accordance with SP-01 to ensure the timely identification and management of incidents and crashes in the system components used to provide the cloud service or of parts or the whole cloud service. These guidelines and instructions include specifications regarding the following aspects: - Classification and prioritisation of incidents and crashes;- Incident models for addressing known issues;- Escalation rules and procedures, including criteria for triggering Security Incident Management (SIM) processes in accordance with SIM-02 or internal incident management procedures;- Knowledge sources for incidents and crashes;- Criteria for determining when crashes are classified as incidents and when they trigger incident management processes;- Mechanisms ensuring that access to crash files is restricted to authorised personnel only;- Safeguards to prevent exposure of sensitive, personal, or confidential data within crash files;- Encryption of crash files for storage and during transmission;- Access management, logging, and review processes for access logs of crash files; and- Retention periods and secure deletion processes for crash files once no longer needed.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-19 Managing Incidents and Crashes - Concept",
+ "Type": "Basic",
+ "AboutCriteria": "A crash is a sudden and complete failure of a system or system component. A crash file is the dump of a system's execution state, usually including contents of its storage or registers at the time of the crash (e.g. memory dump).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-20.01B",
+ "Description": "The cloud service provider identifies, records, classifies, and prioritises incidents according to the policies and instructions.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-20 Managing Incidents - Implementation",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-21.01B",
+ "Description": "Crashes of system components, parts of or the whole cloud service under the responsibility of the cloud service provider are identified, recorded, and addressed according to the policies and instructions.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-21 Managing Crashes - Implementation",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-22.01B",
+ "Description": "The cloud service provider performs penetration tests by qualified internal personnel or external penetration testers at least once a year and in case of significant changes to the cloud service.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-22 Managing Vulnerabilities, Malfunctions and Errors - Penetration Tests",
+ "Type": "Basic",
+ "AboutCriteria": "See section '1.2 Definitions' for the term penetration test.There are three types of penetration tests: - Black-box testing: Testing performed without prior knowledge of the internal structure/design/implementation of the object being tested;- Grey-box testing: Testing performed with partial knowledge of the internal structure/design/implementation of the object being tested; and- White-box testing: Testing performed with knowledge of the internal structure/design/implementation of the object being tested. It can further be distinguished between - Pre-launch penetration testing: Testing already performed as part of the software development process during the test phase of the cloud service (cf. DEV-07); and- Post-launch penetration testing: Testing carried out during the regular operations of the cloud service. The qualification and competence of personnel for penetration tests can be verified based on professional certifications, e.g. as BSI-certified IS penetration tester or CREST-certified Cyber Security Professional.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-22.01AS",
+ "Description": "The cloud service provider performs penetration tests at least every six months and in case of significant changes to the cloud service by independent external penetration testers. The external penetration testers are engaged only if the personnel supposed to perform the test verifiably meets the cloud service provider's qualification and competence requirements. Internal personnel for penetration tests may support the external personnel.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-22 Security Compliance",
+ "Type": "Additional (Sharpening)",
+ "AboutCriteria": "See section '1.2 Definitions' for the term penetration test.There are three types of penetration tests: - Black-box testing: Testing performed without prior knowledge of the internal structure/design/implementation of the object being tested;- Grey-box testing: Testing performed with partial knowledge of the internal structure/design/implementation of the object being tested; and- White-box testing: Testing performed with knowledge of the internal structure/design/implementation of the object being tested. It can further be distinguished between - Pre-launch penetration testing: Testing already performed as part of the software development process during the test phase of the cloud service (cf. DEV-07); and- Post-launch penetration testing: Testing carried out during the regular operations of the cloud service. The qualification and competence of personnel for penetration tests can be verified based on professional certifications, e.g. as BSI-certified IS penetration tester or CREST-certified Cyber Security Professional.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-22.02B",
+ "Description": "Penetration tests are carried out in accordance with a documented concept for penetration tests that outlines the types of penetration tests to be performed and the requirements for the qualification and competence of the personnel to perform such tests.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-22 Security Compliance",
+ "Type": "Basic",
+ "AboutCriteria": "See section '1.2 Definitions' for the term penetration test.There are three types of penetration tests: - Black-box testing: Testing performed without prior knowledge of the internal structure/design/implementation of the object being tested;- Grey-box testing: Testing performed with partial knowledge of the internal structure/design/implementation of the object being tested; and- White-box testing: Testing performed with knowledge of the internal structure/design/implementation of the object being tested. It can further be distinguished between - Pre-launch penetration testing: Testing already performed as part of the software development process during the test phase of the cloud service (cf. DEV-07); and- Post-launch penetration testing: Testing carried out during the regular operations of the cloud service.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-22.02AS",
+ "Description": "Pre-launch and post-launch penetration tests are performed in accordance with a documented concept for penetration tests that outlines the types of penetration tests to be performed and the requirements for the qualification and competence of the personnel to perform such tests.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-22 Security Compliance",
+ "Type": "Additional (Sharpening)",
+ "AboutCriteria": "See section '1.2 Definitions' for the term penetration test.There are three types of penetration tests: - Black-box testing: Testing performed without prior knowledge of the internal structure/design/implementation of the object being tested;- Grey-box testing: Testing performed with partial knowledge of the internal structure/design/implementation of the object being tested; and- White-box testing: Testing performed with knowledge of the internal structure/design/implementation of the object being tested. It can further be distinguished between - Pre-launch penetration testing: Testing already performed as part of the software development process during the test phase of the cloud service (cf. DEV-07); and- Post-launch penetration testing: Testing carried out during the regular operations of the cloud service.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-22.03B",
+ "Description": "Penetration tests target the system components relevant to the provision of the cloud service in the area of responsibility of the cloud service provider. System components to be targeted are identified in a risk assessment.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-22 Security Compliance",
+ "Type": "Basic",
+ "AboutCriteria": "See section '1.2 Definitions' for the term penetration test.There are three types of penetration tests: - Black-box testing: Testing performed without prior knowledge of the internal structure/design/implementation of the object being tested;- Grey-box testing: Testing performed with partial knowledge of the internal structure/design/implementation of the object being tested; and- White-box testing: Testing performed with knowledge of the internal structure/design/implementation of the object being tested. It can further be distinguished between - Pre-launch penetration testing: Testing already performed as part of the software development process during the test phase of the cloud service (cf. DEV-07); and- Post-launch penetration testing: Testing carried out during the regular operations of the cloud service. System components relevant to the provision of the cloud service in the area of responsibility of the cloud service provider can comprise such system components that are exposed at the external perimeter of the network or components accessible only from inside the network.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-22.04B",
+ "Description": "Penetration tests are carried out in accordance with test plans that cover all relevant system components and specify which system components are to be tested.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-22 Security Compliance",
+ "Type": "Basic",
+ "AboutCriteria": "See section '1.2 Definitions' for the term penetration test.There are three types of penetration tests: - Black-box testing: Testing performed without prior knowledge of the internal structure/design/implementation of the object being tested;- Grey-box testing: Testing performed with partial knowledge of the internal structure/design/implementation of the object being tested; and- White-box testing: Testing performed with knowledge of the internal structure/design/implementation of the object being tested. It can further be distinguished between - Pre-launch penetration testing: Testing already performed as part of the software development process during the test phase of the cloud service (cf. DEV-07); and- Post-launch penetration testing: Testing carried out during the regular operations of the cloud service.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-22.05B",
+ "Description": "If penetration tests follow multi-annual test plans, all relevant system components are subjected to at least one penetration test within a maximum period of three years.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-22 Security Compliance",
+ "Type": "Basic",
+ "AboutCriteria": "See section '1.2 Definitions' for the term penetration test.There are three types of penetration tests: - Black-box testing: Testing performed without prior knowledge of the internal structure/design/implementation of the object being tested;- Grey-box testing: Testing performed with partial knowledge of the internal structure/design/implementation of the object being tested; and- White-box testing: Testing performed with knowledge of the internal structure/design/implementation of the object being tested. It can further be distinguished between - Pre-launch penetration testing: Testing already performed as part of the software development process during the test phase of the cloud service (cf. DEV-07); and- Post-launch penetration testing: Testing carried out during the regular operations of the cloud service. System components relevant to the provision of the cloud service in the area of responsibility of the cloud service provider can comprise such system components that are exposed at the external perimeter of the network or components accessible only from inside the network.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-22.06B",
+ "Description": "The cloud service provider assesses the severity of identified vulnerabilities in accordance with the Common Vulnerability Scoring System (CVSS), in the latest version valid at the time of the execution of the control.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-22 Security Compliance",
+ "Type": "Basic",
+ "AboutCriteria": "See section '1.2 Definitions' for the term penetration test.There are three types of penetration tests: - Black-box testing: Testing performed without prior knowledge of the internal structure/design/implementation of the object being tested;- Grey-box testing: Testing performed with partial knowledge of the internal structure/design/implementation of the object being tested; and- White-box testing: Testing performed with knowledge of the internal structure/design/implementation of the object being tested. It can further be distinguished between - Pre-launch penetration testing: Testing already performed as part of the software development process during the test phase of the cloud service (cf. DEV-07); and- Post-launch penetration testing: Testing carried out during the regular operations of the cloud service.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-22.07B",
+ "Description": "The cloud service provider discloses identified vulnerabilities in the online register for known vulnerabilities in accordance with criterion PSS-03.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-22 Security Compliance",
+ "Type": "Basic",
+ "AboutCriteria": "See section '1.2 Definitions' for the term penetration test.There are three types of penetration tests: - Black-box testing: Testing performed without prior knowledge of the internal structure/design/implementation of the object being tested;- Grey-box testing: Testing performed with partial knowledge of the internal structure/design/implementation of the object being tested; and- White-box testing: Testing performed with knowledge of the internal structure/design/implementation of the object being tested. It can further be distinguished between - Pre-launch penetration testing: Testing already performed as part of the software development process during the test phase of the cloud service (cf. DEV-07); and- Post-launch penetration testing: Testing carried out during the regular operations of the cloud service.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-22.08B",
+ "Description": "Actions for remediation or mitigation are taken in accordance with the time frames as defined in the concept for managing vulnerabilities (cf. OPS-18).",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-22 Security Compliance",
+ "Type": "Basic",
+ "AboutCriteria": "See section '1.2 Definitions' for the term penetration test.There are three types of penetration tests: - Black-box testing: Testing performed without prior knowledge of the internal structure/design/implementation of the object being tested;- Grey-box testing: Testing performed with partial knowledge of the internal structure/design/implementation of the object being tested; and- White-box testing: Testing performed with knowledge of the internal structure/design/implementation of the object being tested. It can further be distinguished between - Pre-launch penetration testing: Testing already performed as part of the software development process during the test phase of the cloud service (cf. DEV-07); and- Post-launch penetration testing: Testing carried out during the regular operations of the cloud service.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "ssmincidents_enabled_with_plans"
+ ]
+ },
+ {
+ "Id": "OPS-22.09B",
+ "Description": "The cloud service provider performs a root cause analysis on the vulnerabilities discovered through penetration testing in order to assess to which extent similar vulnerabilities may be present in the cloud service. The cloud service provider correlates the possible exploits of discovered vulnerabilities with previous information security incidents to identify if the vulnerability may have been exploited before its discovery.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-22 Security Compliance",
+ "Type": "Basic",
+ "AboutCriteria": "See section '1.2 Definitions' for the term penetration test.There are three types of penetration tests: - Black-box testing: Testing performed without prior knowledge of the internal structure/design/implementation of the object being tested;- Grey-box testing: Testing performed with partial knowledge of the internal structure/design/implementation of the object being tested; and- White-box testing: Testing performed with knowledge of the internal structure/design/implementation of the object being tested. It can further be distinguished between - Pre-launch penetration testing: Testing already performed as part of the software development process during the test phase of the cloud service (cf. DEV-07); and- Post-launch penetration testing: Testing carried out during the regular operations of the cloud service.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-22.01AC",
+ "Description": "Penetration tests are performed based on reviews of the architecture and configuration of the system components, and of the cloud service provider's source code.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-22 Security Compliance",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "See section '1.2 Definitions' for the term penetration test.There are three types of penetration tests: - Black-box testing: Testing performed without prior knowledge of the internal structure/design/implementation of the object being tested;- Grey-box testing: Testing performed with partial knowledge of the internal structure/design/implementation of the object being tested; and- White-box testing: Testing performed with knowledge of the internal structure/design/implementation of the object being tested. It can further be distinguished between - Pre-launch penetration testing: Testing already performed as part of the software development process during the test phase of the cloud service (cf. DEV-07); and- Post-launch penetration testing: Testing carried out during the regular operations of the cloud service.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-22.02AC",
+ "Description": "The cloud service provider plans penetration testing in a multi-annual work programme.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-22 Security Compliance",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "See section '1.2 Definitions' for the term penetration test.There are three types of penetration tests: - Black-box testing: Testing performed without prior knowledge of the internal structure/design/implementation of the object being tested;- Grey-box testing: Testing performed with partial knowledge of the internal structure/design/implementation of the object being tested; and- White-box testing: Testing performed with knowledge of the internal structure/design/implementation of the object being tested. It can further be distinguished between - Pre-launch penetration testing: Testing already performed as part of the software development process during the test phase of the cloud service (cf. DEV-07); and- Post-launch penetration testing: Testing carried out during the regular operations of the cloud service.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-22.03AC",
+ "Description": "The cloud service provider reviews the performance of penetration tests on system components at least annually, and in case of significant changes to the cloud service.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-22 Security Compliance",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "See section '1.2 Definitions' for the term penetration test.There are three types of penetration tests: - Black-box testing: Testing performed without prior knowledge of the internal structure/design/implementation of the object being tested;- Grey-box testing: Testing performed with partial knowledge of the internal structure/design/implementation of the object being tested; and- White-box testing: Testing performed with knowledge of the internal structure/design/implementation of the object being tested. It can further be distinguished between - Pre-launch penetration testing: Testing already performed as part of the software development process during the test phase of the cloud service (cf. DEV-07); and- Post-launch penetration testing: Testing carried out during the regular operations of the cloud service.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-23.01B",
+ "Description": "The cloud service provider regularly measures, analyses and assesses the procedures with which vulnerabilities and incidents are handled to verify their continued suitability, appropriateness and effectiveness.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-23 Managing Vulnerabilities, Malfunctions and Errors - Measurements, Analyses and Assessments of Procedures",
+ "Type": "Basic",
+ "AboutCriteria": "The assessment of the suitability, appropriateness and effectiveness of procedures for managing vulnerabilities and incidents may be based on the following information: 1. Regular reporting of KPIs that are volume, time-based or resolution/quality-based, e.g.a. for vulnerabilities:- Mean Time to Detect (MTTD, average time it takes to discover a vulnerability from its disclosure or creation);- Mean Time to Remediate (MTTR, average time it takes to fix or patch a vulnerability after it has been detected);- Number of open vulnerabilities at each severity level; and- Percentage of vulnerabilities that have been patched within a set period.b. for incidents:- Number of incidents reported over a set period and how this evolved over the time;- Average response and resolution time;- Percentage of incidents resolved within the agreed-upon service level agreement; and- Percentage of incidents resolved during the first attempt for resolution.2. Customer complaints or the results of customer surveys about their satisfaction with the procedures; and3. Results of internal or external audits.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "guardduty_centrally_managed",
+ "guardduty_ec2_malware_protection_enabled",
+ "guardduty_eks_audit_log_enabled",
+ "guardduty_eks_runtime_monitoring_enabled",
+ "guardduty_is_enabled",
+ "guardduty_lambda_protection_enabled",
+ "guardduty_no_high_severity_findings",
+ "guardduty_rds_protection_enabled",
+ "guardduty_s3_protection_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-23.02B",
+ "Description": "Results are evaluated at least quarterly in a documented form by responsible individuals or groups of the cloud service provider to initiate continuous improvement actions and to verify their effectiveness.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-23 Security Training",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-24.01B",
+ "Description": "The cloud service provider periodically informs the cloud service customer on the status of incidents affecting the cloud service customer, or, where appropriate and necessary, involve the customer in the resolution, in a manner consistent with the contractual agreements.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-24 Involvement of Cloud Service Customers in the Event of Incidents",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that they receive notifications from the cloud service provider regarding incidents that affect them, and that these notifications are forwarded in a timely manner to the department responsible for processing them so that appropriate action can be taken."
+ }
+ ],
+ "Checks": [
+ "iam_support_role_created"
+ ]
+ },
+ {
+ "Id": "OPS-24.02B",
+ "Description": "As soon as an incident has been resolved from the cloud service provider's perspective, the cloud service customer is informed about the actions taken according to the contractual agreements.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-24 Security Awareness",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_support_role_created"
+ ]
+ },
+ {
+ "Id": "OPS-24.03B",
+ "Description": "Capacity bottlenecks are to be communicated to cloud service customers in a similar manner.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-24 Security Awareness",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-24.01AC",
+ "Description": "The cloud service provider defines and documents procedures in contractual agreements with cloud service customers that specify the involvement of the customer in confirming, within a specified time period, that a resolution has effectively addressed the root cause of an incident.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-24 Security Awareness",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-25.01B",
+ "Description": "System components in the area of responsibility of the cloud service provider for the provision of the cloud service are subject to vulnerability scans at least once a month in accordance with the policies for handling vulnerabilities (cf. OPS-18). These vulnerability scans include a comparison of the Software Bill of Materials (SBOM) data against up-to-date vulnerability databases (e.g., CVE, EUVD, etc.) to identify known vulnerabilities.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-25 Managing Vulnerabilities, Malfunctions and Errors - Vulnerability Scans",
+ "Type": "Basic",
+ "AboutCriteria": "In contrast to penetration tests (cf. OPS-22), which are carried out manually and according to an individual scheme, the check for open vulnerabilities is performed automatically, using so-called vulnerability scanners.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that system components under their responsibility are regularly checked for vulnerabilities and to mitigate these by appropriate measures. If cloud service customers operate virtual machines or containers with the cloud service, this also includes performing vulnerability scans to ensure that secure images (so-called golden images) are used."
+ }
+ ],
+ "Checks": [
+ "ec2_instance_account_imdsv2_enabled",
+ "ecr_repositories_scan_vulnerabilities_in_latest_image",
+ "s3_bucket_shadow_resource_vulnerability"
+ ]
+ },
+ {
+ "Id": "OPS-25.02B",
+ "Description": "The cloud service provider assesses the severity of vulnerabilities in accordance with defined criteria.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-25 Security Documentation",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-25.01AS",
+ "Description": "The cloud service provider assesses the severity of vulnerabilities using the latest version of the Common Vulnerability Scoring System (CVSS) valid at the time of the execution of the control.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-25 Security Documentation",
+ "Type": "Additional (Sharpening)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-25.03B",
+ "Description": "Measures for timely remediation or mitigation are initiated within defined time windows.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-25 Security Documentation",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-25.01AC",
+ "Description": "Time frames for the initiation of remediation or mitigation efforts after a vulnerability is identified are defined and monitored according to a risk-based classification framework. This framework incorporates, but is not limited to, the CVSS severity level of vulnerabilities.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-25 Security Documentation",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "An example of a framework for risk-based classification and definition of timeframes can be: - Critical (CVSS = 9.0 - 10.0): 3 hour- High (CVSS = 7.0 - 8.9): 8 hours- Medium (CVSS = 4.0 - 6.9): 5 days- Low (CVSS = 0.1 - 3.9): 1 month",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-26.01B",
+ "Description": "System components in the production environment used to provide the cloud service under the cloud service provider's responsibility are hardened according to generally accepted industry standards.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-26 Managing Vulnerabilities, Malfunctions and Errors - System Hardening",
+ "Type": "Basic",
+ "AboutCriteria": "System components in the sense of the criterion are the objects required for the information security of the cloud service during the creation, processing, storage, transmission, deletion or destruction of information in the cloud service provider's area of responsibility, e.g. firewalls, load balancers, web servers, application servers and database servers. These system components in turn consist of hardware and software objects. This criterion is limited to software objects such as hypervisors, operating systems, databases, programming interfaces (APIs), images (e.g. for virtual machines and containers) and applications for logging and monitoring security events.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that layers of the cloud service which are under their responsibility are hardened according to generally established and accepted industry standards. The hardening specifications applied are derived from a risk assessment of the planned usage of the cloud service."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-26.02B",
+ "Description": "The hardening requirements for each system component are documented.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-26 Security Reporting",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-26.03B",
+ "Description": "If non-modifiable ('immutable') images are used, compliance with the hardening specifications, as defined in the hardening requirements, is checked upon creation of the images.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-26 Security Reporting",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "ecr_repositories_tag_immutability",
+ "ec2_launch_template_imdsv2_required"
+ ]
+ },
+ {
+ "Id": "OPS-26.04B",
+ "Description": "Configurations and log files (cloud service provider data) regarding the continuous availability of the images are retained.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-26 Security Reporting",
+ "Type": "Basic",
+ "AboutCriteria": "The configuration and log files for non-modifiable mages include e.g.: - Configuration of the images used with regards to implemented hardening; and specifications including version history; and- Logs for file integrity monitoring of images in productive use. Generally accepted industry standards are, for example, the Security Configuration Benchmark of the Centre for Internet Security (CIS) or the corresponding modules in the BSI IT-Grundschutz-Compendium.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "ecr_repositories_lifecycle_policy_enabled",
+ "lightsail_instance_automated_snapshots"
+ ]
+ },
+ {
+ "Id": "OPS-26.05B",
+ "Description": "The cloud service provider implements monitoring measures to ensure system components comply with hardening specifications.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-26 Security Reporting",
+ "Type": "Basic",
+ "AboutCriteria": "System components in the sense of the criterion are the objects required for the information security of the cloud service during the creation, processing, storage, transmission, deletion or destruction of information in the cloud service provider's area of responsibility, e.g. firewalls, load balancers, web servers, application servers and database servers. These system components in turn consist of hardware and software objects. This criterion is limited to software objects such as hypervisors, operating systems, databases, programming interfaces (APIs), images (e.g. for virtual machines and containers) and applications for logging and monitoring security events. Compliance with hardening specifications can be monitored with e.g. file integrity monitoring.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "acm_certificates_transparency_logs_enabled",
+ "apigateway_restapi_logging_enabled",
+ "apigatewayv2_api_access_logging_enabled",
+ "appsync_field_level_logging_enabled",
+ "athena_workgroup_logging_enabled",
+ "awslambda_function_invoke_api_operations_cloudtrail_logging_enabled",
+ "bedrock_model_invocation_logging_enabled",
+ "bedrock_model_invocation_logs_encryption_enabled",
+ "cloudfront_distributions_logging_enabled",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_log_file_validation_enabled",
+ "cloudtrail_logs_s3_bucket_access_logging_enabled",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "cloudtrail_multi_region_enabled_logging_management_events",
+ "cloudtrail_s3_dataevents_read_enabled",
+ "cloudtrail_s3_dataevents_write_enabled",
+ "cloudwatch_changes_to_network_acls_alarm_configured",
+ "cloudwatch_changes_to_network_gateways_alarm_configured",
+ "cloudwatch_changes_to_vpcs_alarm_configured",
+ "cloudwatch_log_group_kms_encryption_enabled",
+ "cloudwatch_log_group_no_secrets_in_logs",
+ "cloudwatch_log_group_not_publicly_accessible",
+ "cloudwatch_log_group_retention_policy_specific_days_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_authentication_failures",
+ "cloudwatch_log_metric_filter_aws_organizations_changes",
+ "cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk",
+ "cloudwatch_log_metric_filter_for_s3_bucket_policy_changes",
+ "cloudwatch_log_metric_filter_policy_changes",
+ "cloudwatch_log_metric_filter_root_usage",
+ "cloudwatch_log_metric_filter_security_group_changes",
+ "cloudwatch_log_metric_filter_sign_in_without_mfa",
+ "cloudwatch_log_metric_filter_unauthorized_api_calls",
+ "codebuild_project_logging_enabled",
+ "datasync_task_logging_enabled",
+ "directoryservice_directory_log_forwarding_enabled",
+ "dms_replication_task_source_logging_enabled",
+ "dms_replication_task_target_logging_enabled",
+ "documentdb_cluster_cloudwatch_log_export",
+ "ec2_client_vpn_endpoint_connection_logging_enabled",
+ "ecs_task_definitions_logging_block_mode",
+ "ecs_task_definitions_logging_enabled",
+ "eks_control_plane_logging_all_types_enabled",
+ "elasticbeanstalk_environment_cloudwatch_logging_enabled",
+ "elb_logging_enabled",
+ "elbv2_logging_enabled",
+ "glue_data_catalogs_metadata_encryption_enabled",
+ "glue_data_catalogs_not_publicly_accessible",
+ "glue_etl_jobs_logging_enabled",
+ "guardduty_eks_audit_log_enabled",
+ "mq_broker_logging_enabled",
+ "neptune_cluster_integration_cloudwatch_logs",
+ "networkfirewall_logging_enabled",
+ "opensearch_service_domains_audit_logging_enabled",
+ "opensearch_service_domains_cloudwatch_logging_enabled",
+ "rds_cluster_integration_cloudwatch_logs",
+ "rds_instance_integration_cloudwatch_logs",
+ "redshift_cluster_audit_logging",
+ "route53_public_hosted_zones_cloudwatch_logging_enabled",
+ "s3_bucket_server_access_logging_enabled",
+ "servicecatalog_portfolio_shared_within_organization_only",
+ "stepfunctions_statemachine_logging_enabled",
+ "vpc_flow_logs_enabled",
+ "waf_global_webacl_logging_enabled",
+ "wafv2_webacl_logging_enabled",
+ "wafv2_webacl_rule_logging_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-26.01AS",
+ "Description": "System components in the cloud service provider's area of responsibility are automatically monitored for compliance with hardening specifications.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-26 Security Reporting",
+ "Type": "Additional (Sharpening)",
+ "AboutCriteria": "System components in the sense of the criterion are the objects required for the information security of the cloud service during the creation, processing, storage, transmission, deletion or destruction of information in the cloud service provider's area of responsibility, e.g. firewalls, load balancers, web servers, application servers and database servers. These system components in turn consist of hardware and software objects. This criterion is limited to software objects such as hypervisors, operating systems, databases, programming interfaces (APIs), images (e.g. for virtual machines and containers) and applications for logging and monitoring security events. Compliance with hardening specifications can be monitored with e.g. file integrity monitoring.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "acm_certificates_transparency_logs_enabled",
+ "apigateway_restapi_logging_enabled",
+ "apigatewayv2_api_access_logging_enabled",
+ "appsync_field_level_logging_enabled",
+ "athena_workgroup_logging_enabled",
+ "awslambda_function_invoke_api_operations_cloudtrail_logging_enabled",
+ "bedrock_model_invocation_logging_enabled",
+ "bedrock_model_invocation_logs_encryption_enabled",
+ "cloudfront_distributions_logging_enabled",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_kms_encryption_enabled",
+ "cloudtrail_log_file_validation_enabled",
+ "cloudtrail_logs_s3_bucket_access_logging_enabled",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "cloudtrail_multi_region_enabled_logging_management_events",
+ "cloudtrail_s3_dataevents_read_enabled",
+ "cloudtrail_s3_dataevents_write_enabled",
+ "cloudwatch_changes_to_network_acls_alarm_configured",
+ "cloudwatch_changes_to_network_gateways_alarm_configured",
+ "cloudwatch_changes_to_vpcs_alarm_configured",
+ "cloudwatch_log_group_kms_encryption_enabled",
+ "cloudwatch_log_group_no_secrets_in_logs",
+ "cloudwatch_log_group_not_publicly_accessible",
+ "cloudwatch_log_group_retention_policy_specific_days_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_authentication_failures",
+ "cloudwatch_log_metric_filter_aws_organizations_changes",
+ "cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk",
+ "cloudwatch_log_metric_filter_for_s3_bucket_policy_changes",
+ "cloudwatch_log_metric_filter_policy_changes",
+ "cloudwatch_log_metric_filter_root_usage",
+ "cloudwatch_log_metric_filter_security_group_changes",
+ "cloudwatch_log_metric_filter_sign_in_without_mfa",
+ "cloudwatch_log_metric_filter_unauthorized_api_calls",
+ "codebuild_project_logging_enabled",
+ "codebuild_project_s3_logs_encrypted",
+ "datasync_task_logging_enabled",
+ "directoryservice_directory_log_forwarding_enabled",
+ "dms_replication_task_source_logging_enabled",
+ "dms_replication_task_target_logging_enabled",
+ "documentdb_cluster_cloudwatch_log_export",
+ "ec2_client_vpn_endpoint_connection_logging_enabled",
+ "ecs_task_definitions_logging_block_mode",
+ "ecs_task_definitions_logging_enabled",
+ "eks_control_plane_logging_all_types_enabled",
+ "elasticbeanstalk_environment_cloudwatch_logging_enabled",
+ "elb_logging_enabled",
+ "elbv2_logging_enabled",
+ "glue_data_catalogs_connection_passwords_encryption_enabled",
+ "glue_data_catalogs_metadata_encryption_enabled",
+ "glue_data_catalogs_not_publicly_accessible",
+ "glue_development_endpoints_cloudwatch_logs_encryption_enabled",
+ "glue_etl_jobs_cloudwatch_logs_encryption_enabled",
+ "glue_etl_jobs_logging_enabled",
+ "guardduty_eks_audit_log_enabled",
+ "mq_broker_logging_enabled",
+ "neptune_cluster_integration_cloudwatch_logs",
+ "networkfirewall_logging_enabled",
+ "opensearch_service_domains_audit_logging_enabled",
+ "opensearch_service_domains_cloudwatch_logging_enabled",
+ "rds_cluster_integration_cloudwatch_logs",
+ "rds_instance_integration_cloudwatch_logs",
+ "redshift_cluster_audit_logging",
+ "route53_public_hosted_zones_cloudwatch_logging_enabled",
+ "s3_bucket_server_access_logging_enabled",
+ "servicecatalog_portfolio_shared_within_organization_only",
+ "stepfunctions_statemachine_logging_enabled",
+ "vpc_flow_logs_enabled",
+ "waf_global_webacl_logging_enabled",
+ "wafv2_webacl_logging_enabled",
+ "wafv2_webacl_rule_logging_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-26.06B",
+ "Description": "Any deviations from these specifications are promptly reported to the appropriate departments for immediate assessment and action.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-26 Security Reporting",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudwatch_alarm_actions_alarm_state_configured",
+ "cloudwatch_alarm_actions_enabled",
+ "cloudwatch_changes_to_network_acls_alarm_configured",
+ "cloudwatch_changes_to_network_gateways_alarm_configured",
+ "cloudwatch_changes_to_network_route_tables_alarm_configured",
+ "cloudwatch_changes_to_vpcs_alarm_configured",
+ "cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_authentication_failures",
+ "cloudwatch_log_metric_filter_aws_organizations_changes",
+ "cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk",
+ "cloudwatch_log_metric_filter_for_s3_bucket_policy_changes",
+ "cloudwatch_log_metric_filter_policy_changes",
+ "cloudwatch_log_metric_filter_root_usage",
+ "cloudwatch_log_metric_filter_security_group_changes",
+ "cloudwatch_log_metric_filter_sign_in_without_mfa",
+ "cloudwatch_log_metric_filter_unauthorized_api_calls"
+ ]
+ },
+ {
+ "Id": "OPS-27.01B",
+ "Description": "The cloud service provider documents, communicates, and maintains processes and procedures to manage updates to system components used to provide the cloud service that incorporate third party or open-source libraries. This includes: - Regularly identifying available updates and known vulnerabilities in third party or open-source libraries used within applications;- Evaluating the potential impact of identified updates and vulnerabilities on the applications and the overall security posture;- Implementing necessary updates and patches in a timely manner to address identified vulnerabilities; and- Continuously monitoring applications to ensure updates are effectively applied and no new vulnerabilities are introduced.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-27 Managing Vulnerabilities, Malfunctions and Errors - Externally Sourced Components",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "elasticbeanstalk_environment_managed_updates_enabled",
+ "opensearch_service_domains_updated_to_the_latest_service_software_version",
+ "ssm_managed_compliant_patching"
+ ]
+ },
+ {
+ "Id": "OPS-28.01B",
+ "Description": "Based on a risk-assessment (cf. OIS-07), the cloud service provider established guidelines and instructions with technical and organisational measures to ensure separation of cloud service customer data between different customers and between customers and the cloud service provider. These guidelines and instructions are documented, communicated and provided in accordance with SP-01 and contain specifications regarding the client separation based on a documented cloud layer model (cf. OPS-29) and include the following: - Illustration of which cloud layers are used for the particular cloud service. The used cloud layers should be appropriate to enable client separation;- Measures used to separate cloud service customer data along the used cloud layers. Those measures are categorised according to the protection goals of confidentiality, integrity and availability and if they are preventive, detective or reactive measures;- Monitoring and compliance with these measures; and- Initiation of suitable measures in the event of deviations.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-28 Separation of Datasets - Guideline",
+ "Type": "Basic",
+ "AboutCriteria": "The guidelines and instructions of this criteria are meant to serve as an umbrella guideline for all cyber security measures against all threats that stem from sharing physical or virtual ressources and that lead to a loss of separation of data sets. Ideally, the cloud service provider has already ensured the separation of data sets between different customers and between customers and cloud service provider via all other guidelines, instructions and the corresponding measures. The systematic approach of the guidelines and instructions addressed by this criterion ensures that no aspect of this separation is overlooked. It also provides a good basis to explain the cyber security of the cloud service to the customer in an appealing manner (cf. PSS-01). Cloud layers in the sense of this criterion can be found in the *CISA Cloud Security Technical Reverence Architecture*. The cloud service provider may use its own categorisation of cloud layers. There are nine combinations for confidentiality, integrity and availability with prevention, detection and reaction. Applying this to every cloud layer may lead to a large number of combinations. However, depending on the cloud service, it can be acceptable that it may not be possible to provide meaningful information in the guideline for every possible combination of prevention, detection and reaction as well as confidentiality, integrity and availability. Those cases should be comprehensibly documented in the guidelines and instructions.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-29.01B",
+ "Description": "Based on a risk-assessment (cf. OIS-07), the requirements for separating cloud service customer data between different customers and between customers and cloud service provider on shared virtual or shared ressources along the cloud layers, the cloud service provider implements measures and procedures against threats to the separation of data sets according to the guidelines and instructions of OPS-28. The measures address prevention against, detection of and reaction to any incidents infringing the separation.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-29 Separation of Datasets - Implementation",
+ "Type": "Basic",
+ "AboutCriteria": "The guidelines and instructions of this criteria are meant to serve as an umbrella guideline for all cyber security measures against all threats that stem from sharing physical or virtual ressources and that lead to a loss of separation of data sets. Ideally, the cloud service provider has already ensured the separation of data sets between different customers and between customers and cloud service provider via all other guidelines, instructions and the corresponding measures. The systematic approach of the guidelines and instructions addressed by this criterion ensures that no aspect of this separation is overlooked. It also provides a good basis to explain the cyber security of the cloud service to the customer in an appealing manner (cf. PSS-01).",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that the functions provided by the cloud service for segregating shared virtual and physical resources are used in such way that risks related to segregation are adequately addressed according to the data's protection requirements."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-29.02B",
+ "Description": "Cloud service customer data stored and processed on shared virtual and physical resources is securely and strictly separated according to a documented approach based on OIS-07 risk analysis and following policies on cryptography (cf. CRY-01) to ensure the confidentiality and integrity of this data.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-29 Security Audits",
+ "Type": "Basic",
+ "AboutCriteria": "Shared resources include memory, cores and storage networks. The separation of cloud service customer data on shared resources can take place, for example, in accordance with cloud layers described in the CISA Cloud Security TRA. Where the adequacy and effectiveness of segregation cannot be assessed with reasonable assurance (e.g. due to complex implementation), evidence may also be provided through expert third party review results (e.g. penetration tests to validate the concept). The separation of transmitted data is subject to criterion COS-06.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-29.03B",
+ "Description": "The measures are regularily reviewed and improved accordingly.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-29 Security Audits",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-30.01B",
+ "Description": "If the cloud service comprises capabilities for confidential computing, policies and instructions with technical and organisational safeguards are documented, communicated and provided according to SP-01, in which the following aspects are described: - Purpose and scope, including which information security risks are to be mitigated through the use of confidential computing (cf. OIS-07);- Available confidential computing technologies;- Determination of which parts of the cloud stack are protected with each technology and where third party access is possible;- Listing of involved suppliers/service organisations; and- Utilisation of Trusted Execution Environments (TEEs) or secure enclaves.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-30 Confidential Computing - Policies and Instructions",
+ "Type": "Basic",
+ "AboutCriteria": "Confidential Computing within the meaning of this criterion uses hardware-based, attested TEEs to protect the confidentiality and integrity of data during processing ('in use'). A TEE represents an isolated part within a system that provides a specially protected runtime environment. The TEE can be part of the main processor (CPU) or part of the system-on-chip (SoC). Only authorised entities are allowed to introduce or modify applications or code within the TEE. The attestation of the TEE and the application running within the TEE serves to validate the trustworthiness of the processing.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-30.02B",
+ "Description": "The cloud service provider provides its customers with information on the above listed aspects according to PSS-01.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-30 Security Controls",
+ "Type": "Basic",
+ "AboutCriteria": "Confidential Computing within the meaning of this criterion uses hardware-based, attested TEEs to protect the confidentiality and integrity of data during processing ('in use'). A TEE represents an isolated part within a system that provides a specially protected runtime environment. The TEE can be part of the main processor (CPU) or part of the system-on-chip (SoC). Only authorised entities are allowed to introduce or modify applications or code within the TEE. The attestation of the TEE and the application running within the TEE serves to validate the trustworthiness of the processing.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-30.03B",
+ "Description": "Additional aspects addressed by the policies and instructions for confidential computing, not necessarily included in the information provided to the cloud service customers, include: - Responsibilities for the implementation and monitoring of Confidential Computing measures;- Security requirements to ensure the confidentiality, integrity, and authenticity of the data during processing, including that (a) neither the cloud service provider nor any other unauthorised entity shall be able to access the cloud service customer data or the keys used for protecting that data, and (b) use of cryptographic algorithms that comply with the cloud service provider's policy for the use of cryptographic mechanisms (cf. CRY-01); and- Relevant legal and regulatory requirements applicable to confidential computing.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-30 Security Controls",
+ "Type": "Basic",
+ "AboutCriteria": "Confidential Computing within the meaning of this criterion uses hardware-based, attested TEEs to protect the confidentiality and integrity of data during processing ('in use'). A TEE represents an isolated part within a system that provides a specially protected runtime environment. The TEE can be part of the main processor (CPU) or part of the system-on-chip (SoC). Only authorised entities are allowed to introduce or modify applications or code within the TEE. The attestation of the TEE and the application running within the TEE serves to validate the trustworthiness of the processing.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-30.01AC",
+ "Description": "The cloud service provider documents and implements a technical concept for confidential computing, demonstrating how certain information security risks are mitigated (cf. OIS-07). The concept includes at least the following technical measures and procedures: - Usage of Trusted Execution Environments (TEEs) or secure enclaves to process sensitive data (data in use) in a protected environment;- Documentation of all associated interfaces;- Consideration of available hardware attestations;- Utilisation of encryption techniques to secure data during processing, including secure key management;- Measures to ensure the integrity and authenticity of the data and the executing code within the TEE (remote attestation);- Implementation of monitoring and logging mechanisms to detect and respond to security incidents; and- Conducting regular security reviews and penetration tests (cf. OPS-22) on an event-driven basis, but at least annually, to verify the effectiveness of confidential computing measures.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-30 Security Controls",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Confidential Computing within the meaning of this criterion uses hardware-based, attested TEEs to protect the confidentiality and integrity of data during processing ('in use'). A TEE represents an isolated part within a system that provides a specially protected runtime environment. The TEE can be part of the main processor (CPU) or part of the system-on-chip (SoC). Only authorised entities are allowed to introduce or modify applications or code within the TEE. The attestation of the TEE and the application running within the TEE serves to validate the trustworthiness of the processing.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-31.01B",
+ "Description": "If the cloud service comprises capabilities for Confidential Computing, the cloud service provider offers remote attestation functionalities for data in-use protection.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-31 Confidential Computing - Remote Attestation",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "athena_workgroup_encryption",
+ "bedrock_model_invocation_logs_encryption_enabled",
+ "cloudfront_distributions_field_level_encryption_enabled",
+ "cloudtrail_kms_encryption_enabled",
+ "cloudwatch_log_group_kms_encryption_enabled",
+ "dms_endpoint_redis_in_transit_encryption_enabled",
+ "dynamodb_accelerator_cluster_encryption_enabled",
+ "dynamodb_accelerator_cluster_in_transit_encryption_enabled",
+ "dynamodb_tables_kms_cmk_encryption_enabled",
+ "ec2_ebs_default_encryption",
+ "ec2_ebs_volume_encryption",
+ "efs_encryption_at_rest_enabled",
+ "eks_cluster_kms_cmk_encryption_in_secrets_enabled",
+ "elasticache_redis_cluster_in_transit_encryption_enabled",
+ "elasticache_redis_cluster_rest_encryption_enabled",
+ "glue_data_catalogs_connection_passwords_encryption_enabled",
+ "glue_data_catalogs_metadata_encryption_enabled",
+ "glue_development_endpoints_cloudwatch_logs_encryption_enabled",
+ "glue_development_endpoints_job_bookmark_encryption_enabled",
+ "glue_development_endpoints_s3_encryption_enabled",
+ "glue_etl_jobs_amazon_s3_encryption_enabled",
+ "glue_etl_jobs_cloudwatch_logs_encryption_enabled",
+ "glue_etl_jobs_job_bookmark_encryption_enabled",
+ "kafka_cluster_encryption_at_rest_uses_cmk",
+ "kafka_cluster_in_transit_encryption_enabled",
+ "kafka_connector_in_transit_encryption_enabled",
+ "opensearch_service_domains_encryption_at_rest_enabled",
+ "opensearch_service_domains_node_to_node_encryption_enabled",
+ "rds_instance_transport_encrypted",
+ "redshift_cluster_in_transit_encryption_enabled",
+ "s3_bucket_default_encryption",
+ "s3_bucket_kms_encryption",
+ "sagemaker_notebook_instance_encryption_enabled",
+ "sagemaker_training_jobs_intercontainer_encryption_enabled",
+ "sagemaker_training_jobs_volume_and_output_encryption_enabled",
+ "sns_topics_kms_encryption_at_rest_enabled",
+ "sqs_queues_server_side_encryption_enabled",
+ "storagegateway_fileshare_encryption_enabled",
+ "transfer_server_in_transit_encryption_enabled",
+ "workspaces_volume_encryption_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-31.02B",
+ "Description": "Remote attestation functionalities are based on cryptographic means rooted in trusted hard- and software.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-31 Security Policies",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "acm_certificates_with_secure_key_algorithms",
+ "dynamodb_accelerator_cluster_in_transit_encryption_enabled",
+ "dms_endpoint_redis_in_transit_encryption_enabled",
+ "elasticache_redis_cluster_in_transit_encryption_enabled",
+ "kafka_cluster_in_transit_encryption_enabled",
+ "kafka_connector_in_transit_encryption_enabled",
+ "redshift_cluster_in_transit_encryption_enabled",
+ "elbv2_nlb_tls_termination_enabled",
+ "transfer_server_in_transit_encryption_enabled",
+ "kafka_cluster_mutual_tls_authentication_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-31.03B",
+ "Description": "Remote attestation functionalities comprise an interface that allows the customer to verify the integrity of the remote attestation.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-31 Security Policies",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "apigateway_restapi_client_certificate_enabled",
+ "acm_certificates_with_secure_key_algorithms",
+ "dynamodb_accelerator_cluster_in_transit_encryption_enabled",
+ "dms_endpoint_redis_in_transit_encryption_enabled",
+ "elasticache_redis_cluster_in_transit_encryption_enabled",
+ "kafka_cluster_in_transit_encryption_enabled",
+ "kafka_connector_in_transit_encryption_enabled",
+ "redshift_cluster_in_transit_encryption_enabled",
+ "elbv2_nlb_tls_termination_enabled",
+ "transfer_server_in_transit_encryption_enabled",
+ "kafka_cluster_mutual_tls_authentication_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-31.01AC",
+ "Description": "The cloud service provider clearly defines, documents and communicates the available attestation levels.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-31 Security Policies",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-31.02AC",
+ "Description": "The information is part of the guidelines and recommendations for the secure use of the cloud service provided (cf. PSS-01).",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-31 Security Policies",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "OPS-32.01B",
+ "Description": "Guidelines and instructions with technical and organisational measures for the planning and management of containers are documented, communicated and provided in accordance with SP-01. These guidelines and instructions contain specifications for the entire container life cycle regarding the following aspects: - Image creation, testing, and accreditation;- Image storage and retrieval;- Container deployment and management;- Container operations; and- Decommissioning of images and container.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-32 Guideline for Container Management",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "ecs_cluster_container_insights_enabled",
+ "ecs_task_definitions_containers_readonly_access",
+ "ecs_task_definitions_logging_block_mode",
+ "ecs_task_definitions_logging_enabled",
+ "ecs_task_definitions_no_privileged_containers",
+ "inspector2_is_enabled",
+ "sagemaker_training_jobs_intercontainer_encryption_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-32.02B",
+ "Description": "The guidelines and instructions should describe measures along the life cycle of containers and address at least the following aspects: - Containers are inventoried according to a documented process (cf. AM-02, AM-03, AM-09);- The need for malware protection is assessed and, if necessary, ensured (cf. OPS-05);- Logging and monitoring of events takes place along the container lifecycle and is executed according to a defined logging concept (cf. OPS-10, OPS-12);- Cloud service customer data is separated based on a risk analysis (cf. OPS-29);- Access to the container host should take place in accordance with a roles and rights concept and a policy for managing access and access authorisations (cf. IAM-01, IAM-06);- Data stored on containers and data in transit should be encrypted as far as possible by the provider in accordance with the encryption policy (cf. CRY-01);- Measures to ensure network security are established. This includes, for example, measures to detect network anomalies (cf. COS-01 and COS-03) such as unexpected data flows within the network or unwanted access attempts;- Changes to containers and images follow a regulated process (cf. DEV-03); and- Hardening processes are carried out according to general industry standards to ensure that no unnecessary system services are executed (cf. PSS-11).",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-32 Security Procedures",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "dlm_ebs_snapshot_lifecycle_policy_exists",
+ "ecr_repositories_lifecycle_policy_enabled",
+ "s3_bucket_lifecycle_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-33.01B",
+ "Description": "Guidelines and instructions with technical and organisational measures are documented, communicated and provided in accordance with SP-01 to ensure systems and applications in the responsibility of the cloud service provider are patched within a suitable time frame depending on contractual agreements and identified vulnerabilities or exploits. These guidelines and instructions contain specifications regarding the following aspects: - Software is kept up-to-date with the latest security patches;- Patches are scheduled within maintenance windows, where applicable, to minimise service disruption; and- Patches are tested in non-production environments before they are rolled out into the production environment, provided testing was successful. Mechanisms are in place to revert to previous software versions in case of unexpected issues.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-33 Managing Vulnerabilities - Patch Management",
+ "Type": "Basic",
+ "AboutCriteria": "Patches are defined as software updates to systems, applications or network components with the goal of increasing security by addressing issues, vulnerabilities or exploits.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "ssm_managed_compliant_patching",
+ "elasticbeanstalk_environment_managed_updates_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-33.02B",
+ "Description": "Patch management procedures are harmonised with the cloud service provider's overall software change management process.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-33 Security Standards",
+ "Type": "Basic",
+ "AboutCriteria": "Patches are defined as software updates to systems, applications or network components with the goal of increasing security by addressing issues, vulnerabilities or exploits.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "ssm_managed_compliant_patching",
+ "elasticache_redis_cluster_auto_minor_version_upgrades",
+ "s3_bucket_object_versioning",
+ "elasticbeanstalk_environment_managed_updates_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-33.03B",
+ "Description": "Patches provided by third parties are identified, tested and deployed.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-33 Security Standards",
+ "Type": "Basic",
+ "AboutCriteria": "Patches are defined as software updates to systems, applications or network components with the goal of increasing security by addressing issues, vulnerabilities or exploits.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "ssm_managed_compliant_patching",
+ "elasticache_redis_cluster_auto_minor_version_upgrades",
+ "codeartifact_packages_external_public_publishing_disabled",
+ "elasticbeanstalk_environment_managed_updates_enabled"
+ ]
+ },
+ {
+ "Id": "OPS-33.01AS",
+ "Description": "Patches provided by third parties are identified, tested and deployed in an automated manner. In case of patches where manual intervention is required, an exception handling process for manual patching is defined.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-33 Security Standards",
+ "Type": "Additional (Sharpening)",
+ "AboutCriteria": "Patches are defined as software updates to systems, applications or network components with the goal of increasing security by addressing issues, vulnerabilities or exploits.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "ssm_managed_compliant_patching",
+ "elasticbeanstalk_environment_managed_updates_enabled",
+ "elasticache_redis_cluster_auto_minor_version_upgrades",
+ "memorydb_cluster_auto_minor_version_upgrades"
+ ]
+ },
+ {
+ "Id": "OPS-33.04B",
+ "Description": "Systems are scanned after application of patches to ensure vulnerabilities and exploits are remediated and no new vulnerabilities or exploits were deployed.",
+ "Attributes": [
+ {
+ "Section": "Operations (OPS)",
+ "SubSection": "OPS-33 Security Standards",
+ "Type": "Basic",
+ "AboutCriteria": "Patches are defined as software updates to systems, applications or network components with the goal of increasing security by addressing issues, vulnerabilities or exploits.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "ssm_managed_compliant_patching",
+ "elasticbeanstalk_environment_managed_updates_enabled"
+ ]
+ },
+ {
+ "Id": "IAM-01.01B",
+ "Description": "The cloud service provider documents, communicates and makes available according to SP-01: - A role, rights and authorities concept based on role-based access control and the business and security requirements of the cloud service provider; and- A policy for managing user accounts and access rights for internal and external employees of the cloud service provider and system components that have a role in automated authorisation processes of the cloud service provider.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-01 Policy for User Accounts and Access Rights",
+ "Type": "Basic",
+ "AboutCriteria": "External employees include freelancers, temporary workers, suppliers and service providers with access to system components.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "config_recorder_using_aws_service_role",
+ "ec2_instance_profile_attached",
+ "iam_no_custom_policy_permissive_role_assumption",
+ "iam_policy_attached_only_to_group_or_roles",
+ "iam_policy_cloudshell_admin_not_attached",
+ "iam_role_administratoraccess_policy",
+ "iam_role_cross_account_readonlyaccess_policy",
+ "iam_role_cross_service_confused_deputy_prevention",
+ "iam_securityaudit_role_created",
+ "iam_support_role_created",
+ "iam_user_with_temporary_credentials",
+ "bedrock_api_key_no_administrative_privileges",
+ "fms_policy_compliant",
+ "iam_aws_attached_policy_no_administrative_privileges",
+ "iam_customer_attached_policy_no_administrative_privileges",
+ "iam_customer_unattached_policy_no_administrative_privileges",
+ "iam_group_administrator_access_policy",
+ "iam_inline_policy_no_administrative_privileges",
+ "iam_policy_cloudshell_admin_not_attached",
+ "iam_role_administratoraccess_policy",
+ "iam_user_administrator_access_policy",
+ "organizations_delegated_administrators",
+ "rds_cluster_default_admin",
+ "rds_instance_default_admin"
+ ]
+ },
+ {
+ "Id": "IAM-01.02B",
+ "Description": "These documents address at least the following aspects: - Aspects to be considered for making access control decisions;- Assignment of unique usernames;- Granting and modifying user accounts and access rights based on the 'least-privilege-principle' and the 'need-to-know' principle;- Use of a role-based mechanism for the assignment of access rights;- Definition of the different types of identities and role-based access supported, and assignment of access control parameters and roles to be considered for each type;- Separation of duties between operational and monitoring functions ('Separation of Duties');- Assigning and monitoring privileged access rights;- Separation of duties between managing, approving and assigning user accounts and access rights;- Approval by authorised individual(s) or system(s) for granting or modifying user accounts and access rights before cloud service customer data, cloud service derived data and cloud service provider data can be accessed;- Regular review of assigned user accounts and access rights;- Blocking and removing access accounts in the event of inactivity;- Specific measures for the management of identities used infrequently for emergency recovery and similar scenarios;- Time-based or event-driven removal or adjustment of access rights in the event of changes to job responsibility;- Two-factor or multi-factor authentication for users with privileged access;- Remote access and access across geographic boundaries;- Requirements for the approval and documentation of the management of user accounts and access rights;- Requirement to review access logs at least every month; and- Measures to be taken in the event of potential identity compromise, such as disabling and removing identities.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-01 Identity and Access Management",
+ "Type": "Basic",
+ "AboutCriteria": "System components in the sense of the criterion are defined in OPS-26. Automated authorisation processes in the sense of this basic criterion concern procedures for automated software provisioning (continuous delivery) as well as for automated provisioning and deprovisioning of user accounts and access rights based on approved requests. For containers, user accounts and access rights should be managed according to a regulated process, especially for automated authorisation processes in container environments.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-01.03B",
+ "Description": "The cloud service provider links the policy for user accounts and access rights with the physical access control policy defined in PS-04, to ensure that access to premises and buildings related to the cloud service provided is also controlled.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-01 Identity and Access Management",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "efs_access_point_enforce_user_identity",
+ "iam_password_policy_reuse_24"
+ ]
+ },
+ {
+ "Id": "IAM-01.04B",
+ "Description": "For the given identity under the responsibility of the cloud service provider, the cloud service provider is able to provide the list of the access rights currently granted to that identity.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-01 Identity and Access Management",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "config_recorder_using_aws_service_role",
+ "ec2_instance_profile_attached",
+ "iam_no_custom_policy_permissive_role_assumption",
+ "iam_policy_attached_only_to_group_or_roles",
+ "iam_policy_cloudshell_admin_not_attached",
+ "iam_role_administratoraccess_policy",
+ "iam_role_cross_account_readonlyaccess_policy",
+ "iam_role_cross_service_confused_deputy_prevention",
+ "iam_securityaudit_role_created",
+ "iam_support_role_created",
+ "iam_user_with_temporary_credentials",
+ "bedrock_api_key_no_administrative_privileges",
+ "fms_policy_compliant",
+ "iam_aws_attached_policy_no_administrative_privileges",
+ "iam_customer_attached_policy_no_administrative_privileges",
+ "iam_customer_unattached_policy_no_administrative_privileges",
+ "iam_group_administrator_access_policy",
+ "iam_inline_policy_no_administrative_privileges",
+ "iam_policy_cloudshell_admin_not_attached",
+ "iam_role_administratoraccess_policy",
+ "iam_user_administrator_access_policy",
+ "organizations_delegated_administrators",
+ "rds_cluster_default_admin",
+ "rds_instance_default_admin",
+ "accessanalyzer_enabled",
+ "efs_access_point_enforce_user_identity"
+ ]
+ },
+ {
+ "Id": "IAM-02.01B",
+ "Description": "Specified procedures for granting and modifying user accounts and access rights for internal and external employees of the cloud service provider as well as for system components involved in automated authorisation processes of the cloud service provider ensure compliance with the role and rights concept as well as the policy for managing user accounts and access rights.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-02 Granting and Change of User Accounts and Access Rights",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies to identities that refer to single, multiple or non-human entities.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-02.02B",
+ "Description": "If the cloud service provider defines break glass accounts to be used when the main procedure for authentication is not available, the cloud service provider defines and enforces specific requirements and procedures for secure usage of those accounts.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-02 Access Control",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-03.01B",
+ "Description": "The cloud service provider has a risk-based procedure for managing user accounts in place (cf. IAM-01), taking into account the types of data accessible via the user accounts of internal and external employees.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-03 Risk-Based Procedure for Locking and Withdrawal of User Accounts",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies to identities that refer to single, multiple or non-human entities.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_avoid_root_usage",
+ "iam_no_root_access_key",
+ "iam_user_with_temporary_credentials",
+ "iam_role_administratoraccess_policy",
+ "iam_root_credentials_management_enabled",
+ "cloudwatch_log_metric_filter_root_usage"
+ ]
+ },
+ {
+ "Id": "IAM-03.02B",
+ "Description": "As part of this procedure, specific parameters for automatically locking and withdrawing access due to inactivity or multiple failed login attempts are defined, with exceptions for identities to be used in emergency recovery and similar scenarios.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-03 Authentication",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies to identities that refer to single, multiple or non-human entities. Locking can result from a longer absence of the employee, for example, due to illness, parental leave, or sabbatical.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_password_policy_expires_passwords_within_90_days_or_less",
+ "iam_password_policy_reuse_24",
+ "cognito_user_pool_blocks_potential_malicious_sign_in_attempts",
+ "cognito_user_pool_blocks_compromised_credentials_sign_in_attempts",
+ "iam_user_accesskey_unused",
+ "iam_user_console_access_unused",
+ "secretsmanager_secret_unused"
+ ]
+ },
+ {
+ "Id": "IAM-03.03B",
+ "Description": "The cloud service provider documents and implements a process to monitor stolen and compromised credentials and to disable any identity for which an issue is identified, pending a review by an authorised person. This process is implemented on all identities under the cloud service provider's responsibility to which privileged access rights are assigned.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-03 Authentication",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies to identities that refer to single, multiple or non-human entities.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_avoid_root_usage",
+ "iam_no_root_access_key",
+ "cloudwatch_log_metric_filter_root_usage",
+ "iam_user_console_access_unused",
+ "iam_user_accesskey_unused",
+ "iam_user_with_temporary_credentials",
+ "iam_password_policy_reuse_24",
+ "ec2_instance_profile_attached"
+ ]
+ },
+ {
+ "Id": "IAM-03.01AS",
+ "Description": "The cloud service provider documents and implements a process to monitor stolen and compromised credentials and to disable any identity for which an issue is identified, pending a review by an authorised person. This process is implemented on all identities under the cloud service provider's responsibility.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-03 Authentication",
+ "Type": "Additional (Sharpening)",
+ "AboutCriteria": "This criterion applies to identities that refer to single, multiple or non-human entities.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_user_console_access_unused",
+ "iam_user_accesskey_unused",
+ "iam_password_policy_reuse_24",
+ "iam_user_with_temporary_credentials",
+ "account_maintain_current_contact_details"
+ ]
+ },
+ {
+ "Id": "IAM-03.04B",
+ "Description": "Such processes include an exception mechanism for cases where all identities needed to manage the situation are potentially compromised.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-03 Authentication",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies to identities that refer to single, multiple or non-human entities.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-03.01AC",
+ "Description": "The cloud service provider monitors the context of authentication attempts, e.g. IP addresses, the date and time or the device used, and flags suspicious events to authorised persons, as relevant.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-03 Authentication",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "This criterion applies to identities that refer to single, multiple or non-human entities.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudwatch_log_metric_filter_authentication_failures",
+ "cloudwatch_log_metric_filter_sign_in_without_mfa",
+ "cognito_user_pool_blocks_compromised_credentials_sign_in_attempts",
+ "cognito_user_pool_blocks_potential_malicious_sign_in_attempts"
+ ]
+ },
+ {
+ "Id": "IAM-03.02AC",
+ "Description": "The cloud service provider validates the effectiveness of its procedures for locking and withdrawal of user accounts.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-03 Authentication",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "This criterion applies to identities that refer to single, multiple or non-human entities.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-03.03AC",
+ "Description": "Any deviations identified during validation are addressed through timely and appropriate remediation measures.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-03 Authentication",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "This criterion applies to identities that refer to single, multiple or non-human entities.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-04.01B",
+ "Description": "Access rights are promptly adjusted or revoked if the job responsibilities of the cloud service provider's internal or external staff or the tasks of system components involved in the cloud service provider's automated authorisation processes change.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-04 Withdrawal or Adjustment of Access Rights as the Task Area Changes",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies to identities that refer to single, multiple or non-human entities. Changes in the task area of internal and external employees can be triggered by changes in the employment relationship (e.g. termination, transfer) or in contracts and agreements.'",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-04.02B",
+ "Description": "Privileged access rights are adjusted or revoked within 48 hours after the change taking effect.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-04 Authorization",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies to identities that refer to single, multiple or non-human entities. For privileged access rights the definition in IAM-06 applies.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-04.03B",
+ "Description": "All other access rights are adjusted or revoked within 14 days.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-04 Authorization",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies to identities that refer to single, multiple or non-human entities.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-04.04B",
+ "Description": "After revocation, the procedure for granting user accounts and access rights (cf. IAM-02) shall be repeated.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-04 Authorization",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies to identities that refer to single, multiple or non-human entities.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-04.05B",
+ "Description": "In cases of role changes where temporary access may need to be granted, these access rights are provided in accordance with the procedures for granting access rights outlined in IAM-02.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-04 Authorization",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies to identities that refer to single, multiple or non-human entities.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-04.06B",
+ "Description": "If the cloud service provider defines break glass accounts to be used when the main procedure for authentication is not available, then the cloud service provider defines and enforces specific requirements and procedures for secure usage of those accounts.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-04 Authorization",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies to identities that refer to single, multiple or non-human entities.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_root_mfa_enabled",
+ "iam_administrator_access_with_mfa",
+ "iam_user_mfa_enabled_console_access",
+ "s3_bucket_no_mfa_delete"
+ ]
+ },
+ {
+ "Id": "IAM-05.01B",
+ "Description": "Identities and the associated access rights of internal and external employees of the cloud service provider as well as of system components that play a role in automated authorisation processes of the cloud service provider are reviewed at least once a year to ensure that they still correspond to the actual area of use.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-05 Regular Review of Access Rights",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies to identities that refer to single, multiple or non-human entities.As an alternative to the regular reviews of access rights, time-bound access rights that automatically expire may also be issued.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-05.02B",
+ "Description": "The review is carried out by authorised persons from the cloud service provider's organisational units, who can assess the appropriateness of the assigned access rights based on their knowledge of the task areas of the employees or system components.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-05 Privileged Access Management",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies to identities that refer to single, multiple or non-human entities.As an alternative to the regular reviews of access rights, time-bound access rights that automatically expire may also be issued.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_securityaudit_role_created"
+ ]
+ },
+ {
+ "Id": "IAM-05.03B",
+ "Description": "Identified deviations are dealt with promptly, but no later than seven days after their detection, by appropriate modification or withdrawal of the access rights.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-05 Privileged Access Management",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies to identities that refer to single, multiple or non-human entities.As an alternative to the regular reviews of access rights, time-bound access rights that automatically expire may also be issued.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-05.04B",
+ "Description": "When revoking identities, the system ensures that all associated IT resources (e.g., virtual machines, storage, access rights) are identified, reassigned, or deleted to prevent the creation of orphaned resources. Clear processes and technical controls are established to identify and handle any orphaned resources that occur despite preventive measures, ensuring their timely reassignment or secure deletion.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-05 Privileged Access Management",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion applies to identities that refer to single, multiple or non-human entities.As an alternative to the regular reviews of access rights, time-bound access rights that automatically expire may also be issued.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_user_accesskey_unused",
+ "iam_user_console_access_unused"
+ ]
+ },
+ {
+ "Id": "IAM-05.01AC",
+ "Description": "Privileged access rights are reviewed at least every six months.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-05 Privileged Access Management",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-06.01B",
+ "Description": "Privileged access rights for internal and external employees as well as technical users of the cloud service provider are assigned and changed in accordance with the policy for managing user accounts and access rights (cf. IAM-01) or a separate specific policy.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-06 Privileged Access Rights",
+ "Type": "Basic",
+ "AboutCriteria": "Privileged access rights in the sense of the criterion are those that enable employees of the cloud service provider to perform any of the following activities: - Read or write access to the cloud service customers' data processed, stored or transmitted in the cloud service, unless such data is encrypted or the encryption can be deactivated for access by the cloud service provider; and- Changes to the operational and/or security configuration of the system components in the production environment, in particular the starting, stopping, deleting or deactivating of system components, if this can affect the confidentiality, integrity or availability of the data of the cloud service customers (also indirectly, e.g. by deactivating the logging and monitoring of security-relevant events).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_policy_allows_privilege_escalation",
+ "iam_role_administratoraccess_policy",
+ "iam_policy_cloudshell_admin_not_attached",
+ "iam_user_with_temporary_credentials",
+ "iam_customer_attached_policy_no_administrative_privileges"
+ ]
+ },
+ {
+ "Id": "IAM-06.02B",
+ "Description": "Privileged access rights are personalised, limited in time according to a risk assessment and assigned as necessary for the execution of tasks ('need-to-know principle').",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-06 Identity Lifecycle Management",
+ "Type": "Basic",
+ "AboutCriteria": "Privileged access rights in the sense of the criterion are those that enable employees of the cloud service provider to perform any of the following activities: - Read or write access to the cloud service customers' data processed, stored or transmitted in the cloud service, unless such data is encrypted or the encryption can be deactivated for access by the cloud service provider; and- Changes to the operational and/or security configuration of the system components in the production environment, in particular the starting, stopping, deleting or deactivating of system components, if this can affect the confidentiality, integrity or availability of the data of the cloud service customers (also indirectly, e.g. by deactivating the logging and monitoring of security-relevant events).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_avoid_root_usage",
+ "iam_no_root_access_key",
+ "sagemaker_notebook_instance_root_access_disabled",
+ "iam_no_custom_policy_permissive_role_assumption",
+ "iam_role_cross_account_readonlyaccess_policy"
+ ]
+ },
+ {
+ "Id": "IAM-06.03B",
+ "Description": "Non-nominative technical users shall only be accessed through authentication with a personalised user account.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-06 Identity Lifecycle Management",
+ "Type": "Basic",
+ "AboutCriteria": "Privileged access rights in the sense of the criterion are those that enable employees of the cloud service provider to perform any of the following activities: - Read or write access to the cloud service customers' data processed, stored or transmitted in the cloud service, unless such data is encrypted or the encryption can be deactivated for access by the cloud service provider; and- Changes to the operational and/or security configuration of the system components in the production environment, in particular the starting, stopping, deleting or deactivating of system components, if this can affect the confidentiality, integrity or availability of the data of the cloud service customers (also indirectly, e.g. by deactivating the logging and monitoring of security-relevant events).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-06.04B",
+ "Description": "Activities of users with privileged access rights are logged in order to detect any misuse of privileged access in suspicious cases.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-06 Identity Lifecycle Management",
+ "Type": "Basic",
+ "AboutCriteria": "Privileged access rights in the sense of the criterion are those that enable employees of the cloud service provider to perform any of the following activities: - Read or write access to the cloud service customers' data processed, stored or transmitted in the cloud service, unless such data is encrypted or the encryption can be deactivated for access by the cloud service provider; and- Changes to the operational and/or security configuration of the system components in the production environment, in particular the starting, stopping, deleting or deactivating of system components, if this can affect the confidentiality, integrity or availability of the data of the cloud service customers (also indirectly, e.g. by deactivating the logging and monitoring of security-relevant events).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudtrail_threat_detection_privilege_escalation",
+ "iam_avoid_root_usage",
+ "s3_bucket_server_access_logging_enabled",
+ "cloudwatch_log_metric_filter_root_usage"
+ ]
+ },
+ {
+ "Id": "IAM-06.05B",
+ "Description": "The logged information is automatically monitored for defined events that may indicate misuse.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-06 Identity Lifecycle Management",
+ "Type": "Basic",
+ "AboutCriteria": "Privileged access rights in the sense of the criterion are those that enable employees of the cloud service provider to perform any of the following activities: - Read or write access to the cloud service customers' data processed, stored or transmitted in the cloud service, unless such data is encrypted or the encryption can be deactivated for access by the cloud service provider; and- Changes to the operational and/or security configuration of the system components in the production environment, in particular the starting, stopping, deleting or deactivating of system components, if this can affect the confidentiality, integrity or availability of the data of the cloud service customers (also indirectly, e.g. by deactivating the logging and monitoring of security-relevant events).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudwatch_log_metric_filter_root_usage",
+ "cloudwatch_log_metric_filter_unauthorized_api_calls"
+ ]
+ },
+ {
+ "Id": "IAM-06.06B",
+ "Description": "When such an event is identified, the responsible personnel is automatically informed so that they can promptly assess whether misuse has occurred and take corresponding action.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-06 Identity Lifecycle Management",
+ "Type": "Basic",
+ "AboutCriteria": "Privileged access rights in the sense of the criterion are those that enable employees of the cloud service provider to perform any of the following activities: - Read or write access to the cloud service customers' data processed, stored or transmitted in the cloud service, unless such data is encrypted or the encryption can be deactivated for access by the cloud service provider; and- Changes to the operational and/or security configuration of the system components in the production environment, in particular the starting, stopping, deleting or deactivating of system components, if this can affect the confidentiality, integrity or availability of the data of the cloud service customers (also indirectly, e.g. by deactivating the logging and monitoring of security-relevant events). Misused privileged access rights can be treated e.g. as a security incident, cf. SIM-01.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "account_maintain_current_contact_details",
+ "account_maintain_different_contact_details_to_security_billing_and_operations",
+ "iam_support_role_created",
+ "iam_securityaudit_role_created"
+ ]
+ },
+ {
+ "Id": "IAM-06.07B",
+ "Description": "In the event of proven misuse of privileged access rights, disciplinary measures are taken in accordance with HR-04.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-06 Identity Lifecycle Management",
+ "Type": "Basic",
+ "AboutCriteria": "Privileged access rights in the sense of the criterion are those that enable employees of the cloud service provider to perform any of the following activities: - Read or write access to the cloud service customers' data processed, stored or transmitted in the cloud service, unless such data is encrypted or the encryption can be deactivated for access by the cloud service provider; and- Changes to the operational and/or security configuration of the system components in the production environment, in particular the starting, stopping, deleting or deactivating of system components, if this can affect the confidentiality, integrity or availability of the data of the cloud service customers (also indirectly, e.g. by deactivating the logging and monitoring of security-relevant events).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-06.08B",
+ "Description": "For Docker containers and images, activities of users with privileged access shall be logged according to OPS-10.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-06 Identity Lifecycle Management",
+ "Type": "Basic",
+ "AboutCriteria": "Privileged access rights in the sense of the criterion are those that enable employees of the cloud service provider to perform any of the following activities: - Read or write access to the cloud service customers' data processed, stored or transmitted in the cloud service, unless such data is encrypted or the encryption can be deactivated for access by the cloud service provider; and- Changes to the operational and/or security configuration of the system components in the production environment, in particular the starting, stopping, deleting or deactivating of system components, if this can affect the confidentiality, integrity or availability of the data of the cloud service customers (also indirectly, e.g. by deactivating the logging and monitoring of security-relevant events).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "ecs_task_definitions_no_privileged_containers"
+ ]
+ },
+ {
+ "Id": "IAM-06.09B",
+ "Description": "The cloud service provider requires two- or more factor authentication for accessing the administration interfaces used by the cloud service provider.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-06 Identity Lifecycle Management",
+ "Type": "Basic",
+ "AboutCriteria": "Privileged access rights in the sense of the criterion are those that enable employees of the cloud service provider to perform any of the following activities: - Read or write access to the cloud service customers' data processed, stored or transmitted in the cloud service, unless such data is encrypted or the encryption can be deactivated for access by the cloud service provider; and- Changes to the operational and/or security configuration of the system components in the production environment, in particular the starting, stopping, deleting or deactivating of system components, if this can affect the confidentiality, integrity or availability of the data of the cloud service customers (also indirectly, e.g. by deactivating the logging and monitoring of security-relevant events).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_administrator_access_with_mfa",
+ "iam_root_mfa_enabled",
+ "iam_user_mfa_enabled_console_access"
+ ]
+ },
+ {
+ "Id": "IAM-06.01AC",
+ "Description": "The cloud service provider maintains an up-to-date inventory of the identities under its responsibility that have privileged access rights.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-06 Identity Lifecycle Management",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Privileged access rights in the sense of the criterion are those that enable employees of the cloud service provider to perform any of the following activities: - Read or write access to the cloud service customers' data processed, stored or transmitted in the cloud service, unless such data is encrypted or the encryption can be deactivated for access by the cloud service provider; and- Changes to the operational and/or security configuration of the system components in the production environment, in particular the starting, stopping, deleting or deactivating of system components, if this can affect the confidentiality, integrity or availability of the data of the cloud service customers (also indirectly, e.g. by deactivating the logging and monitoring of security-relevant events).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "accessanalyzer_enabled",
+ "accessanalyzer_enabled_without_findings"
+ ]
+ },
+ {
+ "Id": "IAM-06.02AC",
+ "Description": "The cloud service provider reviews every six months the list of internal and external employees who are responsible for an identity assigned to a non-human entity within its scope of responsibility.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-06 Identity Lifecycle Management",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Privileged access rights in the sense of the criterion are those that enable employees of the cloud service provider to perform any of the following activities: - Read or write access to the cloud service customers' data processed, stored or transmitted in the cloud service, unless such data is encrypted or the encryption can be deactivated for access by the cloud service provider; and- Changes to the operational and/or security configuration of the system components in the production environment, in particular the starting, stopping, deleting or deactivating of system components, if this can affect the confidentiality, integrity or availability of the data of the cloud service customers (also indirectly, e.g. by deactivating the logging and monitoring of security-relevant events).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-07.01B",
+ "Description": "The cloud service provider implements sufficient partitioning measures between the system components for providing the cloud service and system components of its other information systems, and suitable measures for partitioning between the cloud service customers (cf. OPS-28 and OPS-29).",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-07 Access to Cloud Service Customer Data",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that their contracts with the cloud service provider include a comprehensive list of all instances where the provider might access customer data in an unencrypted form. Cloud service customers verify that these conditions are thoroughly documented before engaging the services, allowing them to make informed decisions about data security and compliance. Cloud service customers ensure through suitable controls that they provide a response to data access requests by the cloud service provider within a specified timeframe as agreed upon in the contractual agreements."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-07.02B",
+ "Description": "The cloud service provider designs the system so that the technical infrastructure is clearly separated from the management tools and the cloud service customer data it hosts.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-07 Access Review and Certification",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-07.03B",
+ "Description": "Unless legally forbidden, the cloud service customer is informed by the cloud service provider whenever internal or external employees of the cloud service provider read or write to the cloud service customer data processed, stored or transmitted in the cloud service or have accessed it without the prior consent of the cloud service customer. The information is provided whenever cloud service customer data is/was accessed in unencrypted form or the contractual agreements with customers do not explicitly exclude informing the customer of such access.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-07 Access Review and Certification",
+ "Type": "Basic",
+ "AboutCriteria": "Access to cloud service customer data also entails disclosure of data as part of investigation requests according to INQ-04. These are to be communicated to cloud service customers as far as it is legally not forbidden.The criteron aims at minimizing the cloud service provider capability to access cloud service customer data. Minimisation of the cloud service providers possibility to access cloud service customer data is often a question of the radius of the collusion circle. I.e. if four-eyes principle for access is applied with the access being logged, then three people build the collusion circle. In order to build trust into such access statements, the cloud service provider should describe in the system description the taken measures to enlarge the collusion circle.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudfront_distributions_origin_traffic_encrypted",
+ "athena_workgroup_encryption",
+ "bedrock_model_invocation_logs_encryption_enabled",
+ "cloudfront_distributions_field_level_encryption_enabled",
+ "cloudtrail_kms_encryption_enabled",
+ "cloudwatch_log_group_kms_encryption_enabled",
+ "dms_endpoint_redis_in_transit_encryption_enabled",
+ "dynamodb_accelerator_cluster_encryption_enabled",
+ "dynamodb_accelerator_cluster_in_transit_encryption_enabled",
+ "dynamodb_tables_kms_cmk_encryption_enabled",
+ "ec2_ebs_default_encryption",
+ "ec2_ebs_volume_encryption",
+ "efs_encryption_at_rest_enabled",
+ "eks_cluster_kms_cmk_encryption_in_secrets_enabled",
+ "elasticache_redis_cluster_in_transit_encryption_enabled",
+ "elasticache_redis_cluster_rest_encryption_enabled",
+ "glue_data_catalogs_connection_passwords_encryption_enabled",
+ "glue_data_catalogs_metadata_encryption_enabled",
+ "glue_development_endpoints_cloudwatch_logs_encryption_enabled",
+ "glue_development_endpoints_job_bookmark_encryption_enabled",
+ "glue_development_endpoints_s3_encryption_enabled",
+ "glue_etl_jobs_amazon_s3_encryption_enabled",
+ "glue_etl_jobs_cloudwatch_logs_encryption_enabled",
+ "glue_etl_jobs_job_bookmark_encryption_enabled",
+ "kafka_cluster_encryption_at_rest_uses_cmk",
+ "kafka_cluster_in_transit_encryption_enabled",
+ "kafka_connector_in_transit_encryption_enabled",
+ "opensearch_service_domains_encryption_at_rest_enabled",
+ "opensearch_service_domains_node_to_node_encryption_enabled",
+ "rds_instance_transport_encrypted",
+ "redshift_cluster_in_transit_encryption_enabled",
+ "s3_bucket_default_encryption",
+ "s3_bucket_kms_encryption",
+ "sagemaker_notebook_instance_encryption_enabled",
+ "sagemaker_training_jobs_intercontainer_encryption_enabled",
+ "sagemaker_training_jobs_volume_and_output_encryption_enabled",
+ "sns_topics_kms_encryption_at_rest_enabled",
+ "sqs_queues_server_side_encryption_enabled",
+ "storagegateway_fileshare_encryption_enabled",
+ "transfer_server_in_transit_encryption_enabled",
+ "workspaces_volume_encryption_enabled"
+ ]
+ },
+ {
+ "Id": "IAM-07.01AS",
+ "Description": "Access to cloud service customer data and cloud service derived data by internal or external employees of the cloud service provider requires the prior consent of an authorised department of the cloud service customer, provided that the cloud service customer's data is accessible in unencrypted form or contractual agreements do not explicitly exclude such consent. Additionally, if encrypted data and its decryption key are stored separately within the same cloud environment, prior consent is required not only for accessing the decryption key but also for accessing the encrypted data itself (potentially together with the key).",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-07 Access Review and Certification",
+ "Type": "Additional (Sharpening)",
+ "AboutCriteria": "Access to cloud service customer data also entails disclosure of data as part of investigation requests according to INQ-04. These are to be communicated to cloud service customers as far as it is legally not forbidden.The criteron aims at minimizing the cloud service provider capability to access cloud service customer data. Minimisation of the cloud service providers possibility to access cloud service customer data is often a question of the radius of the collusion circle. I.e. if four-eyes principle for access is applied with the access being logged, then three people build the collusion circle. In order to build trust into such access statements, the cloud service provider should describe in the system description the taken measures to enlarge the collusion circle.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-07.04B",
+ "Description": "Unless contractually agreed otherwise, the information contains the cause, time, duration, geographic location, type and scope of the access, as well as the retention time of other data generated during access, such as logs or copies containing cloud service customer data. The information is sufficiently detailed to enable subject matter experts of the cloud service customer to assess the risks of the access.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-07 Access Review and Certification",
+ "Type": "Basic",
+ "AboutCriteria": "Subject matter experts in the sense of this basic criterion are personnel from e.g. IT, Compliance or Internal Audit. Access to cloud service customer data also entails disclosure of data as part of investigation requests according to INQ-04. These are to be communicated to cloud service customers as far as it is legally not forbidden.The criteron aims at minimizing the cloud service provider capability to access cloud service customer data. Minimisation of the cloud service providers possibility to access cloud service customer data is often a question of the radius of the collusion circle. I.e. if four-eyes principle for access is applied with the access being logged, then three people build the collusion circle. In order to build trust into such access statements, the cloud service provider should describe in the system description the taken measures to enlarge the collusion circle.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "s3_bucket_server_access_logging_enabled",
+ "cloudtrail_multi_region_enabled",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_logs_s3_bucket_access_logging_enabled",
+ "cloudtrail_multi_region_enabled_logging_management_events",
+ "cloudtrail_s3_dataevents_read_enabled",
+ "cloudtrail_s3_dataevents_write_enabled"
+ ]
+ },
+ {
+ "Id": "IAM-07.02AS",
+ "Description": "For the consent, the cloud service customer's department is provided with meaningful information about the cause, time, duration, geographic location, type and scope of the access, as well as the retention time of other data generated during access, such as logs or copies containing cloud service customer data. The information is sufficiently detailed to enable subject matter experts of the cloud service customer to assess the risks of the access. In addition to the provided information, the cloud service provider specifies a timeframe within which the cloud service customer shall respond to the access request.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-07 Access Review and Certification",
+ "Type": "Additional (Sharpening)",
+ "AboutCriteria": "Subject matter experts in the sense of this basic criterion are personnel from e.g. IT, Compliance or Internal Audit. Access to cloud service customer data also entails disclosure of data as part of investigation requests according to INQ-04. These are to be communicated to cloud service customers as far as it is legally not forbidden.The criteron aims at minimizing the cloud service provider capability to access cloud service customer data. Minimisation of the cloud service providers possibility to access cloud service customer data is often a question of the radius of the collusion circle. I.e. if four-eyes principle for access is applied with the access being logged, then three people build the collusion circle. In order to build trust into such access statements, the cloud service provider should describe in the system description the taken measures to enlarge the collusion circle.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-07.05B",
+ "Description": "The information is provided in accordance with the contractual agreements, but no later than 72 hours from the initiation of the access.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-07 Access Review and Certification",
+ "Type": "Basic",
+ "AboutCriteria": "Access to cloud service customer data also entails disclosure of data as part of investigation requests according to INQ-04. These are to be communicated to cloud service customers as far as it is legally not forbidden.The criteron aims at minimizing the cloud service provider capability to access cloud service customer data. Minimisation of the cloud service providers possibility to access cloud service customer data is often a question of the radius of the collusion circle. I.e. if four-eyes principle for access is applied with the access being logged, then three people build the collusion circle. In order to build trust into such access statements, the cloud service provider should describe in the system description the taken measures to enlarge the collusion circle.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-07.06B",
+ "Description": "The cloud service provider makes available to the cloud service customer, through contractual agreements, prior to offering its services, all instances where cloud service provider access in a non-encrypted form to the cloud service customer data processed, stored or transmitted in the cloud service may occur.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-07 Access Review and Certification",
+ "Type": "Basic",
+ "AboutCriteria": "Access to cloud service customer data also entails disclosure of data as part of investigation requests according to INQ-04. These are to be communicated to cloud service customers as far as it is legally not forbidden.The criteron aims at minimizing the cloud service provider capability to access cloud service customer data. Minimisation of the cloud service providers possibility to access cloud service customer data is often a question of the radius of the collusion circle. I.e. if four-eyes principle for access is applied with the access being logged, then three people build the collusion circle. In order to build trust into such access statements, the cloud service provider should describe in the system description the taken measures to enlarge the collusion circle.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-07.03AS",
+ "Description": "The cloud service provider makes available to the cloud service customer, through contractual agreements, prior to offering its services, all instances where cloud service provider access in a non-encrypted form to the cloud service customer data and cloud service derived data processed, stored or transmitted in the cloud service may occur.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-07 Access Review and Certification",
+ "Type": "Additional (Sharpening)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-07.07B",
+ "Description": "If the cloud service provider offers to its cloud service customers interfaces for administrators and for end users, these interfaces are to be separated from one another, ensuring that access paths for customer administrators differ from those for end users.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-07 Access Review and Certification",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-07.01AC",
+ "Description": "The cloud service provider includes provisions through contractual agreements for cases where the cloud service provider has access in non-encrypted form to the cloud service customer data processed, stored or transmitted in the cloud service, where it is not feasible to seek prior consent. For example, where troubleshooting the service is necessary to ensure that the cloud service customer data remains confidential, available and its integrity preserved.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-07 Access Review and Certification",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Access to cloud service customer data also entails disclosure of data as part of investigation requests according to INQ-04. These are to be communicated to cloud service customers as far as it is legally not forbidden.The criteron aims at minimizing the cloud service provider capability to access cloud service customer data. Minimisation of the cloud service providers possibility to access cloud service customer data is often a question of the radius of the collusion circle. I.e. if four-eyes principle for access is applied with the access being logged, then three people build the collusion circle. In order to build trust into such access statements, the cloud service provider should describe in the system description the taken measures to enlarge the collusion circle.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-07.02AC",
+ "Description": "Before granting internal or external employees direct or indirect access to cloud service customer data, including in support operations, the cloud service provider verifies that the internal or external employees performing the action have passed an appropriate assessment or are supervised by employees who have passed an appropriate assessment (cf. HR-01).",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-07 Access Review and Certification",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Access to cloud service customer data also entails disclosure of data as part of investigation requests according to INQ-04. These are to be communicated to cloud service customers as far as it is legally not forbidden.The criteron aims at minimizing the cloud service provider capability to access cloud service customer data. Minimisation of the cloud service providers possibility to access cloud service customer data is often a question of the radius of the collusion circle. I.e. if four-eyes principle for access is applied with the access being logged, then three people build the collusion circle. In order to build trust into such access statements, the cloud service provider should describe in the system description the taken measures to enlarge the collusion circle.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-07.03AC",
+ "Description": "In the case of supervised access, the cloud service provider ensures that: - The access is performed using mechanisms that allow the supervising employees to authorise or deny individual actions and ask for explanations in real time;- The access rights are revoked at the end of the operation;- The operations performed are logged as administration actions;- The supervision solution includes the authentication of the supervised employee and the device from which the supervised access is performed;- The supervision solution logs the operations proposed by the supervised employee and the actions of the supervisor, including the operations denied by the supervisor; and- The supervision solution prevents information flows toward the supervised employee's device.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-07 Access Review and Certification",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Access to cloud service customer data also entails disclosure of data as part of investigation requests according to INQ-04. These are to be communicated to cloud service customers as far as it is legally not forbidden.The criteron aims at minimizing the cloud service provider capability to access cloud service customer data. Minimisation of the cloud service providers possibility to access cloud service customer data is often a question of the radius of the collusion circle. I.e. if four-eyes principle for access is applied with the access being logged, then three people build the collusion circle. In order to build trust into such access statements, the cloud service provider should describe in the system description the taken measures to enlarge the collusion circle.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-08.01B",
+ "Description": "The allocation of authentication information to access system components used to provide the cloud service to internal and external users of the cloud provider and system components that are involved in automated authorisation processes of the cloud provider is done in an orderly manner that ensures the confidentiality of the information.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-08 Confidentiality of Authentication Information",
+ "Type": "Basic",
+ "AboutCriteria": "Authentication information as referred to in the basic criterion is cloud service provider data.",
+ "ComplementaryCriteria": "If cloud service customers operate virtual machines or containers with the cloud service, they ensure through suitable controls that the confidentiality of the information is also ensured for the allocation of authentication information of the virtual machines or containers."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-08.02B",
+ "Description": "Authentication credentials are managed with a security level that matches or exceeds the classification of the system component they protect.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-08 Identity Governance",
+ "Type": "Basic",
+ "AboutCriteria": "Authentication information as referred to in the basic criterion is cloud service provider data.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_user_mfa_enabled_console_access",
+ "directoryservice_supported_mfa_radius_enabled",
+ "ec2_instance_profile_attached",
+ "iam_root_credentials_management_enabled",
+ "iam_user_with_temporary_credentials",
+ "cognito_user_pool_blocks_compromised_credentials_sign_in_attempts",
+ "bedrock_api_key_no_long_term_credentials"
+ ]
+ },
+ {
+ "Id": "IAM-08.03B",
+ "Description": "If passwords are used as authentication information, their confidentiality is ensured by the following procedures, as far as technically possible: - Users can initially create the password themselves or shall change an initial password when logging on to the system component for the first time. An initial password loses its validity after a maximum of 14 days;- When creating passwords, compliance with the password specifications (cf. IAM-09) is enforced as far as technically possible;- The user is informed about changing or resetting the password; and- The server-side storage takes place using state-of-the-art cryptographic hash functions, except when passwords are stored for subsequent re-use in the plain text form, for example in a password manager. In this case, stored passwords are protected, using a state-of-the-art cryptographic mechanism.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-08 Identity Governance",
+ "Type": "Basic",
+ "AboutCriteria": "Authentication information as referred to in the basic criterion is cloud service provider data.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_password_policy_expires_passwords_within_90_days_or_less",
+ "iam_password_policy_lowercase",
+ "iam_password_policy_minimum_length_14",
+ "iam_password_policy_number",
+ "iam_password_policy_reuse_24",
+ "iam_password_policy_symbol",
+ "iam_password_policy_uppercase"
+ ]
+ },
+ {
+ "Id": "IAM-08.04B",
+ "Description": "Deviations are evaluated by means of a risk analysis and mitigating measures derived from this are implemented.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-08 Identity Governance",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-08.05B",
+ "Description": "The cloud service provider documents, communicates and makes available to all users under its responsibility rules and recommendations for the management of credentials, including at least: - Non-reuse of credentials;- Trade-offs between entropy and ability to memorise;- Recommendations for renewal of passwords;- Rules on storage of passwords;- Confidentially of personal (or shared) authentication and non-sharing of credentials;- Recommendations on password managers; and- Recommendation to specifically address classical attacks, including phishing, social attacks, and whaling.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-08 Identity Governance",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_password_policy_reuse_24",
+ "iam_password_policy_expires_passwords_within_90_days_or_less",
+ "iam_password_policy_number",
+ "iam_password_policy_uppercase",
+ "secretsmanager_secret_rotated_periodically",
+ "iam_administrator_access_with_mfa",
+ "iam_root_hardware_mfa_enabled",
+ "iam_root_mfa_enabled",
+ "iam_user_hardware_mfa_enabled",
+ "iam_user_mfa_enabled_console_access"
+ ]
+ },
+ {
+ "Id": "IAM-08.06B",
+ "Description": "If cryptographic mechanisms are used, they follow the policies and procedures from CRY-01.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-08 Identity Governance",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "acm_certificates_with_secure_key_algorithms",
+ "cloudfront_distributions_field_level_encryption_enabled",
+ "cloudfront_distributions_origin_traffic_encrypted",
+ "glue_development_endpoints_job_bookmark_encryption_enabled",
+ "cloudtrail_kms_encryption_enabled"
+ ]
+ },
+ {
+ "Id": "IAM-08.07B",
+ "Description": "Any password reset procedure is not valid for more than 48 hours and the password is to be changed by the user after the use of the reset procedure.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-08 Identity Governance",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cognito_user_pool_temporary_password_expiration",
+ "iam_password_policy_reuse_24"
+ ]
+ },
+ {
+ "Id": "IAM-08.01AC",
+ "Description": "The users sign a declaration in which they assure that they treat personal (or shared) authentication information confidentially and keep it exclusively for themselves (within the members of the group).",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-08 Identity Governance",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Authentication information as referred to in the basic criterion is cloud service provider data. Insofar as this is legally binding, declarations can be signed using an electronic signature.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-09.01B",
+ "Description": "System components in the cloud service provider's area of responsibility that are used to provide the cloud service authenticate users of the cloud service provider's internal and external employees as well as system components that are involved in the cloud service provider's automated authorisation processes.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-09 Authentication Mechanisms",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": "If cloud service customers operate virtual machines or containers with the cloud service, they ensure through suitable controls that the authentication mechanisms cover container-specific scenarios, such as multi-factor authentication for container hosts and registry access."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-09.02B",
+ "Description": "Access to the production environment requires two-factor or multi-factor authentication.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-09 Identity Analytics",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudtrail_bucket_requires_mfa_delete",
+ "cloudwatch_log_metric_filter_sign_in_without_mfa",
+ "cognito_user_pool_mfa_enabled",
+ "directoryservice_supported_mfa_radius_enabled",
+ "iam_administrator_access_with_mfa",
+ "iam_root_hardware_mfa_enabled",
+ "iam_root_mfa_enabled",
+ "iam_user_hardware_mfa_enabled",
+ "iam_user_mfa_enabled_console_access",
+ "s3_bucket_no_mfa_delete"
+ ]
+ },
+ {
+ "Id": "IAM-09.03B",
+ "Description": "Within the production environment, user authentication takes place through passwords, digitally signed certificates or procedures that achieve at least an equivalent level of security. If digitally signed certificates are used, administration is carried out in accordance with the guideline for key management (cf. CRY-01).",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-09 Identity Analytics",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "glue_data_catalogs_connection_passwords_encryption_enabled",
+ "acm_certificates_with_secure_key_algorithms",
+ "dynamodb_tables_kms_cmk_encryption_enabled",
+ "acm_certificates_expiration_check",
+ "acm_certificates_transparency_logs_enabled",
+ "apigateway_restapi_client_certificate_enabled",
+ "cloudfront_distributions_custom_ssl_certificate",
+ "directoryservice_ldap_certificate_expiration",
+ "elb_ssl_listeners_use_acm_certificate",
+ "iam_no_expired_server_certificates_stored",
+ "rds_instance_certificate_expiration"
+ ]
+ },
+ {
+ "Id": "IAM-09.04B",
+ "Description": "The authentication requirements are derived from a risk assessment and documented, communicated and provided in an authentication policy according to SP-01. Compliance with the requirements is enforced by the configuration of the system components, as far as technically possible. The authentication policy describes at least the following aspects: - The selection of mechanisms suitable for every type of identity and each level of risk;- The protection of credentials used by the authentication mechanism;- The generation and distribution of credentials for new identities;- Rules for the renewal of credentials, including periodic renewals, renewals in case of loss or compromise; and- Rules on the required strength of credentials, together with mechanisms to communicate and enforce the rules.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-09 Identity Analytics",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-09.05B",
+ "Description": "It is ensured that all system components under the responsibility of the cloud service provider used to provide the cloud service are neither acquired nor employed with an unchangeable authentication method.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-09 Identity Analytics",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-09.06B",
+ "Description": "All authentication mechanisms include a mechanism to disable an identity after a predefined number of unsuccessful attempts.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-09 Identity Analytics",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cognito_user_pool_blocks_compromised_credentials_sign_in_attempts",
+ "cognito_user_pool_blocks_potential_malicious_sign_in_attempts",
+ "cognito_user_pool_blocks_compromised_credentials_sign_in_attempts"
+ ]
+ },
+ {
+ "Id": "IAM-09.07B",
+ "Description": "For access to non-personal identities assigned to multiple persons, the cloud service provider implements measures that require the users to be authenticated with their identity assigned to a single person, before being able to access these identities assigned to multiple persons.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-09 Identity Analytics",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "IAM-09.01AC",
+ "Description": "Access to the non-production environment requires two-factor or multi-factor authentication.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-09 Identity Analytics",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudtrail_bucket_requires_mfa_delete",
+ "cloudwatch_log_metric_filter_sign_in_without_mfa",
+ "cognito_user_pool_mfa_enabled",
+ "directoryservice_supported_mfa_radius_enabled",
+ "iam_administrator_access_with_mfa",
+ "iam_root_hardware_mfa_enabled",
+ "iam_root_mfa_enabled",
+ "iam_user_hardware_mfa_enabled",
+ "iam_user_mfa_enabled_console_access",
+ "s3_bucket_no_mfa_delete"
+ ]
+ },
+ {
+ "Id": "IAM-09.02AC",
+ "Description": "Within the non-production environment, users are authenticated using passwords, digitally signed certificates, or procedures that provide at least an equivalent level of security.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-09 Identity Analytics",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "glue_data_catalogs_connection_passwords_encryption_enabled",
+ "acm_certificates_with_secure_key_algorithms",
+ "dynamodb_tables_kms_cmk_encryption_enabled",
+ "acm_certificates_expiration_check",
+ "acm_certificates_transparency_logs_enabled",
+ "apigateway_restapi_client_certificate_enabled",
+ "cloudfront_distributions_custom_ssl_certificate",
+ "directoryservice_ldap_certificate_expiration",
+ "elb_ssl_listeners_use_acm_certificate",
+ "iam_no_expired_server_certificates_stored",
+ "rds_instance_certificate_expiration"
+ ]
+ },
+ {
+ "Id": "IAM-10.01B",
+ "Description": "The cloud service provider ensures that access to its internal data and system functions is controlled and restricted to authorised personnel.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-10 Internal Authorisation Mechanisms",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "accessanalyzer_enabled",
+ "accessanalyzer_enabled_without_findings",
+ "apigateway_restapi_client_certificate_enabled",
+ "apigatewayv2_api_access_logging_enabled",
+ "appstream_fleet_default_internet_access_disabled",
+ "awslambda_function_not_publicly_accessible",
+ "cloudfront_distributions_s3_origin_access_control",
+ "cloudtrail_logs_s3_bucket_access_logging_enabled",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "cloudwatch_log_group_not_publicly_accessible",
+ "codebuild_project_not_publicly_accessible",
+ "cognito_identity_pool_guest_access_disabled",
+ "dms_instance_no_public_access",
+ "dynamodb_table_cross_account_access",
+ "ec2_ebs_snapshot_account_block_public_access",
+ "ec2_instance_profile_attached",
+ "ecr_repositories_not_publicly_accessible",
+ "ecs_task_definitions_containers_readonly_access",
+ "efs_access_point_enforce_root_directory",
+ "efs_access_point_enforce_user_identity",
+ "efs_mount_target_not_publicly_accessible",
+ "efs_not_publicly_accessible",
+ "eks_cluster_not_publicly_accessible",
+ "emr_cluster_publicly_accesible",
+ "eventbridge_bus_cross_account_access",
+ "eventbridge_schema_registry_cross_account_access",
+ "glacier_vaults_policy_public_access",
+ "glue_data_catalogs_not_publicly_accessible",
+ "iam_administrator_access_with_mfa",
+ "iam_group_administrator_access_policy",
+ "iam_inline_policy_no_full_access_to_cloudtrail",
+ "iam_inline_policy_no_full_access_to_kms",
+ "iam_no_root_access_key",
+ "iam_policy_no_full_access_to_cloudtrail",
+ "iam_policy_no_full_access_to_kms",
+ "iam_role_administratoraccess_policy",
+ "iam_role_cross_account_readonlyaccess_policy",
+ "iam_rotate_access_key_90_days",
+ "iam_user_accesskey_unused",
+ "iam_user_administrator_access_policy",
+ "iam_user_console_access_unused",
+ "iam_user_mfa_enabled_console_access",
+ "iam_user_no_setup_initial_access_key",
+ "iam_user_two_active_access_key",
+ "kafka_cluster_unrestricted_access_disabled",
+ "kms_key_not_publicly_accessible",
+ "lightsail_instance_public",
+ "mq_broker_not_publicly_accessible",
+ "opensearch_service_domains_access_control_enabled",
+ "opensearch_service_domains_not_publicly_accessible",
+ "rds_instance_no_public_access",
+ "rds_snapshots_public_access",
+ "redshift_cluster_public_access",
+ "s3_access_point_public_access_block",
+ "s3_account_level_public_access_blocks",
+ "s3_bucket_cross_account_access",
+ "s3_bucket_level_public_access_block",
+ "s3_bucket_policy_public_write_access",
+ "s3_bucket_public_access",
+ "s3_bucket_server_access_logging_enabled",
+ "s3_multi_region_access_point_public_access_block",
+ "sagemaker_notebook_instance_root_access_disabled",
+ "sagemaker_notebook_instance_without_direct_internet_access_configured",
+ "secretsmanager_not_publicly_accessible",
+ "ses_identity_not_publicly_accessible",
+ "sns_topics_not_publicly_accessible",
+ "sqs_queues_not_publicly_accessible",
+ "vpc_peering_routing_tables_with_least_privilege"
+ ]
+ },
+ {
+ "Id": "IAM-10.02B",
+ "Description": "The cloud service provider establishes processes and technical controls to manage and verify access permissions within its internal systems.",
+ "Attributes": [
+ {
+ "Section": "Identity and Access Management (IAM)",
+ "SubSection": "IAM-10 Identity Federation",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "s3_bucket_cross_account_access",
+ "ec2_instance_profile_attached",
+ "accessanalyzer_enabled",
+ "accessanalyzer_enabled_without_findings"
+ ]
+ },
+ {
+ "Id": "CRY-01.01B",
+ "Description": "Policies and instructions with technical and organisational safeguards for cryptographic mechanisms are documented, communicated and provided according to SP-01, in which the following aspects are described: - Usage of encryption procedures and secure network protocols that correspond to the state-of-the-art;- Usage of hash functions and salt values, that both correspond to the state-of-the-art;- Usage of signature schemes that correspond to the state-of-the-art;- Risk-based provisions for the use of encryption and authentication which are aligned with the information classification schemes (cf. AM-09) and consider the communication channel, type, strength and quality of the encryption;- Requirements for the secure generation, storage, archiving, retrieval, distribution, withdrawal, backup, restoration and deletion of the keys;- Requirements for the rotation of cryptographic keys that follow industry best practices and consider the potential risk of information exposure;- Consideration of relevant legal and regulatory obligations and requirements;- Documentation of a change management process for managing cryptographic, encryption, authentication and key management technology changes; and- Consideration of crypto-agility to allow for efficient substitution of implemented cryptographic mechanisms during their intended lifetimes.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-01 Policy for the Use of Cryptographic Mechanisms",
+ "Type": "Basic",
+ "AboutCriteria": "The following Technical Guidelines (valid at the given time) provide recommendations and key lengths for state-of-the-art cryptographic mechanisms: - BSI TR-02102-1 Cryptographic Mechanisms: Recommendations and Key Lengths;- BSI TR-02102-2 Cryptographic Mechanisms: Recommendations and Key Lengths – Use of Transport Layer Security (TLS);- BSI TR-02102-3 Cryptographic Mechanisms: Recommendations and Key Lengths – Use of Internet Protocol Security (IPSec) and Internet Key Exchange (IKEv2) and- BSI TR-02102-4 Cryptographic Mechanisms: Recommendations and Key Lengths – Use of Secure Shell (SSH). If cloud service customers operate virtual machines or containers with the cloud service, appropriate encryption should be provided for virtual machines and containers where possible. A change management process in the sense of the basic criterion can either be covered by the standard change management process described in DEV-03 or can be implemented as a separate process. The risk assessment as part of the Post-Quantum-Cryptography strategy should consider: - The threat landscape posed by advancements in quantum computing;- Advancements in cryptographic mechanisms that are deemed secure against attackers in possession of a quantum computer;- Vulnerabilities inherent to the cryptographic mechanism; and- Vulnerabilities resulting from how cryptographic mechanisms are deployed (e.g. keys which are in use for an extended period of time and the data protected by those keys could already be harvested today and decrypted at a later date).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CRY-01.02B",
+ "Description": "Reviews of policies and instructions regarding cryptographic mechanisms include checks for compliance with the BSI technical guideline for cryptographic mechanisms valid at the given time (BSI TR-02102). Deviations are analysed and documented in a risk assessment. Remediation measures are to be taken based on risk.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-01 Cryptographic Policy",
+ "Type": "Basic",
+ "AboutCriteria": "The following Technical Guidelines (valid at the given time) provide recommendations and key lengths for state-of-the-art cryptographic mechanisms: - BSI TR-02102-1 Cryptographic Mechanisms: Recommendations and Key Lengths;- BSI TR-02102-2 Cryptographic Mechanisms: Recommendations and Key Lengths – Use of Transport Layer Security (TLS);- BSI TR-02102-3 Cryptographic Mechanisms: Recommendations and Key Lengths – Use of Internet Protocol Security (IPSec) and Internet Key Exchange (IKEv2) and- BSI TR-02102-4 Cryptographic Mechanisms: Recommendations and Key Lengths – Use of Secure Shell (SSH). If cloud service customers operate virtual machines or containers with the cloud service, appropriate encryption should be provided for virtual machines and containers where possible. A change management process in the sense of the basic criterion can either be covered by the standard change management process described in DEV-03 or can be implemented as a separate process. The risk assessment as part of the Post-Quantum-Cryptography strategy should consider: - The threat landscape posed by advancements in quantum computing;- Advancements in cryptographic mechanisms that are deemed secure against attackers in possession of a quantum computer;- Vulnerabilities inherent to the cryptographic mechanism; and- Vulnerabilities resulting from how cryptographic mechanisms are deployed (e.g. keys which are in use for an extended period of time and the data protected by those keys could already be harvested today and decrypted at a later date).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CRY-01.01AC",
+ "Description": "The cloud service provider has defined and documented a Post-Quantum-Cryptography (PQC) strategy according to SP-01 to address threats posed by adversaries in possession of a quantum computer.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-01 Cryptographic Policy",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "The following Technical Guidelines (valid at the given time) provide recommendations and key lengths for state-of-the-art cryptographic mechanisms: - BSI TR-02102-1 Cryptographic Mechanisms: Recommendations and Key Lengths;- BSI TR-02102-2 Cryptographic Mechanisms: Recommendations and Key Lengths – Use of Transport Layer Security (TLS);- BSI TR-02102-3 Cryptographic Mechanisms: Recommendations and Key Lengths – Use of Internet Protocol Security (IPSec) and Internet Key Exchange (IKEv2) and- BSI TR-02102-4 Cryptographic Mechanisms: Recommendations and Key Lengths – Use of Secure Shell (SSH). If cloud service customers operate virtual machines or containers with the cloud service, appropriate encryption should be provided for virtual machines and containers where possible. A change management process in the sense of the basic criterion can either be covered by the standard change management process described in DEV-03 or can be implemented as a separate process. The risk assessment as part of the Post-Quantum-Cryptography strategy should consider: - The threat landscape posed by advancements in quantum computing;- Advancements in cryptographic mechanisms that are deemed secure against attackers in possession of a quantum computer;- Vulnerabilities inherent to the cryptographic mechanism; and- Vulnerabilities resulting from how cryptographic mechanisms are deployed (e.g. keys which are in use for an extended period of time and the data protected by those keys could already be harvested today and decrypted at a later date).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CRY-01.02AC",
+ "Description": "The cloud provider's PQC strategy is aligned with cryptography policies and procedures and includes the following aspects: - Maintenance of an inventory of cryptographic mechanisms in use, including priority levels to each inventory item based on the impact and probabilities of the risks posed by quantum computing attacks and the effort to remediate such risks;- Staying informed about encryption measures that are deemed state-of-the-art and secure against adversaries who possess a quantum computer;- Usage of hybrid cryptography models to ensure security for both quantum and non-quantum computing based attacks; and- Definition of trigger events, required resources, transition plans and success criteria for implementation of post-quantum cryptographic mechanisms.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-01 Cryptographic Policy",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "The following Technical Guidelines (valid at the given time) provide recommendations and key lengths for state-of-the-art cryptographic mechanisms: - BSI TR-02102-1 Cryptographic Mechanisms: Recommendations and Key Lengths;- BSI TR-02102-2 Cryptographic Mechanisms: Recommendations and Key Lengths – Use of Transport Layer Security (TLS);- BSI TR-02102-3 Cryptographic Mechanisms: Recommendations and Key Lengths – Use of Internet Protocol Security (IPSec) and Internet Key Exchange (IKEv2) and- BSI TR-02102-4 Cryptographic Mechanisms: Recommendations and Key Lengths – Use of Secure Shell (SSH). If cloud service customers operate virtual machines or containers with the cloud service, appropriate encryption should be provided for virtual machines and containers where possible. A change management process in the sense of the basic criterion can either be covered by the standard change management process described in DEV-03 or can be implemented as a separate process. The risk assessment as part of the Post-Quantum-Cryptography strategy should consider: - The threat landscape posed by advancements in quantum computing;- Advancements in cryptographic mechanisms that are deemed secure against attackers in possession of a quantum computer;- Vulnerabilities inherent to the cryptographic mechanism; and- Vulnerabilities resulting from how cryptographic mechanisms are deployed (e.g. keys which are in use for an extended period of time and the data protected by those keys could already be harvested today and decrypted at a later date).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "sqs_queues_server_side_encryption_enabled",
+ "elbv2_nlb_tls_termination_enabled",
+ "kafka_cluster_mutual_tls_authentication_enabled",
+ "apigateway_restapi_cache_encrypted",
+ "athena_workgroup_encryption",
+ "backup_recovery_point_encrypted",
+ "backup_vaults_encrypted",
+ "bedrock_model_invocation_logs_encryption_enabled",
+ "cloudfront_distributions_field_level_encryption_enabled",
+ "cloudfront_distributions_origin_traffic_encrypted",
+ "cloudtrail_kms_encryption_enabled",
+ "cloudwatch_log_group_kms_encryption_enabled",
+ "codebuild_project_s3_logs_encrypted",
+ "codebuild_report_group_export_encrypted",
+ "dms_endpoint_redis_in_transit_encryption_enabled",
+ "documentdb_cluster_storage_encrypted",
+ "dynamodb_accelerator_cluster_encryption_enabled",
+ "dynamodb_accelerator_cluster_in_transit_encryption_enabled",
+ "dynamodb_tables_kms_cmk_encryption_enabled",
+ "ec2_ebs_default_encryption",
+ "ec2_ebs_snapshots_encrypted",
+ "ec2_ebs_volume_encryption",
+ "efs_encryption_at_rest_enabled",
+ "eks_cluster_kms_cmk_encryption_in_secrets_enabled",
+ "elasticache_redis_cluster_in_transit_encryption_enabled",
+ "elasticache_redis_cluster_rest_encryption_enabled",
+ "firehose_stream_encrypted_at_rest",
+ "glue_data_catalogs_connection_passwords_encryption_enabled",
+ "glue_data_catalogs_metadata_encryption_enabled",
+ "glue_development_endpoints_cloudwatch_logs_encryption_enabled",
+ "glue_development_endpoints_job_bookmark_encryption_enabled",
+ "glue_development_endpoints_s3_encryption_enabled",
+ "glue_etl_jobs_amazon_s3_encryption_enabled",
+ "glue_etl_jobs_cloudwatch_logs_encryption_enabled",
+ "glue_etl_jobs_job_bookmark_encryption_enabled",
+ "glue_ml_transform_encrypted_at_rest",
+ "kafka_cluster_encryption_at_rest_uses_cmk",
+ "kafka_cluster_in_transit_encryption_enabled",
+ "kafka_connector_in_transit_encryption_enabled",
+ "kinesis_stream_encrypted_at_rest",
+ "neptune_cluster_snapshot_encrypted",
+ "neptune_cluster_storage_encrypted",
+ "opensearch_service_domains_encryption_at_rest_enabled",
+ "opensearch_service_domains_node_to_node_encryption_enabled",
+ "rds_cluster_storage_encrypted",
+ "rds_instance_storage_encrypted",
+ "rds_instance_transport_encrypted",
+ "rds_snapshots_encrypted",
+ "redshift_cluster_encrypted_at_rest",
+ "redshift_cluster_in_transit_encryption_enabled",
+ "s3_bucket_default_encryption",
+ "s3_bucket_kms_encryption",
+ "sagemaker_notebook_instance_encryption_enabled",
+ "sagemaker_training_jobs_intercontainer_encryption_enabled",
+ "sagemaker_training_jobs_volume_and_output_encryption_enabled",
+ "sns_topics_kms_encryption_at_rest_enabled",
+ "sqs_queues_server_side_encryption_enabled",
+ "storagegateway_fileshare_encryption_enabled",
+ "transfer_server_in_transit_encryption_enabled",
+ "workspaces_volume_encryption_enabled"
+ ]
+ },
+ {
+ "Id": "CRY-01.03AC",
+ "Description": "The PQC strategy, including the inventory and risk assessment, is reviewed at least annually or in case of significant changes impacting the PQC strategy.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-01 Cryptographic Policy",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CRY-02.01B",
+ "Description": "When implementing changes to cryptographic systems, the cloud service provider performs an evaluation of their potential impact. This process includes an analysis of downstream effects, such as residual risk, costs, and benefits that could arise from the planned changes to prevent any unforeseen consequences on the organisation's cryptographic systems.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-02 Cryptographic Change Management",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that, if notified about any changes to cryptographic systems by the cloud service provider, they engage actively in a thorough evaluation of potential impacts on their usage of the cloud service."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CRY-03.01B",
+ "Description": "The cloud service provider ensures that encryption, authentication and key management practices are regularly audited in accordance with COM-02 to identify and address potential vulnerabilities. At a minimum, reviews are performed annually and immediately following security incidents involving cryptographic components.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-03 Review of Cryptography Practices",
+ "Type": "Basic",
+ "AboutCriteria": "Further criteria for key management are found in criteria CRY-06, CRY-07, CRY-09 - CRY-19",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "acm_certificates_with_secure_key_algorithms",
+ "appsync_graphql_api_no_api_key_authentication",
+ "bedrock_api_key_no_administrative_privileges",
+ "bedrock_api_key_no_long_term_credentials",
+ "iam_no_root_access_key",
+ "iam_rotate_access_key_90_days",
+ "iam_user_accesskey_unused",
+ "iam_user_no_setup_initial_access_key",
+ "iam_user_two_active_access_key",
+ "kms_cmk_are_used",
+ "kms_cmk_not_deleted_unintentionally",
+ "kms_cmk_not_multi_region",
+ "kms_key_not_publicly_accessible",
+ "ec2_ebs_volume_encryption"
+ ]
+ },
+ {
+ "Id": "CRY-04.01B",
+ "Description": "The cloud service provider has established procedures and technical measures for state-of-the-art encryption and authentication for the transmission of cloud service customer data and cloud service derived data both to or by the cloud service provider over public networks. The cloud service provider uses state-of-the-art cryptographic mechanisms to protect the communication during remote access to the production environment, including personnel authentication.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-04 Protection of Data for Transmission (Transport Protection)",
+ "Type": "Basic",
+ "AboutCriteria": "When transmitting data with normal protection requirements within the cloud service provider's infrastructure, encryption is not mandatory provided that the data is not transmitted via public networks. In this case, the non-public environment of the cloud service provider can generally be deemed trusted. Configuration of the TLS protocol should comply with the recommendations of the (current) version of the BSI Technical Guideline TR-02102-2 'Cryptographic Procedures: Recommendations and key lengths. Part 2 - Use of Transport Layer Security (TLS)'. Cipher Suites should provide Perfect Forward Secrecy. Generally, the use of wildcard certificates is not considered a secure procedure.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls for those parts of the cloud service under their responsibility that their data is transmitted over encrypted connections in accordance with the respective protection requirements."
+ }
+ ],
+ "Checks": [
+ "dms_endpoint_redis_in_transit_encryption_enabled",
+ "dynamodb_accelerator_cluster_in_transit_encryption_enabled",
+ "ec2_transitgateway_auto_accept_vpc_attachments",
+ "elasticache_redis_cluster_in_transit_encryption_enabled",
+ "kafka_cluster_in_transit_encryption_enabled",
+ "kafka_connector_in_transit_encryption_enabled",
+ "redshift_cluster_in_transit_encryption_enabled",
+ "transfer_server_in_transit_encryption_enabled"
+ ]
+ },
+ {
+ "Id": "CRY-04.01AS",
+ "Description": "The cloud service provider has established procedures and technical measures for state-of-the-art encryption and authentication for the transmission of all data.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-04 Cryptographic Key Lifecycle",
+ "Type": "Additional (Sharpening)",
+ "AboutCriteria": "When transmitting data with normal protection requirements within the cloud service provider's infrastructure, encryption is not mandatory provided that the data is not transmitted via public networks. In this case, the non-public environment of the cloud service provider can generally be deemed trusted. Configuration of the TLS protocol should comply with the recommendations of the (current) version of the BSI Technical Guideline TR-02102-2 'Cryptographic Procedures: Recommendations and key lengths. Part 2 - Use of Transport Layer Security (TLS)'. Cipher Suites should provide Perfect Forward Secrecy. Generally, the use of wildcard certificates is not considered a secure procedure.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "dms_endpoint_redis_in_transit_encryption_enabled",
+ "dynamodb_accelerator_cluster_in_transit_encryption_enabled",
+ "ec2_transitgateway_auto_accept_vpc_attachments",
+ "elasticache_redis_cluster_in_transit_encryption_enabled",
+ "kafka_cluster_in_transit_encryption_enabled",
+ "kafka_connector_in_transit_encryption_enabled",
+ "redshift_cluster_in_transit_encryption_enabled",
+ "transfer_server_in_transit_encryption_enabled"
+ ]
+ },
+ {
+ "Id": "CRY-05.01B",
+ "Description": "The cloud service provider has established procedures and technical safeguards to encrypt cloud service customer data during storage (i.e. at rest).",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-05 Encryption of Sensitive Data at Rest",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls for those parts of the cloud service under their responsibility (e.g. virtual machines within an IaaS solution), that their data is encrypted during storage in accordance with the respective protection requirements."
+ }
+ ],
+ "Checks": [
+ "efs_encryption_at_rest_enabled",
+ "firehose_stream_encrypted_at_rest",
+ "glue_ml_transform_encrypted_at_rest",
+ "kafka_cluster_encryption_at_rest_uses_cmk",
+ "kinesis_stream_encrypted_at_rest",
+ "opensearch_service_domains_encryption_at_rest_enabled",
+ "redshift_cluster_encrypted_at_rest",
+ "sns_topics_kms_encryption_at_rest_enabled",
+ "backup_recovery_point_encrypted",
+ "dynamodb_accelerator_cluster_encryption_enabled"
+ ]
+ },
+ {
+ "Id": "CRY-05.02B",
+ "Description": "The private keys used for encryption are known only to the cloud service customer in accordance with applicable legal and regulatory obligations and requirements. Exceptions follow a specified procedure.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-05 Data Encryption",
+ "Type": "Basic",
+ "AboutCriteria": "An exception to the requirement that keys are known only to the cloud service customers may be the use of a master key by the cloud service provider. If the cloud service provider uses a master key, the cloud service provider regularly tests the suitability of the design and operating effectiveness of the respective controls. The requirement of 'known to the customer exclusively' means that encryption keys remain solely within the knowledge and control of the owner. This can be addressed by implementing a secure key management system. If a key management system is used, the keys need to be protected from usage not explicitly authorised by the owner of the key and remain inaccessible in plaintext. This criterion does not apply to data that cannot be encrypted for the provision of the cloud service for functional reasons.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudtrail_kms_encryption_enabled",
+ "cloudwatch_log_group_kms_encryption_enabled",
+ "cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk",
+ "dynamodb_tables_kms_cmk_encryption_enabled",
+ "eks_cluster_kms_cmk_encryption_in_secrets_enabled",
+ "iam_inline_policy_no_full_access_to_kms",
+ "iam_policy_no_full_access_to_kms",
+ "kms_cmk_are_used",
+ "kms_cmk_not_deleted_unintentionally",
+ "kms_cmk_not_multi_region",
+ "kms_cmk_rotation_enabled",
+ "kms_key_not_publicly_accessible",
+ "s3_bucket_kms_encryption",
+ "sns_topics_kms_encryption_at_rest_enabled"
+ ]
+ },
+ {
+ "Id": "CRY-05.03B",
+ "Description": "The procedures for the use of private keys, including any exceptions, are contractually agreed with the cloud service customer.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-05 Data Encryption",
+ "Type": "Basic",
+ "AboutCriteria": "An exception to the requirement that keys are known only to the cloud service customers may be the use of a master key by the cloud service provider. If the cloud service provider uses a master key, the cloud service provider regularly tests the suitability of the design and operating effectiveness of the respective controls. The requirement of 'known to the customer exclusively' means that encryption keys remain solely within the knowledge and control of the owner. This can be addressed by implementing a secure key management system. If a key management system is used, the keys need to be protected from usage not explicitly authorised by the owner of the key and remain inaccessible in plaintext. This criterion does not apply to data that cannot be encrypted for the provision of the cloud service for functional reasons.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CRY-05.04B",
+ "Description": "The cloud service provider notifies cloud service customers of security relevant updates of these procedures and technical safeguards and of changes in the storage of cloud service customer data that may affect the confidentiality of the data.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-05 Data Encryption",
+ "Type": "Basic",
+ "AboutCriteria": "An exception to the requirement that keys are known only to the cloud service customers may be the use of a master key by the cloud service provider. If the cloud service provider uses a master key, the cloud service provider regularly tests the suitability of the design and operating effectiveness of the respective controls. The requirement of 'known to the customer exclusively' means that encryption keys remain solely within the knowledge and control of the owner. This can be addressed by implementing a secure key management system. If a key management system is used, the keys need to be protected from usage not explicitly authorised by the owner of the key and remain inaccessible in plaintext. This criterion does not apply to data that cannot be encrypted for the provision of the cloud service for functional reasons.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CRY-05.01AC",
+ "Description": "The cloud service provider ensures that secure encryption mechanisms are in place to prevent the recovery of cloud service customer data when resources are reallocated or physical media are recovered.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-05 Data Encryption",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "An exception to the requirement that keys are known only to the cloud service customers may be the use of a master key by the cloud service provider. If the cloud service provider uses a master key, the cloud service provider regularly tests the suitability of the design and operating effectiveness of the respective controls. The requirement of 'known to the customer exclusively' means that encryption keys remain solely within the knowledge and control of the owner. This can be addressed by implementing a secure key management system. If a key management system is used, the keys need to be protected from usage not explicitly authorised by the owner of the key and remain inaccessible in plaintext. This criterion does not apply to data that cannot be encrypted for the provision of the cloud service for functional reasons.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "apigateway_restapi_cache_encrypted",
+ "athena_workgroup_encryption",
+ "backup_recovery_point_encrypted",
+ "backup_vaults_encrypted",
+ "bedrock_model_invocation_logs_encryption_enabled",
+ "cloudfront_distributions_field_level_encryption_enabled",
+ "cloudfront_distributions_origin_traffic_encrypted",
+ "cloudtrail_kms_encryption_enabled",
+ "cloudwatch_log_group_kms_encryption_enabled",
+ "codebuild_project_s3_logs_encrypted",
+ "codebuild_report_group_export_encrypted",
+ "dms_endpoint_redis_in_transit_encryption_enabled",
+ "documentdb_cluster_storage_encrypted",
+ "dynamodb_accelerator_cluster_encryption_enabled",
+ "dynamodb_accelerator_cluster_in_transit_encryption_enabled",
+ "dynamodb_tables_kms_cmk_encryption_enabled",
+ "ec2_ebs_default_encryption",
+ "ec2_ebs_snapshots_encrypted",
+ "ec2_ebs_volume_encryption",
+ "efs_encryption_at_rest_enabled",
+ "eks_cluster_kms_cmk_encryption_in_secrets_enabled",
+ "elasticache_redis_cluster_in_transit_encryption_enabled",
+ "elasticache_redis_cluster_rest_encryption_enabled",
+ "firehose_stream_encrypted_at_rest",
+ "glue_data_catalogs_connection_passwords_encryption_enabled",
+ "glue_data_catalogs_metadata_encryption_enabled",
+ "glue_development_endpoints_cloudwatch_logs_encryption_enabled",
+ "glue_development_endpoints_job_bookmark_encryption_enabled",
+ "glue_development_endpoints_s3_encryption_enabled",
+ "glue_etl_jobs_amazon_s3_encryption_enabled",
+ "glue_etl_jobs_cloudwatch_logs_encryption_enabled",
+ "glue_etl_jobs_job_bookmark_encryption_enabled",
+ "glue_ml_transform_encrypted_at_rest",
+ "kafka_cluster_encryption_at_rest_uses_cmk",
+ "kafka_cluster_in_transit_encryption_enabled",
+ "kafka_connector_in_transit_encryption_enabled",
+ "kinesis_stream_encrypted_at_rest",
+ "neptune_cluster_snapshot_encrypted",
+ "neptune_cluster_storage_encrypted",
+ "opensearch_service_domains_encryption_at_rest_enabled",
+ "opensearch_service_domains_node_to_node_encryption_enabled",
+ "rds_cluster_storage_encrypted",
+ "rds_instance_storage_encrypted",
+ "rds_instance_transport_encrypted",
+ "rds_snapshots_encrypted",
+ "redshift_cluster_encrypted_at_rest",
+ "redshift_cluster_in_transit_encryption_enabled",
+ "s3_bucket_default_encryption",
+ "s3_bucket_kms_encryption",
+ "sagemaker_notebook_instance_encryption_enabled",
+ "sagemaker_training_jobs_intercontainer_encryption_enabled",
+ "sagemaker_training_jobs_volume_and_output_encryption_enabled",
+ "sns_topics_kms_encryption_at_rest_enabled",
+ "sqs_queues_server_side_encryption_enabled",
+ "storagegateway_fileshare_encryption_enabled",
+ "transfer_server_in_transit_encryption_enabled",
+ "workspaces_volume_encryption_enabled"
+ ]
+ },
+ {
+ "Id": "CRY-06.01B",
+ "Description": "Procedures and technical safeguards for the secure generation of keys for different cryptographic systems and applications are documented and implemented. These safeguards should require the use of secure random bit generators or generation based on keys that were created in this fashion.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-06 Secure Key Generation",
+ "Type": "Basic",
+ "AboutCriteria": "For the definition of secure random number generators, cloud service providers should refer to BSI TR-02102-1 (Chapter 8). The cloud service provider protects the keys which are created and inserted into the cloud service by the cloud service customers according to the same criteria as the keys created by the cloud service provider.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "acm_certificates_with_secure_key_algorithms",
+ "kms_cmk_rotation_enabled",
+ "secretsmanager_automatic_rotation_enabled",
+ "secretsmanager_not_publicly_accessible",
+ "secretsmanager_secret_rotated_periodically",
+ "secretsmanager_secret_unused"
+ ]
+ },
+ {
+ "Id": "CRY-07.01B",
+ "Description": "The cloud service provider has established a schedule for rotating cryptographic keys that aligns with the requirements for cryptographic key rotation established in CRY-01. If, based on the results of a risk analysis, the cloud service provider does not perform key rotation, this decision is transparently communicated to the customer.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-07 Rotation of Cryptographic Keys",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "kms_cmk_rotation_enabled",
+ "secretsmanager_secret_rotated_periodically"
+ ]
+ },
+ {
+ "Id": "CRY-08.01B",
+ "Description": "The cloud service provider has documented and implemented procedures to securely issue and obtain public-key certificates, ensuring the integrity and authenticity of cryptographic keys. These procedures include: - Verification of identity before issuing public-key certificates to ensure they are granted to legitimate entities;- Secure methods for issuing certificates to prevent unauthorised access; and- Procedures for obtaining public-key certificates from trusted Certificate Authorities to ensure the authenticity of the certificates used.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-08 Public-Key Certificate Issuance",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "acm_certificates_with_secure_key_algorithms"
+ ]
+ },
+ {
+ "Id": "CRY-09.01B",
+ "Description": "The cloud service provider has documented and implemented procedures and technical measures to ensure that cryptographic keys are provisioned and activated securely within its area of responsibility. These procedures include the verification of identity and authorisation before provisioning and activating keys to ensure they are granted to legitimate entities.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-09 Secure Key Provisioning",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CRY-09.02B",
+ "Description": "Provisioned keys include activation and deactivation dates to ensure that their use is time limited.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-09 Cryptographic Testing",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_rotate_access_key_90_days",
+ "secretsmanager_automatic_rotation_enabled",
+ "secretsmanager_secret_rotated_periodically",
+ "kms_cmk_rotation_enabled"
+ ]
+ },
+ {
+ "Id": "CRY-10.01B",
+ "Description": "The cloud service provider has documented and implemented technical measures for the secure storage of cryptographic keys. This includes ensuring separation of the key management system from the application and middleware layers, defining how authorised users gain access and addressing the geographic residency of keys to comply with legal, regulatory, and security requirements.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-10 Secure Storage of Keys",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "storagegateway_fileshare_encryption_enabled",
+ "kms_cmk_not_multi_region",
+ "secretsmanager_not_publicly_accessible"
+ ]
+ },
+ {
+ "Id": "CRY-10.01AC",
+ "Description": "For the secure storage of cryptographic keys, the cloud service provider uses a suitable software or hardware security module.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-10 Cryptographic Compliance",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudtrail_kms_encryption_enabled",
+ "storagegateway_fileshare_encryption_enabled",
+ "secretsmanager_automatic_rotation_enabled",
+ "secretsmanager_not_publicly_accessible",
+ "secretsmanager_secret_rotated_periodically",
+ "secretsmanager_secret_unused",
+ "acm_certificates_with_secure_key_algorithms"
+ ]
+ },
+ {
+ "Id": "CRY-11.01B",
+ "Description": "The cloud service provider has documented and implemented procedures and technical measures for the secure archiving of cryptographic keys. These include: - Storage of archived keys in a secure repository to prevent unauthorised access;- Restriction of access to archived keys to authorised personnel based on the principle of least privilege;- Support of later recovery of information through archived keys;- Retention of archived keys only for as long as needed and secure destruction afterwards; and- Logging of all activities related to the storage and recovery of archived keys.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-11 Cryptographic Key Archival",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudtrail_kms_encryption_enabled",
+ "storagegateway_fileshare_encryption_enabled",
+ "secretsmanager_automatic_rotation_enabled",
+ "secretsmanager_not_publicly_accessible",
+ "secretsmanager_secret_rotated_periodically",
+ "secretsmanager_secret_unused",
+ "acm_certificates_with_secure_key_algorithms"
+ ]
+ },
+ {
+ "Id": "CRY-12.01B",
+ "Description": "The cloud service provider has documented and implemented procedures to oversee the transition of cryptographic keys, including their movement into and out of suspension. These procedures ensure that all key transitions are thoroughly monitored, reviewed, and approved to maintain security and compliance with applicable laws and regulations.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-12 Cryptographic Key Transition Management",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CRY-13.01B",
+ "Description": "The cloud service provider manages the use of compromised cryptographic keys to ensure they are only used in controlled circumstances and solely for decryption or verification (in case of signature keys), while adhering to legal and regulatory requirements.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-13 Handling of Compromised Keys",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CRY-13.02B",
+ "Description": "The cloud service provider notifies affected customers without undue delay that their keys have been compromised and will no longer be used for encryption.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-13 Cryptographic Monitoring",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CRY-14.01B",
+ "Description": "The cloud service provider has documented and implemented procedures to deactivate cryptographic keys once they expire. These procedures ensure that: - Expired keys are no longer used for encryption purposes, but may still be used for decryption if necessary;- Expired keys are no longer used for signature creation, but may still be used for signature verification;- Deactivated keys are eventually destroyed when they are no longer required, with relevant metadata retained for auditing; and- All actions related to key deactivation and destruction are recorded in the key management system to maintain a detailed audit log.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-14 Secure Deactivation of Cryptographic Keys",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "secretsmanager_automatic_rotation_enabled",
+ "secretsmanager_secret_rotated_periodically"
+ ]
+ },
+ {
+ "Id": "CRY-15.01B",
+ "Description": "If pre-shared keys or wildcard certificates are used, the cloud service provider has documented and implemented dedicated procedures and technical measures to ensure their secure use and provisioning.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-15 Requirements for Pre-Shared Keys",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CRY-16.01B",
+ "Description": "The cloud service provider has assessed the balance between conducting backups of key material stored in a Hardware Security Module (HSM) for key restoration and building redundancy or comparable measures for securing keys to ensure operational continuity. This assessment includes evaluating the risk of key exposure if control over the key material is lost. Decisions regarding whether to use the backups of keys or to establish redundancy are documented, and the chosen measures are reviewed for their effectiveness and compliance with legal and regulatory requirements.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-16 Operational Continuity for Key Management",
+ "Type": "Basic",
+ "AboutCriteria": "The cloud service provider should consider the following options for safeguarding key material: - Backup of keys: Encrypted backups of keys are stored securely outside the HSM. The backup process should ensure that the keys are encrypted during storage and transit to prevent unauthorised access. Regular testing of backup and recovery procedures should be carried out to verify the effectiveness and integrity of the backups. Backups outside a HSM should only be considered after dilligent risk analysis. - Redundant HSMs: Implementing multiple HSMs in geographically dispersed locations to create redundancy to ensure that keys remain available and secure even if one HSM fails. The HSMs should be synchronised to ensure consistency of key material across all devices. Regular health checks and failover tests are necessary to ensure that redundancy mechanisms function correctly. The particular manner this redundancy is built may depend on the details of the contractual agreements between provider and customer. E.g. when the customer choose a particular location, zone or region, this choice also applies to the redundancy mentioned in this criterion.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "secretsmanager_automatic_rotation_enabled",
+ "secretsmanager_not_publicly_accessible",
+ "secretsmanager_secret_rotated_periodically"
+ ]
+ },
+ {
+ "Id": "CRY-16.02B",
+ "Description": "Procedures for the recovery of lost or corrupted keys are in place.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-16 Cryptographic Governance",
+ "Type": "Basic",
+ "AboutCriteria": "The cloud service provider should consider the following options for safeguarding key material: - Backup of keys: Encrypted backups of keys are stored securely outside the HSM. The backup process should ensure that the keys are encrypted during storage and transit to prevent unauthorised access. Regular testing of backup and recovery procedures should be carried out to verify the effectiveness and integrity of the backups. Backups outside a HSM should only be considered after dilligent risk analysis. - Redundant HSMs: Implementing multiple HSMs in geographically dispersed locations to create redundancy to ensure that keys remain available and secure even if one HSM fails. The HSMs should be synchronised to ensure consistency of key material across all devices. Regular health checks and failover tests are necessary to ensure that redundancy mechanisms function correctly. The particular manner this redundancy is built may depend on the details of the contractual agreements between provider and customer. E.g. when the customer choose a particular location, zone or region, this choice also applies to the redundancy mentioned in this criterion.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "kms_cmk_not_deleted_unintentionally",
+ "backup_vaults_encrypted",
+ "backup_vaults_exist"
+ ]
+ },
+ {
+ "Id": "CRY-17.01B",
+ "Description": "The cloud service provider has documented and implemented procedures and technical measures to monitor and document the lifecycle of cryptographic keys and materials. These measures ensure detailed records of each key from creation to destruction, including any status changes.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-17 Cryptographic Key Lifecycle Management",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CRY-18.01B",
+ "Description": "In the case that external key management systems (KMS) are integrated into the service, the cloud service provider ensures that the procedures and technical measures for the usage of external key management systems (KMS) are established. The following aspects are taken into account: - The external KMS have recognised security certifications that reflect the state of the art to comply with legal, regulatory and contractual requirements;- The integration of the external KMS into the cloud infrastructure is secure to ensure the confidentiality, integrity, and availability of the keys;- Strict access control are implemented to ensure that only authorised users and systems can access the keys (cf. IAM-01);- Procedures for the regular rotation and renewal of keys are defined and implemented to ensure the security of the keys (cf. CRY-07); and- All accesses and operations on the external KMS are logged and monitored to detect and respond to suspicious activities.The cloud service provider ensures that the external KMS is regularly checked for vulnerabilities and updated to meet current threats and technological developments.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-18 Usage of External Key Management Systems",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": "Cloud service customers ensure that their own key management procedures are compatible with the requirements of the external KMS and that they implement appropriate controls to ensure the security of their keys."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CRY-19.01B",
+ "Description": "The cloud service provider implements procedures and technical safeguards to ensure the secure handling of cryptographic keys managed by cloud service customers. In these procedures, the following aspects are considered: - Secure integration of customer-managed keys into the cloud environment;- Logging of all activities related to customer-managed keys; and- Definition of access control mechanisms to enable that only authorised users can gain access to customer-managed keys.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-19 Secure Handling of Customer Managed Keys",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that their agreements with the cloud service provider include robust procedures and technical safeguards for the secure handling of customer-managed cryptographic keys. Cloud service customers ensure that these procedures address the secure integration of their keys into the cloud environment, comprehensive logging of all activities related to their keys, and clearly defined access control mechanisms to restrict access solely to authorised users."
+ }
+ ],
+ "Checks": [
+ "kms_cmk_are_used",
+ "kms_cmk_not_deleted_unintentionally",
+ "kms_cmk_not_multi_region",
+ "kms_cmk_rotation_enabled",
+ "kms_key_not_publicly_accessible"
+ ]
+ },
+ {
+ "Id": "CRY-20.01B",
+ "Description": "The cloud service provider ensures that the procedures and technical measures for cryptography are regularly updated to align with the state of the art. The following aspects are taken into account: - Ensure that all cryptographic guidelines are up to date;- All changes and adjustments to key management procedures are documented and traceable;- A regular review cycle is defined to ensure that the procedures and measures always align with the state of the art; and- Employees responsible for key management are regularly trained and informed about respective changes.",
+ "Attributes": [
+ {
+ "Section": "Cryptography and Key Management (CRY)",
+ "SubSection": "CRY-20 Regular Updates of Cryptographic Mechanisms and Procedures",
+ "Type": "Basic",
+ "AboutCriteria": "The state-of-the-art of cryptographic mechanisms and secure network protocols is specified in the following BSI Technical Guidelines valid at the given time: - BSI TR-02102-1 Cryptographic Mechanisms: Recommendations and Key Lengths;- BSI TR-02102-2 Cryptographic Mechanisms: Use of Transport Layer Security (TLS);- BSI TR-02102-3 Cryptographic Mechanisms: Use of Internet Protocol Security (IPSec) and Internet Key Exchange (IKEv2); and- BSI TR-02102-4 Cryptographic Mechanisms: Use of Secure Shell (SSH).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COS-01.01B",
+ "Description": "Based on the results of a risk analysis carried out according to OIS-07, the cloud service provider has implemented technical safeguards which are suitable to promptly detect and respond to attacks on the network of information systems used for provisioning of the cloud service.",
+ "Attributes": [
+ {
+ "Section": "Communication Security (COS)",
+ "SubSection": "COS-01 Technical Safeguards",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls for parts of the cloud service under their responsibility (e.g. virtual machines within an IaaS solution) that they detect and respond to network-based attacks, based on anomalous inbound and outbound traffic patterns (e.g. MAC spoofing and ARP poisoning attacks) and/or Distributed Denial of Service (DDoS), in a timely manner."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COS-01.02B",
+ "Description": "For these technical safeguards, technologies are used that provide protection and prevention at multiple tiers (defence in depth) within the cloud service to mitigate the risk of a vulnerability or bypass technique being able to effectively breach the deployed defensive systems. This includes network-based cyber attacks such as: - Attacks on the basis of irregular incoming or outgoing traffic patterns;- Distributed Denial-of-Service (DDoS) attacks;- Spoofing attacks;- Code injection attacks;- DNS tunneling; and- IoT attacks targeting devices within a network.",
+ "Attributes": [
+ {
+ "Section": "Communication Security (COS)",
+ "SubSection": "COS-01 Communication Security",
+ "Type": "Basic",
+ "AboutCriteria": "Technical safeguards that provide protection and prevention at multiple tiers are e.g. a special separation in Identity and Access Management, separate logging for protective systems and Web Application Firewalls (WAFs) for accessing protective systems. Network-based attacks can be conducted e.g. with MAC spoofing and ARP poisoning attacks. Technical measures to prevent unknown physical or virtual devices from joining a physical or virtual network can be based on e.g. MACSec according to IEEE 802.1X:2010.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COS-01.03B",
+ "Description": "Data from corresponding technical safeguards implemented (cloud service provider data) is fed into the organisation's SIEM system (cf. OPS-13), so that (counter-) measures regarding correlating events can be initiated. The safeguards are documented, communicated and provided in accordance with SP-01.",
+ "Attributes": [
+ {
+ "Section": "Communication Security (COS)",
+ "SubSection": "COS-01 Communication Security",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COS-01.01AC",
+ "Description": "Technical measures ensure that no unknown (physical or virtual) devices join the cloud service provider's (physical or virtual) network.",
+ "Attributes": [
+ {
+ "Section": "Communication Security (COS)",
+ "SubSection": "COS-01 Communication Security",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Technical safeguards that provide protection and prevention at multiple tiers are e.g. a special separation in Identity and Access Management, separate logging for protective systems and Web Application Firewalls (WAFs) for accessing protective systems. Network-based attacks can be conducted e.g. with MAC spoofing and ARP poisoning attacks. Technical measures to prevent unknown physical or virtual devices from joining a physical or virtual network can be based on e.g. MACSec according to IEEE 802.1X:2010.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COS-02.01B",
+ "Description": "Specific security requirements are designed, published and provided for establishing connections within the cloud service provider's network. The security requirements define for the cloud service provider's area of responsibility: - In which cases the security zones are to be separated and in which cases cloud service customers are to be logically or physically separated;- Which communication relationships and which network and application protocols are permitted in each case;- How the data traffic for administration and monitoring is separated from each on network level;- Which internal, cross-partition communication is permitted; and- Which cross-network communication is allowed. The cloud service provider establishes and maintains an accurate representation of the technical and logical structure of the cloud service provider's systems based on its network topology documentation (cf. COS-07) and asset inventory (cf. AM-02).",
+ "Attributes": [
+ {
+ "Section": "Communication Security (COS)",
+ "SubSection": "COS-02 Security Requirements for Connections in the Cloud Service Provider's Network",
+ "Type": "Basic",
+ "AboutCriteria": "Cross-partition communication can be realised for e.g. individual regions or locations via e.g. WAN, LAN, VPN, RAS.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "vpc_subnet_separate_private_public",
+ "awslambda_function_not_publicly_accessible",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "cloudwatch_log_group_not_publicly_accessible",
+ "codebuild_project_not_publicly_accessible",
+ "ecr_repositories_not_publicly_accessible",
+ "ecs_task_definitions_containers_readonly_access",
+ "efs_mount_target_not_publicly_accessible",
+ "efs_not_publicly_accessible",
+ "eks_cluster_not_publicly_accessible",
+ "glue_data_catalogs_not_publicly_accessible",
+ "kms_key_not_publicly_accessible",
+ "mq_broker_not_publicly_accessible",
+ "opensearch_service_domains_not_publicly_accessible",
+ "secretsmanager_not_publicly_accessible",
+ "ses_identity_not_publicly_accessible",
+ "sns_topics_not_publicly_accessible",
+ "sqs_queues_not_publicly_accessible",
+ "dms_instance_no_public_access",
+ "ec2_ebs_snapshot_account_block_public_access",
+ "glacier_vaults_policy_public_access",
+ "rds_instance_no_public_access",
+ "rds_snapshots_public_access",
+ "redshift_cluster_public_access",
+ "s3_access_point_public_access_block",
+ "s3_account_level_public_access_blocks",
+ "s3_bucket_level_public_access_block",
+ "s3_bucket_public_access",
+ "s3_multi_region_access_point_public_access_block"
+ ]
+ },
+ {
+ "Id": "COS-03.01B",
+ "Description": "The cloud service provider distincts between trusted and untrusted networks. Based on a risk assessment according to OIS-07, these are separated into different security zones for internal and external network areas (and DMZ, if applicable).",
+ "Attributes": [
+ {
+ "Section": "Communication Security (COS)",
+ "SubSection": "COS-03 Monitoring of Connections in the Cloud Service Provider's Network",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that the virtual networks within the cloud service for which they are responsible are designed, configured and documented in accordance with their network security requirements (e.g. logical segmentation of the cloud service customer's organisational units)."
+ }
+ ],
+ "Checks": [
+ "workspaces_vpc_2private_1public_subnets_nat",
+ "vpc_endpoint_connections_trust_boundaries",
+ "networkfirewall_multi_az"
+ ]
+ },
+ {
+ "Id": "COS-03.02B",
+ "Description": "Physical and virtualised network environments are designed and configured to restrict and monitor the established connection to trusted or untrusted networks according to the defined security requirements.",
+ "Attributes": [
+ {
+ "Section": "Communication Security (COS)",
+ "SubSection": "COS-03 Data Transmission Security",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudwatch_changes_to_network_gateways_alarm_configured",
+ "cloudwatch_changes_to_network_route_tables_alarm_configured",
+ "cloudwatch_changes_to_vpcs_alarm_configured"
+ ]
+ },
+ {
+ "Id": "COS-03.03B",
+ "Description": "The cloud service provider ensures that the configuration of networks matches the security requirements (cf. COS-02) regardless of the means used to create the configuration. The cloud service provider reviews at least annually the design and implementation of configuration of the connections with regard to the defined security requirements.",
+ "Attributes": [
+ {
+ "Section": "Communication Security (COS)",
+ "SubSection": "COS-03 Data Transmission Security",
+ "Type": "Basic",
+ "AboutCriteria": "The review of the security requirements depends on the measures implemented to design the networks, e.g. monitoring and reviewing firewall rules or log files for abnormalities as well as visual inspections of physical network components for changes.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COS-03.04B",
+ "Description": "Identified vulnerabilities and deviations are subject to risk assessment in accordance with the risk management procedure (cf. OIS-07) and follow-up measures are defined and tracked (cf. OPS-18).",
+ "Attributes": [
+ {
+ "Section": "Communication Security (COS)",
+ "SubSection": "COS-03 Data Transmission Security",
+ "Type": "Basic",
+ "AboutCriteria": "The review of the security requirements depends on the measures implemented to design the networks, e.g. monitoring and reviewing firewall rules or log files for abnormalities as well as visual inspections of physical network components for changes.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COS-03.05B",
+ "Description": "At specified intervals, the business justification for using all services, protocols, and ports is reviewed. The review also includes the justifications for compensatory measures for the use of protocols that are considered insecure.",
+ "Attributes": [
+ {
+ "Section": "Communication Security (COS)",
+ "SubSection": "COS-03 Data Transmission Security",
+ "Type": "Basic",
+ "AboutCriteria": "The review of the security requirements depends on the measures implemented to design the networks, e.g. monitoring and reviewing firewall rules or log files for abnormalities as well as visual inspections of physical network components for changes.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COS-04.01B",
+ "Description": "Each network perimeter is controlled by security gateways. The system access authorisation for cross-network access is based on a security assessment based on the requirements of the cloud service customers.",
+ "Attributes": [
+ {
+ "Section": "Communication Security (COS)",
+ "SubSection": "COS-04 Cross-Network Access",
+ "Type": "Basic",
+ "AboutCriteria": "Cross-network access is access from one network to another network via a defined network perimeter.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that access is controlled according to their protection needs by security gateways on the perimeters of the virtual networks within the cloud service for which they are responsible."
+ }
+ ],
+ "Checks": [
+ "workspaces_vpc_2private_1public_subnets_nat",
+ "elb_cross_zone_load_balancing_enabled",
+ "eventbridge_bus_cross_account_access"
+ ]
+ },
+ {
+ "Id": "COS-04.01AS",
+ "Description": "Each network perimeter is controlled by redundant and highly available security gateways.",
+ "Attributes": [
+ {
+ "Section": "Communication Security (COS)",
+ "SubSection": "COS-04 Communication Monitoring",
+ "Type": "Additional (Sharpening)",
+ "AboutCriteria": "Cross-network access is access from one network to another network via a defined network perimeter.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "storagegateway_gateway_fault_tolerant",
+ "networkfirewall_multi_az",
+ "directconnect_virtual_interface_redundancy",
+ "workspaces_vpc_2private_1public_subnets_nat"
+ ]
+ },
+ {
+ "Id": "COS-05.01B",
+ "Description": "There are separate networks for the administrative management of the infrastructure and for the operation of management consoles. These networks are logically or physically separated from the cloud service customer's network and protected from unauthorised access by multi-factor authentication (cf. IAM-09).",
+ "Attributes": [
+ {
+ "Section": "Communication Security (COS)",
+ "SubSection": "COS-05 Networks for Administration",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COS-05.02B",
+ "Description": "Networks used by the cloud service provider to migrate or create virtual machines are also physically or logically separated from other networks.",
+ "Attributes": [
+ {
+ "Section": "Communication Security (COS)",
+ "SubSection": "COS-05 Communication Encryption",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "workspaces_vpc_2private_1public_subnets_nat"
+ ]
+ },
+ {
+ "Id": "COS-05.01AC",
+ "Description": "When the administration networks are not physically separated from other networks, the administration flows are protected using a state-of-the-art encrypted communication.",
+ "Attributes": [
+ {
+ "Section": "Communication Security (COS)",
+ "SubSection": "COS-05 Communication Encryption",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COS-06.01B",
+ "Description": "Cloud service customer data traffic in jointly used network environments is separated on network level according to a documented concept to ensure the confidentiality and integrity of the data transmitted.",
+ "Attributes": [
+ {
+ "Section": "Communication Security (COS)",
+ "SubSection": "COS-06 Separation of Data Traffic in Jointly Used Network Environments",
+ "Type": "Basic",
+ "AboutCriteria": "If the cloud service provider does not use shared network environments for cloud service customers and instead uses a physical separation, the basic criterion is not applicable. If the suitability and effectiveness of the logical segmentation cannot be assessed with sufficient certainty (e.g. due to a complex implementation), evidence can also be provided based on audit results of expert third parties (e.g. security audits to validate the concept). The separation of stored and processed data is subject of the criterion OPS-24. After successful authentication via an insecure communication channel (HTTP), a secure communication channel (HTTPS) is to be used. With IaaS/PaaS, secure separation is ensured by physically separated networks or strong encryption of the networks. For the definition of state-of-the-art encryption, the BSI Technical Guideline TR-02102 must be considered (cf. CRY-01).",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls for those parts of the cloud service under their responsibility that virtual networks are designed, configured and documented in accordance with their network security requirements (e.g. logical segmentation of organisational units)."
+ }
+ ],
+ "Checks": [
+ "cloudfront_distributions_origin_traffic_encrypted",
+ "cloudfront_distributions_field_level_encryption_enabled",
+ "dms_endpoint_redis_in_transit_encryption_enabled",
+ "transfer_server_in_transit_encryption_enabled"
+ ]
+ },
+ {
+ "Id": "COS-06.01AC",
+ "Description": "In the case of IaaS/PaaS, the secure separation is ensured by physically separated networks or by means of state-of-the-art encrypted VLANs or other network encapsulating techniques.",
+ "Attributes": [
+ {
+ "Section": "Communication Security (COS)",
+ "SubSection": "COS-06 Communication Authentication",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "If the cloud service provider does not use shared network environments for cloud service customers and instead uses a physical separation, the basic criterion is not applicable. If the suitability and effectiveness of the logical segmentation cannot be assessed with sufficient certainty (e.g. due to a complex implementation), evidence can also be provided based on audit results of expert third parties (e.g. security audits to validate the concept). The separation of stored and processed data is subject of the criterion OPS-24. After successful authentication via an insecure communication channel (HTTP), a secure communication channel (HTTPS) is to be used. With IaaS/PaaS, secure separation is ensured by physically separated networks or strong encryption of the networks. For the definition of state-of-the-art encryption, the BSI Technical Guideline TR-02102 must be considered (cf. CRY-01).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COS-07.01B",
+ "Description": "The documentation of the logical structure of the network used to provide or operate the cloud service is traceable and up-to-date, in order to avoid administrative errors during live operation and to ensure timely recovery in the event of malfunctions in accordance with contractual obligations. The documentation shows how the subnets are allocated, how the network is zoned and segmented, how it connects with third party and public networks and how the data flows between different subnets and system components within the network.",
+ "Attributes": [
+ {
+ "Section": "Communication Security (COS)",
+ "SubSection": "COS-07 Documentation of the Network Topology",
+ "Type": "Basic",
+ "AboutCriteria": "Zoning is a segmentation of the subnets with a firewall implemented at the network perimeters.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COS-07.02B",
+ "Description": "The partions, regions, zones or location in which the cloud service customer data is stored are indicated.",
+ "Attributes": [
+ {
+ "Section": "Communication Security (COS)",
+ "SubSection": "COS-07 Communication Integrity",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COS-07.03B",
+ "Description": "In liaison with the inventory of assets (cf. AM-02), the documentation includes the equipment that provides security functions and the servers that host the data or provide sensitive functions.",
+ "Attributes": [
+ {
+ "Section": "Communication Security (COS)",
+ "SubSection": "COS-07 Communication Integrity",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COS-07.04B",
+ "Description": "The cloud service provider performs a full review of the network topology documentation at least once a year.",
+ "Attributes": [
+ {
+ "Section": "Communication Security (COS)",
+ "SubSection": "COS-07 Communication Integrity",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "vpc_subnet_separate_private_public",
+ "networkfirewall_in_all_vpc",
+ "workspaces_vpc_2private_1public_subnets_nat"
+ ]
+ },
+ {
+ "Id": "COS-08.01B",
+ "Description": "Policies and instructions with technical and organisational safeguards in order to protect the transmission of cloud service customer data, cloud service derived data, cloud service provider data and account data against unauthorised interception, manipulation, copying, modification, redirection, destruction or malware intrusion are documented, communicated and provided according to SP-01. The policies and instructions establish a reference to the Asset Classification and Labelling (cf. AM-09) and cryptography (cf. CRY-01).",
+ "Attributes": [
+ {
+ "Section": "Communication Security (COS)",
+ "SubSection": "COS-08 Policies for Data Transmission",
+ "Type": "Basic",
+ "AboutCriteria": "A safeguard against unauthorised interception, manipulation, copying, modification, redirection or destruction of data during transmission is e.g. the use of transport encryption according to CRY-04.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that the transmitted data transmitted to the cloud service is protected against tampering, copying, modifying, redirecting or deleting in accordance with their protection needs."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COS-08.02B",
+ "Description": "Technical measures outlined in the documented policies and instructions to protect the transmission of data are implemented. These measures are regularly verified to maintain their operating effectiveness.",
+ "Attributes": [
+ {
+ "Section": "Communication Security (COS)",
+ "SubSection": "COS-08 Communication Availability",
+ "Type": "Basic",
+ "AboutCriteria": "A safeguard against unauthorised interception, manipulation, copying, modification, redirection or destruction of data during transmission is e.g. the use of transport encryption according to CRY-04.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "route53_domains_privacy_protection_enabled",
+ "cloudfront_distributions_field_level_encryption_enabled",
+ "dynamodb_accelerator_cluster_in_transit_encryption_enabled",
+ "transfer_server_in_transit_encryption_enabled",
+ "dms_endpoint_redis_in_transit_encryption_enabled",
+ "dynamodb_accelerator_cluster_in_transit_encryption_enabled",
+ "ec2_transitgateway_auto_accept_vpc_attachments",
+ "elasticache_redis_cluster_in_transit_encryption_enabled",
+ "kafka_cluster_in_transit_encryption_enabled",
+ "kafka_connector_in_transit_encryption_enabled",
+ "redshift_cluster_in_transit_encryption_enabled",
+ "transfer_server_in_transit_encryption_enabled"
+ ]
+ },
+ {
+ "Id": "PI-01.01B",
+ "Description": "The cloud service provider establishes and maintains policies and procedures to document how the cloud service can be accessed by other cloud services or IT systems of cloud service customers through documented inbound and outbound interfaces. These policies and procedures specifically address: - The use of standardised communication protocols for interactions between different application interfaces to ensure the confidentiality and integrity of the transmitted information according to its protection requirements, and the adequate authentication of the user;- The use of encryption according to CRY-02 in case of communication over untrusted networks;- The use of standardised data formats and common data processing standards to facilitate information processing interoperability; and- The implementation of mechanisms to validate data integrity and establish backup and recovery processes to ensure data security and reliability during exchange, usage and transfer.",
+ "Attributes": [
+ {
+ "Section": "Portability and Interoperability (PI)",
+ "SubSection": "PI-01 Documentation and Safety of Input and Output Interfaces",
+ "Type": "Basic",
+ "AboutCriteria": "In this context, an interface is a system access point or library function with a well-defined syntax. It comprises documented methods that allow cloud service customers to securely access and interact with the cloud service, enabling the exchange of data. While these interfaces provide the means for communication with the cloud service, they do not imply that cloud service customers can directly connect their custom systems as if they are natively integrated. Instead, cloud service customers can configure their systems by using methods, such as API calls, and adhering to the specified protocols and data formats provided by the cloud service provider. To ensure seamless and secure communication between interfaces, the cloud service provider uses industry-standard API protocols and implements state-of-the-art transport layer security. The cloud service provider supports cross-platform information processing by employing containerisation technologies and cloud-neutral development frameworks. Infrastructre as Code practices are adopted to standardise infrastructre provisioning. Common data usage policies are defined and enforced to ensure consistent and secure access, utilisation and sharing of data. Upon contract termination, the cloud service provider assists customers in exporting and transferring their data, e.g. by providing technical documentation and data export tools.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that the interfaces provided (and their security) are adequate for its protection requirements by means of appropriate checks before the start of use of the cloud service and each time the interfaces are changed."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PI-01.02B",
+ "Description": "The policies and procedures contain clear documentation on the interfaces to provide subject matter experts with detailed guidance to facilitate effective usage for their intended purpose. This documentation is tailored to meet the needs of cloud service customers' subject matter experts and is kept up to date to reflect the current version of the cloud service intended for productive use.",
+ "Attributes": [
+ {
+ "Section": "Portability and Interoperability (PI)",
+ "SubSection": "PI-01 Portability",
+ "Type": "Basic",
+ "AboutCriteria": "In this context, an interface is a system access point or library function with a well-defined syntax. It comprises documented methods that allow cloud service customers to securely access and interact with the cloud service, enabling the exchange of data. While these interfaces provide the means for communication with the cloud service, they do not imply that cloud service customers can directly connect their custom systems as if they are natively integrated. Instead, cloud service customers can configure their systems by using methods, such as API calls, and adhering to the specified protocols and data formats provided by the cloud service provider. To ensure seamless and secure communication between interfaces, the cloud service provider uses industry-standard API protocols and implements state-of-the-art transport layer security. The cloud service provider supports cross-platform information processing by employing containerisation technologies and cloud-neutral development frameworks. Infrastructre as Code practices are adopted to standardise infrastructre provisioning. Common data usage policies are defined and enforced to ensure consistent and secure access, utilisation and sharing of data. Upon contract termination, the cloud service provider assists customers in exporting and transferring their data, e.g. by providing technical documentation and data export tools.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PI-01.01AC",
+ "Description": "The cloud service provider sets up an application firewall to protect the administration interfaces for cloud service customers that are accessible over public networks.",
+ "Attributes": [
+ {
+ "Section": "Portability and Interoperability (PI)",
+ "SubSection": "PI-01 Portability",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "In this context, an interface is a system access point or library function with a well-defined syntax. It comprises documented methods that allow cloud service customers to securely access and interact with the cloud service, enabling the exchange of data. While these interfaces provide the means for communication with the cloud service, they do not imply that cloud service customers can directly connect their custom systems as if they are natively integrated. Instead, cloud service customers can configure their systems by using methods, such as API calls, and adhering to the specified protocols and data formats provided by the cloud service provider. To ensure seamless and secure communication between interfaces, the cloud service provider uses industry-standard API protocols and implements state-of-the-art transport layer security. The cloud service provider supports cross-platform information processing by employing containerisation technologies and cloud-neutral development frameworks. Infrastructre as Code practices are adopted to standardise infrastructre provisioning. Common data usage policies are defined and enforced to ensure consistent and secure access, utilisation and sharing of data. Upon contract termination, the cloud service provider assists customers in exporting and transferring their data, e.g. by providing technical documentation and data export tools.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "networkfirewall_in_all_vpc",
+ "networkfirewall_logging_enabled",
+ "networkfirewall_multi_az",
+ "networkfirewall_policy_default_action_fragmented_packets",
+ "networkfirewall_policy_default_action_full_packets",
+ "networkfirewall_policy_rule_group_associated",
+ "ec2_instance_port_cassandra_exposed_to_internet",
+ "ec2_instance_port_cifs_exposed_to_internet",
+ "ec2_instance_port_elasticsearch_kibana_exposed_to_internet",
+ "ec2_instance_port_ftp_exposed_to_internet",
+ "ec2_instance_port_kafka_exposed_to_internet",
+ "ec2_instance_port_kerberos_exposed_to_internet",
+ "ec2_instance_port_ldap_exposed_to_internet",
+ "ec2_instance_port_memcached_exposed_to_internet",
+ "ec2_instance_port_mongodb_exposed_to_internet",
+ "ec2_instance_port_mysql_exposed_to_internet",
+ "ec2_instance_port_oracle_exposed_to_internet",
+ "ec2_instance_port_postgresql_exposed_to_internet",
+ "ec2_instance_port_rdp_exposed_to_internet",
+ "ec2_instance_port_redis_exposed_to_internet",
+ "ec2_instance_port_sqlserver_exposed_to_internet",
+ "ec2_instance_port_ssh_exposed_to_internet",
+ "ec2_instance_port_telnet_exposed_to_internet",
+ "ec2_networkacl_allow_ingress_any_port",
+ "ec2_networkacl_allow_ingress_tcp_port_22",
+ "ec2_networkacl_allow_ingress_tcp_port_3389",
+ "ec2_securitygroup_allow_ingress_from_internet_to_all_ports",
+ "ec2_securitygroup_allow_ingress_from_internet_to_any_port",
+ "ec2_securitygroup_allow_ingress_from_internet_to_high_risk_tcp_ports",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_3389",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_cassandra_7199_9160_8888",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_elasticsearch_kibana_9200_9300_5601",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_ftp_20_21",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_kafka_9092",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_memcached_11211",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_mongodb_27017_27018",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_mysql_3306",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_oracle_1521_2483",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_postgres_5432",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_redis_6379",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_sql_server_1433_1434",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_telnet_23"
+ ]
+ },
+ {
+ "Id": "PI-01.02AC",
+ "Description": "The cloud service provides cloud service customers with interfaces for custom identity providers to manage cloud user access information and authentication. These interfaces are accompanied by a standardised protocol to facilitate communication between the cloud service and the external identity provider.",
+ "Attributes": [
+ {
+ "Section": "Portability and Interoperability (PI)",
+ "SubSection": "PI-01 Portability",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "In this context, an interface is a system access point or library function with a well-defined syntax. It comprises documented methods that allow cloud service customers to securely access and interact with the cloud service, enabling the exchange of data. While these interfaces provide the means for communication with the cloud service, they do not imply that cloud service customers can directly connect their custom systems as if they are natively integrated. Instead, cloud service customers can configure their systems by using methods, such as API calls, and adhering to the specified protocols and data formats provided by the cloud service provider. To ensure seamless and secure communication between interfaces, the cloud service provider uses industry-standard API protocols and implements state-of-the-art transport layer security. The cloud service provider supports cross-platform information processing by employing containerisation technologies and cloud-neutral development frameworks. Infrastructre as Code practices are adopted to standardise infrastructre provisioning. Common data usage policies are defined and enforced to ensure consistent and secure access, utilisation and sharing of data. Upon contract termination, the cloud service provider assists customers in exporting and transferring their data, e.g. by providing technical documentation and data export tools.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PI-01.03AC",
+ "Description": "The interfaces are clearly documented to enable subject matter experts of the cloud user to integrate their identity provider with the cloud service.",
+ "Attributes": [
+ {
+ "Section": "Portability and Interoperability (PI)",
+ "SubSection": "PI-01 Portability",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "In this context, an interface is a system access point or library function with a well-defined syntax. It comprises documented methods that allow cloud service customers to securely access and interact with the cloud service, enabling the exchange of data. While these interfaces provide the means for communication with the cloud service, they do not imply that cloud service customers can directly connect their custom systems as if they are natively integrated. Instead, cloud service customers can configure their systems by using methods, such as API calls, and adhering to the specified protocols and data formats provided by the cloud service provider. To ensure seamless and secure communication between interfaces, the cloud service provider uses industry-standard API protocols and implements state-of-the-art transport layer security. The cloud service provider supports cross-platform information processing by employing containerisation technologies and cloud-neutral development frameworks. Infrastructre as Code practices are adopted to standardise infrastructre provisioning. Common data usage policies are defined and enforced to ensure consistent and secure access, utilisation and sharing of data. Upon contract termination, the cloud service provider assists customers in exporting and transferring their data, e.g. by providing technical documentation and data export tools.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PI-02.01B",
+ "Description": "In contractual agreements, the following aspects are defined for provisioning of data, insofar as these are applicable to the cloud service: - Type, scope and format of the cloud service customer data the cloud service provider provides to the cloud service customer;- Delivery methods of the data to the cloud service customer;- Conditions and timeframes for cloud service customer data provisioning throughout the duration of the contractual relationship;- Right of termination of the contract and definition of the timeframe, within which the cloud service provider makes the cloud service customer data available to the cloud service customer after termination of the contract;- Definition of the point in time as of which the cloud service provider makes the cloud service customer data inaccessible to the cloud service customer and deletes these after termination of the contract;- The cloud service customers' responsibilities and obligations to cooperate for the provision of the cloud service customer data; and- Cloud service customer data remains the property of the cloud service customer throughout the entire contractual relationship. After its termination, the data is once again the sole property and possession of the cloud service customer. The definitions are based on the needs of subject matter experts of potential customers who assess the suitability of the cloud service with regard to a dependency on the cloud service provider as well as legal and regulatory requirements.",
+ "Attributes": [
+ {
+ "Section": "Portability and Interoperability (PI)",
+ "SubSection": "PI-02 Contractual Agreements for the Provision of Data",
+ "Type": "Basic",
+ "AboutCriteria": "The type and scope of the data and the responsibilities for its provision depend on the service model of the cloud service or the services and functions provided: In the case of IaaS- and PaaS-like services, the cloud service customer is generally responsible for extracting and backing up the data which is stored in the cloud service before termination of the contractual relationship (cf. complementary requirement). The cloud service provider's responsibility is typically limited to the provision of data for the configuration of the infrastructure or platform that the cloud service customer has set up within its environment (e.g. configuration of networks, images of virtual machines and containers). With SaaS, the cloud service customer typically relies on export functions provided by the cloud service provider. Data created by the cloud service customer should be available in the same format as stored in the cloud service. Other data, including relevant log files and metadata, should be available in an applicable standard format, such as CSV, JSON or XML. In Germany, legal requirements for retention can be found, for example, in the German Tax Code (§147 AO) and the German Commercial Code (§257 HGB). These provide for a retention obligation of six or ten years. If contractual agreements do not include the aspects listed in the basic criterion, although these aspects are applicable to the cloud service due to its service model, the criterion is not met and a deviation is to be noted by the auditor.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that the data to which they are contractually entitled is requested from the cloud service provider at the end of the contract or accessed via defined interfaces (the type and scope of the data correspond to the contractual agreements that were concluded prior to the use of the cloud service) and that it is stored in accordance with the legal requirements applicable to this data."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PI-02.01AC",
+ "Description": "The design of the aspects is based on legal and regulatory requirements in the environment of the cloud service provider. The cloud service provider identifies the requirements regularly, at least once a year, and checks these for actuality and adjusts the contractual agreements accordingly.",
+ "Attributes": [
+ {
+ "Section": "Portability and Interoperability (PI)",
+ "SubSection": "PI-02 Interoperability",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "The type and scope of the data and the responsibilities for its provision depend on the service model of the cloud service or the services and functions provided: In the case of IaaS- and PaaS-like services, the cloud service customer is generally responsible for extracting and backing up the data which is stored in the cloud service before termination of the contractual relationship (cf. complementary requirement). The cloud service provider's responsibility is typically limited to the provision of data for the configuration of the infrastructure or platform that the cloud service customer has set up within its environment (e.g. configuration of networks, images of virtual machines and containers). With SaaS, the cloud service customer typically relies on export functions provided by the cloud service provider. Data created by the cloud service customer should be available in the same format as stored in the cloud service. Other data, including relevant log files and metadata, should be available in an applicable standard format, such as CSV, JSON or XML. In Germany, legal requirements for retention can be found, for example, in the German Tax Code (§147 AO) and the German Commercial Code (§257 HGB). These provide for a retention obligation of six or ten years. If contractual agreements do not include the aspects listed in the basic criterion, although these aspects are applicable to the cloud service due to its service model, the criterion is not met and a deviation is to be noted by the auditor.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PI-02.02AC",
+ "Description": "The cloud service provider also provides cloud service derived data to the cloud service customer upon termination of the contractual relationship. The provision of this data is also defined in the contractual agreements and includes the aspects specified in the basic criterion.",
+ "Attributes": [
+ {
+ "Section": "Portability and Interoperability (PI)",
+ "SubSection": "PI-02 Interoperability",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "The type and scope of the data and the responsibilities for its provision depend on the service model of the cloud service or the services and functions provided: In the case of IaaS- and PaaS-like services, the cloud service customer is generally responsible for extracting and backing up the data which is stored in the cloud service before termination of the contractual relationship (cf. complementary requirement). The cloud service provider's responsibility is typically limited to the provision of data for the configuration of the infrastructure or platform that the cloud service customer has set up within its environment (e.g. configuration of networks, images of virtual machines and containers). With SaaS, the cloud service customer typically relies on export functions provided by the cloud service provider. Data created by the cloud service customer should be available in the same format as stored in the cloud service. Other data, including relevant log files and metadata, should be available in an applicable standard format, such as CSV, JSON or XML. In Germany, legal requirements for retention can be found, for example, in the German Tax Code (§147 AO) and the German Commercial Code (§257 HGB). These provide for a retention obligation of six or ten years. If contractual agreements do not include the aspects listed in the basic criterion, although these aspects are applicable to the cloud service due to its service model, the criterion is not met and a deviation is to be noted by the auditor.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PI-03.01B",
+ "Description": "The cloud service provider's procedures for deleting cloud service customer data, cloud service derived data and Account data upon termination of the contractual relationship ensure compliance with the contractual agreements (cf. PI-02), except as required by a valid court order or as needed to fulfil known future financial and legal obligations.",
+ "Attributes": [
+ {
+ "Section": "Portability and Interoperability (PI)",
+ "SubSection": "PI-03 Secure Deletion of Data",
+ "Type": "Basic",
+ "AboutCriteria": "Suitable methods for data deletion are e.g. multiple overwriting or deletion of the encryption key.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that the legal and regulatory framework (e.g. legal requirements for storage and deletion) is identified and that the deletion of their data is initiated accordingly."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PI-03.02B",
+ "Description": "The deletion procedures prevent recovery by state-of-the-art forensic means.",
+ "Attributes": [
+ {
+ "Section": "Portability and Interoperability (PI)",
+ "SubSection": "PI-03 Data Portability",
+ "Type": "Basic",
+ "AboutCriteria": "Suitable methods for data deletion are e.g. multiple overwriting or deletion of the encryption key.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudwatch_log_group_retention_policy_specific_days_enabled",
+ "kinesis_stream_data_retention_period",
+ "neptune_cluster_backup_enabled"
+ ]
+ },
+ {
+ "Id": "PI-03.03B",
+ "Description": "The cloud service provider documents the deletion of the cloud service customer data, cloud service derived data and Account data in a manner that enables the cloud service customer to obtain proof of the deletion of its data.",
+ "Attributes": [
+ {
+ "Section": "Portability and Interoperability (PI)",
+ "SubSection": "PI-03 Data Portability",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-01.01B",
+ "Description": "Policies and instructions with technical and organisational measures for the secure development of system components of the cloud service are documented, communicated and provided in accordance with SP-01. The policies and instructions contain guidelines for the entire life cycle of the cloud service and are based on recognised standards and methods with regard to the following aspects: - Security and quality in software development (requirements, design, implementation, testing and verification) including the existence of a security by design principle, enforcing the consideration of information security requirements in the software development phase;- Security and quality in software deployment (including continuous delivery);- Security and quality in operation (reaction to identified faults and vulnerabilities); and- Secure coding standards and practices (reducing the introduction of vulnerabilities in code).",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-01 Policies for the Development/Procurement of System Components",
+ "Type": "Basic",
+ "AboutCriteria": "The software provision can be carried out e.g. with Continuous Delivery methods. Accepted standards and methods for secure development are, for example: - ISO/IEC 27034; and- OWASP Secure Software Development Lifecycle (S-SDLC).Minimisation of customer data access during operation can be supported by following robust security models, such as Zero Trust, during cloud architecture development. Furthermore, aspects such as limiting data interfaces, API calls and access as well as ensuring end-to-end-encryption from transit to storage are relevant considerations. For quality assurance in software development, the following can be considered to be relevant processes: - Planning and definition of quality objectives: Definition of quality requirements based on customer needs and objectives, taking into account the requirements of the cloud system to be developed.- Design phase: Carrying out design reviews and inspections of the cloud service to ensure that the design meets the quality requirements.- Development phase: Use of code reviews and pair programming to ensure code quality. Use of static analysis tools to check the code for potential errors and violations of coding standards.- Testing phase: Execution (automated where possible) of various types of tests (e.g. unit tests, integration tests, system tests, acceptance tests) to ensure the functionality and quality of the software.- Integration and continuous integration (CI): Integration of the various software components and continuous checking of the integrations through automated builds and tests. Use of CI/CD pipelines to ensure that the code is regularly integrated and tested.- Release and deployment: Preparation and implementation of the software release in accordance with defined quality standards.- Maintenance and continuous improvement: Monitoring the software in operation to ensure that it continues to meet the quality requirements. This includes post release activities such as bug fixing and performance optimisation processes. Additionally, post-mortem analyses should be performed to learn from incidents and optimise processes for future releases. An accepted standard and a method for quality in development processes is, for example, Google Site Reliability Engineering (SRE). The scope of the DEV criteria and the requirements within includes not only the development of software applications but also platforms, virtual infrastructure, and other system components.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-01.02B",
+ "Description": "Guidelines for the secure development of the cloud service define principles to ensure the system architecture and software operated by the cloud service provider within the production environment are designed in such a way that access to cloud service customer data by the cloud service provider is minimised wherever possible.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-01 Development Security",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-01.03B",
+ "Description": "The policies and instructions for the secure development of system components of the cloud service include measures for the enforcement of specified standards and guidelines, including any applicable automated tools.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-01 Development Security",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "codebuild_report_group_export_encrypted",
+ "codebuild_project_user_controlled_buildspec"
+ ]
+ },
+ {
+ "Id": "DEV-01.01AC",
+ "Description": "In procurement, products are preferred which have been certified according to the 'Common Criteria for Information Technology Security Evaluation' (short: Common Criteria - CC) Evaluation Assurance Level EAL 4. If non-certified products are to be procured for available certified products, a risk assessment is carried out in accordance with OIS-07.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-01 Development Security",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "The software provision can be carried out e.g. with Continuous Delivery methods. Accepted standards and methods for secure development are, for example: - ISO/IEC 27034; and- OWASP Secure Software Development Lifecycle (S-SDLC).Minimisation of customer data access during operation can be supported by following robust security models, such as Zero Trust, during cloud architecture development. Furthermore, aspects such as limiting data interfaces, API calls and access as well as ensuring end-to-end-encryption from transit to storage are relevant considerations. For quality assurance in software development, the following can be considered to be relevant processes: - Planning and definition of quality objectives: Definition of quality requirements based on customer needs and objectives, taking into account the requirements of the cloud system to be developed.- Design phase: Carrying out design reviews and inspections of the cloud service to ensure that the design meets the quality requirements.- Development phase: Use of code reviews and pair programming to ensure code quality. Use of static analysis tools to check the code for potential errors and violations of coding standards.- Testing phase: Execution (automated where possible) of various types of tests (e.g. unit tests, integration tests, system tests, acceptance tests) to ensure the functionality and quality of the software.- Integration and continuous integration (CI): Integration of the various software components and continuous checking of the integrations through automated builds and tests. Use of CI/CD pipelines to ensure that the code is regularly integrated and tested.- Release and deployment: Preparation and implementation of the software release in accordance with defined quality standards.- Maintenance and continuous improvement: Monitoring the software in operation to ensure that it continues to meet the quality requirements. This includes post release activities such as bug fixing and performance optimisation processes. Additionally, post-mortem analyses should be performed to learn from incidents and optimise processes for future releases. An accepted standard and a method for quality in development processes is, for example, Google Site Reliability Engineering (SRE). The scope of the DEV criteria and the requirements within includes not only the development of software applications but also platforms, virtual infrastructure, and other system components.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-02.01B",
+ "Description": "In the case of outsourced development of the cloud service (or individual system components), specifications regarding the following aspects are contractually agreed between the cloud service provider and the outsourced development contractor: - Security in software development (requirements, design, implementation, tests and verifications) in accordance with recognised standards and methods, ensuring a security level equivalent to that of the cloud service provider's internal development;- Acceptance testing of the quality of the services provided in accordance with the agreed functional and non-functional requirements; and- Providing evidence that sufficient verifications have been carried out to rule out the existence of known vulnerabilities. Before subcontracting the development of the cloud service or components thereof, the cloud service provider conducts a risk assessment according to SSO-02 that considers at least the following aspects: - Management of source code by the subcontractor;- Availability of source code to the cloud service provider and where applicable, to evaluators;- Human resource procedures implemented by the subcontractor;- Required access to the cloud service provider's development, test and preproduction environments; and- Security procedures related to the management of the subcontractor's service organisations.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-02 Outsourcing of the Development",
+ "Type": "Basic",
+ "AboutCriteria": "Outsourced development in the sense of the basic criterion refers to the development of system components used specifically for the cloud service, by a contractor of the cloud service provider. The development takes place according to the processes of the contractor. The purchase of software available on the market as well as the integration of external employees into the processes of the cloud service provider do not constitute outsourcing in the sense of this basic criterion.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudformation_stack_outputs_find_secrets",
+ "codebuild_project_user_controlled_buildspec",
+ "codebuild_project_source_repo_url_no_sensitive_credentials",
+ "codebuild_report_group_export_encrypted"
+ ]
+ },
+ {
+ "Id": "DEV-02.01AC",
+ "Description": "The cloud service provider documents and implements a procedure that makes it possible to supervise and control the outsourced development activity, in order to ensure that the outsourced development activity is compliant with the secure development policy of the cloud service provider and makes it possible to achieve a level of security of the external development that matches that of internal development.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-02 Secure Development",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "codebuild_report_group_export_encrypted",
+ "codebuild_project_s3_logs_encrypted",
+ "codebuild_project_user_controlled_buildspec",
+ "apigateway_restapi_cache_encrypted"
+ ]
+ },
+ {
+ "Id": "DEV-02.02AC",
+ "Description": "Personnel of the cloud service provider run the tests that are relevant for the deployment decision when a change includes the result of outsourced development.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-02 Secure Development",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-03.01B",
+ "Description": "Policies and instructions with technical and organisational safeguards for change management of system components of the cloud service are documented, communicated and provided according to SP-01 with regard to the following aspects: - Criteria for risk assessment, categorisation and prioritisation of changes and related requirements for the type and scope of testing to be performed, and necessary approvals for the development/implementation of the change and releases for deployment in the production environment by authorised personnel or system components;- Requirements for the performance and documentation of tests;- Requirements for separation of duties during development, testing and release of changes;- Requirements for the proper information of cloud service customers about the type and scope of the change as well as the resulting obligations to cooperate in accordance with the contractual agreements;- Requirements for the documentation of changes in system, operational and user documentation;- Requirements for the implementation and documentation of emergency changes that shall, to the extent possible in the emergency, comply with the same level of security as normal changes;- Requirements for the handling of a change's unexpected effects, including corrective actions; and- Requirements for the development of security features that implement technical mechanisms and safeguards, with increased testing requirements.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-03 Policies for Changes to System Components",
+ "Type": "Basic",
+ "AboutCriteria": "Changes in the sense of the basic criterion are those that can lead to changes in the configuration, functionality or security of system components of the cloud service in the production environment. This includes changes to the infrastructure as well as to the source code. If individual changes are combined in a new release, update, patch or comparable software object for the purpose of software provisioning, this software object is deemed to be a change within the meaning of the basic criterion, but not the individual changes contained therein. Changes to the existing network configuration also fall under this criterion and should also undergo a specified procedure, as they are necessary for effective separation of cloud service customers. Changes to the container environments, including the management of container images and versions, should also go through a regulated process. Personnel and system components receive authorisation to approve changes in accordance with the requirements for access and access authorisations (cf. IAM-01) via a specified procedure (cf. IAM-02). Relevant information includes descriptions of e.g. new functions. The cloud service customer's obligations to cooperate can define that, e.g. the cloud service customer has to carry out certain tests. A centralised change management process is not mandatory. The cloud service provider has the flexibility to adopt change management practices that best fit its operational needs, including agile methods, as long as they adhere to the technical and organisational safeguards.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-04.01B",
+ "Description": "The cloud service provider provides a training programme for regular, target group-oriented security training and awareness for internal and external employees on standards and methods for: - Secure software development and provision as well as on how to use the tools used for this purpose; and- Risks linked to malicious code and best practices to reduce the impact of an infection.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-04 Safety Training and Awareness Programme Regarding Continuous Software Delivery and Associated Systems, Components or Tools",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-04.02B",
+ "Description": "The programme is regularly reviewed and updated with regard to the applicable policies and instructions, the assigned roles and responsibilities and the tools used.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-04 Security Requirements",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-05.01B",
+ "Description": "Design documentation for security features shall be based on a security analysis of the adequacy and planned effectiveness of the features. This documentation shall include a specification of expected inputs, outputs and possible errors.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-05 Design Documentation for Security Features",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-06.01B",
+ "Description": "In accordance with the applicable policies (cf. DEV-03), changes are subjected to a risk assessment regarding the likelihood of adversely effects on system components concerned and dependencies with other changes, and are categorised and prioritised accordingly.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-06 Risk Assessment, Categorisation and Prioritisation of Changes",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-06.02B",
+ "Description": "If the risk associated to a planned change is high, then appropriate mitigation measures are taken before deploying the change in the cloud service's production environment.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-06 Security Design",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-06.01AC",
+ "Description": "In accordance with the contractual agreements, meaningful information about the occasion, time, duration, type and scope of the change is submitted to authorised bodies of the cloud service customer so that they can carry out their own risk assessment before the change is made available in the production environment. Regardless of the contractual agreements, this is done for changes that have the highest risk category based on their risk assessment.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-06 Security Design",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-07.01B",
+ "Description": "Changes to the cloud service are subject to appropriate testing according to documented test procedures during software development and deployment.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-07 Testing Changes",
+ "Type": "Basic",
+ "AboutCriteria": "Tests should be used that contribute to the quality assurance of the software development as well as to the security of the cloud service. The errors and vulnerabilities identified in tests can be assessed, for example, according to the Common Vulnerability Scoring System (CVSS).",
+ "ComplementaryCriteria": "Where changes are to be tested by the cloud service customers in accordance with the contractual agreements prior to deployment in the production environment, the cloud service customers ensure through suitable controls that the tests are performed appropriately to identify errors. In particular, this includes timely execution of the tests by qualified personnel in accordance with the conditions specified by the cloud service provider."
+ }
+ ],
+ "Checks": [
+ "s3_bucket_object_versioning",
+ "secretsmanager_secret_rotated_periodically"
+ ]
+ },
+ {
+ "Id": "DEV-07.02B",
+ "Description": "The type and scope of the tests correspond to the risk assessment. The tests are carried out by appropriately qualified personnel of the cloud service provider or by automated test procedures that comply with the state-of-the-art. Cloud service customers are involved into the tests in accordance with the contractual requirements.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-07 Security Implementation",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "backup_vaults_encrypted",
+ "backup_recovery_point_encrypted"
+ ]
+ },
+ {
+ "Id": "DEV-07.03B",
+ "Description": "Before using cloud service customer data for tests, the cloud service provider first obtains approval from that cloud service customer and anonymises the cloud service customer data. The cloud service provider ensures the confidentiality of the data during the whole process.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-07 Security Implementation",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudfront_distributions_field_level_encryption_enabled",
+ "cloudfront_distributions_origin_traffic_encrypted"
+ ]
+ },
+ {
+ "Id": "DEV-07.04B",
+ "Description": "The tests of the security features provide full coverage of the specification, including all specified error conditions. The documentation of these tests includes at least a description of the test, the initial conditions, the expected outcome and instructions for running the test.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-07 Security Implementation",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-07.05B",
+ "Description": "The severity of the errors and vulnerabilities identified in the tests, which are relevant for the deployment decision, is determined according to defined criteria and actions for timely remediation or mitigation are initiated.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-07 Security Implementation",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "ecr_repositories_scan_vulnerabilities_in_latest_image"
+ ]
+ },
+ {
+ "Id": "DEV-07.01AC",
+ "Description": "Pre-launch penetration tests are carried out during the test phase of the cloud service in accordance with the penetration test concept (cf. OPS-22 additional criterion). The severity of identified vulnerabilities is assessed according to defined criteria and actions for timely remediation or mitigation are initiated.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-07 Security Implementation",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Tests should be used that contribute to the quality assurance of the software development as well as to the security of the cloud service. The errors and vulnerabilities identified in tests can be assessed, for example, according to the Common Vulnerability Scoring System (CVSS).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-08.01B",
+ "Description": "System components for version control and software deployment that are used to manage changes to system components of the cloud service in the production environment are subject to a role and rights concept according to IAM-01 and authorisation mechanisms.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-08 Logging of Changes",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-08.02B",
+ "Description": "The configuration of these system components ensures that all changes to system components in the production environment are recorded and can be traced back to the individuals or system components contributing to their development, deployment or implementation.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-08 Security Validation",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "config_recorder_all_regions_enabled",
+ "config_recorder_using_aws_service_role",
+ "cloudtrail_multi_region_enabled",
+ "cloudtrail_multi_region_enabled_logging_management_events",
+ "cloudtrail_log_file_validation_enabled"
+ ]
+ },
+ {
+ "Id": "DEV-08.01AC",
+ "Description": "The changes to system components of the cloud service in the production environment are monitored to enforce the role and rights concept. Any deviations identified during monitoring are addressed through timely and appropriate remediation measures.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-08 Security Validation",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-09.01B",
+ "Description": "The cloud service provider uses a version control system. The configuration of the system ensures that the confidentiality, integrity and authenticity of the source code is adequately protected at all stages of development.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-09 Version Control",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-09.02B",
+ "Description": "Version control procedures are set up to track dependencies of individual changes, with an attribution of changes to individual contributors, and to restore affected system components back to their previous state as a result of errors or identified vulnerabilities.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-09 Security Deployment",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-09.03B",
+ "Description": "Version control covers all internally and externally developed software, configurations and third party commercial products under the responsibility of the cloud service provider.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-09 Security Deployment",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-09.01AC",
+ "Description": "Version control procedures provide appropriate safeguards to ensure that the integrity and availability of cloud service customer data is not compromised when system components are restored back to their previous state.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-09 Security Deployment",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-09.02AC",
+ "Description": "The cloud service provider retains a history of the software versions and of the systems that are implemented in order to be able to reconstitute, where applicable in a test environment, a similar environment such as was implemented. The retention time for this history is risk-based (cf. OIS-07) defined in the policy for version control and aligned to the support life cycle of the cloud service.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-09 Security Deployment",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-10.01B",
+ "Description": "Authorised personnel or system components of the cloud service provider approve changes to the cloud service based on defined criteria (e.g. test results and required approvals) before these are made available to the cloud service customers in the production environment.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-10 Approvals for Provision in the Production Environment",
+ "Type": "Basic",
+ "AboutCriteria": "The definitions for criterion DEV-03 apply.",
+ "ComplementaryCriteria": "Where changes are to be approved by the cloud service customers in accordance with the contractual agreements before they are made available in the production environment, the cloud service customers ensure through suitable controls that authorised and qualified personnel receives the information made available, assesses the impact on the ISMS framework and decides on the approval in accordance with the conditions specified by the cloud service provider."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-10.02B",
+ "Description": "Cloud service customers are involved in the release according to contractual agreements.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-10 Security Maintenance",
+ "Type": "Basic",
+ "AboutCriteria": "If the contractual agreements do not foresee customer involvement of the approval, this should be clearly stated in the contractual agreements in order to fulfill this criterion.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-10.01AC",
+ "Description": "The approval processes is monitored. Any deviations identified during monitoring are addressed through timely and appropriate remediation measures.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-10 Security Maintenance",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-11.01B",
+ "Description": "Development and test environments under the responsibility of the cloud service provider undergo a risk assesssment and are protected with appropriate security measures. This includes identifying potential risks and implementing safeguards to ensure the security of these environments.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-11 Protection of Development and Test Environments",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-11.02B",
+ "Description": "The cloud service provider includes the development environment as part of the backup plan in accordance with the backup concept (cf. OPS-06).",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-11 Security Updates",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "backup_plans_exist",
+ "backup_vaults_exist",
+ "rds_instance_protected_by_backup_plan",
+ "ec2_ebs_volume_protected_by_backup_plan"
+ ]
+ },
+ {
+ "Id": "DEV-12.01B",
+ "Description": "Production environments are physically or logically separated from test or development environments to prevent unauthorised access to cloud service customer data, the spread of malware, or unintended changes to system components. Data contained in the production environments is not used in test or development environments, unless explicitly requested by cloud service customers, in order not to compromise their confidentiality.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-12 Separation of Environments",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-12.02B",
+ "Description": "Unless unavoidable, the cloud service provider does not reuse the cryptographic secret and private keys and other secrets used in production environments in other, non-production environments. Any unavoidable reuse of the cryptographic secret and private keys between production and non-production environments is documented and justified in accordance with the process for handling exceptions (cf. SP-03) and the risk management procedures (cf. OIS-07).",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-12 Security Documentation",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "secretsmanager_secret_rotated_periodically",
+ "secretsmanager_not_publicly_accessible"
+ ]
+ },
+ {
+ "Id": "DEV-13.01B",
+ "Description": "The cloud service provider ensures that, as part of the software development process, a Software Bill of Materials (SBOM) is created, maintained, and kept up-to-date for every developed or integrated software component. The structure, content, and management of Software Bills of Materials (SBOMs) should align with state-of-the-art concepts.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-13 Transparency about Software Components",
+ "Type": "Basic",
+ "AboutCriteria": "The state-of-the-art regarding the creation, maintenance, and utilisation of SBOMs, including their components and formats, is described in the current version of the BSI Technical Guideline TR-03183-2. Automated tools for generating, maintaining, and validating SBOMs are recommended to ensure accuracy and integration into security and vulnerability management processes.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-14.01B",
+ "Description": "The cloud service provider maintains a list of dependencies to hardware and software (cf. DEV-13) products used in the development of the cloud service.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-14 Development Service Organisations Security",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-14.02B",
+ "Description": "Policies and instructions for the use of third party and open source software are documented, communicated and provided in accordance with SP-01.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-14 Security Compliance",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-14.03B",
+ "Description": "Third party software is retrieved only from trusted sources and authenticity is verified whenever possible.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-14 Security Compliance",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-14.02AC",
+ "Description": "In procurement for the development of the cloud service, the cloud service provider performs a risk assessment in accordance with OIS-07 for every hardware and software product.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-14 Security Compliance",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "DEV-15.01B",
+ "Description": "The cloud service provider implements a procedure for the management of exceptions, including emergencies, in the change management process. This procedure aligns with the requirements of SP-03, ensuring that all exceptions to the standard change management process go through the OIS-07 risk management process and are incorporated in the risk handling measures described in OIS-08.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-15 Exceptions to the Change Management Process",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_securityaudit_role_created",
+ "ssmincidents_enabled_with_plans",
+ "iam_support_role_created"
+ ]
+ },
+ {
+ "Id": "DEV-16.01B",
+ "Description": "The cloud service provider conducts risk assessments within the procurement and development lifecycle of system components of the cloud service and implements processes to manage the identified risks. These processes include the following aspects: - Definition of security requirements that apply to the system components;- Implementation of security updates during the entire lifecycle of the system components and plans for their replacement after the end of the support period;- Documentation of all system components;- Description of the cybersecurity features and configurations for secure operations for all system components; and- Validation of the adherence to applicable security requirements for all system components.",
+ "Attributes": [
+ {
+ "Section": "Procurement, Development and Modification of Information Systems (DEV)",
+ "SubSection": "DEV-16 Risk Assessments During the Development/Procurement of System Components",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SSO-01.01B",
+ "Description": "Policies and instructions for controlling and monitoring service organisations (e.g. suppliers, vendors or other third parties) whose services contribute to the development or operation of the cloud service are documented, communicated and provided in accordance with SP-01 with respect to the following aspects: - Requirements for the assessment of risks resulting from the procurement of third party services;- Requirements for the classification of service organisations based on the risk assessment by the cloud service provider and the determination of whether the service organisation is a subservice organisation;- Information security requirements for the processing, storage or transmission of information by service organisations based on recognised industry standards, and under consideration of the criteria in this catalogue;- Information security awareness and training requirements for staff;- Applicable legal and regulatory requirements;- Requirements for dealing with vulnerabilities, security incidents and malfunctions;- Specifications for the contractual agreement of these requirements;- Specifications for the monitoring of these requirements; and- Specifications for applying these requirements also to subservice organisations used by the service organisations, insofar as the services provided by these subservice organisations also contribute to the development or operation of the cloud service.",
+ "Attributes": [
+ {
+ "Section": "Control and Monitoring of Service Providers and Suppliers (SSO)",
+ "SubSection": "SSO-01 Policies and Instructions for Controlling and Monitoring Service Organisations",
+ "Type": "Basic",
+ "AboutCriteria": "The basic criterion applies to all service organisations of the cloud service provider, regardless of applying the 'inclusive' or 'carve-out method'. The additional criterion applies only to those of the service organisations that are considered to be subservice organisations. See section 'Consideration of Subservice Organisations'. Reports by independent auditors on the suitability of the design and operating effectiveness of their service-related system of internal control are, for example, attestation reports in accordance with ISAE 3402, IDW PS 951, SOC 2 or BSI C5. Applicable legal and regulatory requirements may exist, for example, in the areas of data protection, intellectual property rights or copyright. If legal or regulatory requirements provide for a regulation deviating from these criteria for the control of subservice organisations, these regulations remain unaffected by the C5 criteria.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SSO-01.01AC",
+ "Description": "Subservice organisations of the cloud service provider are contractually obliged to provide regular reports by independent auditors on the suitability of the design and operating effectiveness of their service-related system of internal control system that allow the cloud service provider to determine whether the subservice organisation designed and operated controls that are commensurate with the expected complementary subservice organisation controls (CSOC).",
+ "Attributes": [
+ {
+ "Section": "Control and Monitoring of Service Providers and Suppliers (SSO)",
+ "SubSection": "SSO-01 Supplier Management",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "The basic criterion applies to all service organisations of the cloud service provider, regardless of applying the 'inclusive' or 'carve-out method'. The additional criterion applies only to those of the service organisations that are considered to be subservice organisations. See section 'Consideration of Subservice Organisations'. Reports by independent auditors on the suitability of the design and operating effectiveness of their service-related system of internal control are, for example, attestation reports in accordance with ISAE 3402, IDW PS 951, SOC 2 or BSI C5. Applicable legal and regulatory requirements may exist, for example, in the areas of data protection, intellectual property rights or copyright. If legal or regulatory requirements provide for a regulation deviating from these criteria for the control of subservice organisations, these regulations remain unaffected by the C5 criteria.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SSO-01.02AC",
+ "Description": "In case no such reports can be provided, the cloud service provider agrees appropriate information and audit rights to assess the design and operations of the service-related system of internal control regarding the expected CSOC.",
+ "Attributes": [
+ {
+ "Section": "Control and Monitoring of Service Providers and Suppliers (SSO)",
+ "SubSection": "SSO-01 Supplier Management",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SSO-02.01B",
+ "Description": "Service organisations of the cloud service provider undergo a risk assessment in accordance with the policies and instructions for the control and monitoring of service organisations prior to contributing to the development or operation of the cloud service. The risk assessment includes the identification, analysis, evaluation, treatment and documentation of risks with regard to the following aspects: - Protection needs regarding the confidentiality, integrity, availability and authenticity of cloud service customer data, cloud service derived data, cloud service provider data and account data processed, stored or transmitted by the third party;- Impact of a protection breach on the provision of the cloud service;- The cloud service provider's dependence on the service organisation for the scope, complexity and uniqueness of the provided service, including the consideration of possible alternatives;- Complementary subservice organisation controls (CSOCs) assumed in the design of cloud service provider's controls to meet the applicable C5 criteria;- Deviations regarding the design and operation of CSOCs assumed at service organisations considered as subservice organisations and mitigating measures by the cloud service provider to address such deviations; and- The ability of the cloud service provider to diversify sources of supply and limit vendor lock-in.",
+ "Attributes": [
+ {
+ "Section": "Control and Monitoring of Service Providers and Suppliers (SSO)",
+ "SubSection": "SSO-02 Risk Assessment of Service Organisations",
+ "Type": "Basic",
+ "AboutCriteria": "For assessing risks with service organisations, the cloud service provider can perform coordinated security risk assessments of specific critical ICT services, ICT systems or ICT products provided by service organisations. Apart from the aspects listed in SSO-02 Basic Criterion such a risk assessment should take into account technical and, where relevant, non-technical risk factors.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SSO-02.02B",
+ "Description": "The adequacy of the risk assessment is reviewed regularly, at least annually, by qualified personnel of the cloud service provider during service usage.",
+ "Attributes": [
+ {
+ "Section": "Control and Monitoring of Service Providers and Suppliers (SSO)",
+ "SubSection": "SSO-02 Supplier Security",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SSO-02.01AC",
+ "Description": "If the cloud service provider relies on assets from a supplier or on services from subservice organisations to operate the cloud service, the cloud service provider does not allow those suppliers or service organisations to access any cloud service customer data, cloud service derived data or account data, unless it is ensured that all operations requiring access to those data types are performed or supervised by personnel who have been authorised (cf. HR-01).",
+ "Attributes": [
+ {
+ "Section": "Control and Monitoring of Service Providers and Suppliers (SSO)",
+ "SubSection": "SSO-02 Supplier Security",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SSO-03.01B",
+ "Description": "If the cloud service provider relies on assets from a supplier or on services from subservice organisations to operate the cloud service, the cloud service provider does not allow those suppliers or service organisations to access any cloud service customer data, cloud service derived data or account data, unless they have performed a risk assessment according to OIS-07 on the possible exposure of cloud service customer data, cloud service derived data or account data.",
+ "Attributes": [
+ {
+ "Section": "Control and Monitoring of Service Providers and Suppliers (SSO)",
+ "SubSection": "SSO-03 Data Processing of Service Organisations",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SSO-03.02B",
+ "Description": "The cloud service provider obtains written authorisation of the customer prior to the processing of cloud service customer data, cloud service derived data or account data when engaging service organisations. This can be achieved by authorisation of the customer, per service organisation, or by way of a general pre-authorisation between the cloud service provider and the customer.",
+ "Attributes": [
+ {
+ "Section": "Control and Monitoring of Service Providers and Suppliers (SSO)",
+ "SubSection": "SSO-03 Supplier Monitoring",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SSO-04.01B",
+ "Description": "The cloud service provider maintains a directory for controlling and monitoring the service organisations who contribute services to the delivery of the cloud service. The following information is maintained in the directory: - Company name;- Address;- Locations of the processing and storage of cloud service customer data, cloud service derived data, cloud service provider data and account data;- Responsible contact group/person at the service organisation;- Responsible contact group/person at the cloud service provider;- Description of the service;- Classification based on the risk assessment;- Beginning of service usage; and- Proof of compliance with contractually agreed requirements.",
+ "Attributes": [
+ {
+ "Section": "Control and Monitoring of Service Providers and Suppliers (SSO)",
+ "SubSection": "SSO-04 Directory of Service Organisations",
+ "Type": "Basic",
+ "AboutCriteria": "It is not necessary to maintain a single central register in order to fulfil the basic criterion.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SSO-04.02B",
+ "Description": "The inventory is reviewed at least annually for completeness, accuracy and validity of the information.",
+ "Attributes": [
+ {
+ "Section": "Control and Monitoring of Service Providers and Suppliers (SSO)",
+ "SubSection": "SSO-04 Supplier Assessment",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SSO-05.01B",
+ "Description": "The cloud service provider monitors compliance with information security requirements and applicable legal and regulatory requirements in accordance with policies and instructions concerning controlling and monitoring of service organisation.",
+ "Attributes": [
+ {
+ "Section": "Control and Monitoring of Service Providers and Suppliers (SSO)",
+ "SubSection": "SSO-05 Monitoring of Compliance with Requirements",
+ "Type": "Basic",
+ "AboutCriteria": "Information obtained for monitoring of the design and operations of the service-related system of internal control typically includes reports in accordance with ISAE 3402, IDW PS 951, SOC 2 or BSI C5. If such reports are provided by the service organisations, the cloud service provider reviews, for example, the following aspects and, if necessary, incorporates the findings into the risk assessment in order to derive and initiate mitigating actions: - The scope and the validity respectively the period covered by the report;- Modifications of the opinion, deviations/exceptions noted and management's response thereon;- Complementary User Entity Controls (CUEC) to be designed and operated by the cloud service provider;- Disclosed subservice organisations incl. any changes among those (e.g. additional subservice organisations); and- Stated security incidents. Information on CSOC has to be obtained for subservice organisations only. Not every service organisation is a subservice organisation, see section \"Consideration of Subservice Organisations\"\"). Appropriate procedures may comprise the review of independent third party reports",
+ "ComplementaryCriteria": "or audit procedures performed by the cloud service provider at the subservice organisation."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SSO-05.02B",
+ "Description": "Monitoring includes a regular review of the following information to the extent that such information is to be provided by service organisations in accordance with the contractual agreements: - Reports on the quality of the service provided;- Certificates of the management systems' compliance with international standards;- Independent third party reports on the design and operation of their service-related system of internal control; and- Records of the service organisations on the handling of vulnerabilities, security incidents and malfunctions.",
+ "Attributes": [
+ {
+ "Section": "Control and Monitoring of Service Providers and Suppliers (SSO)",
+ "SubSection": "SSO-05 Supplier Compliance",
+ "Type": "Basic",
+ "AboutCriteria": "Information obtained for monitoring of the design and operations of the service-related system of internal control typically includes reports in accordance with ISAE 3402, IDW PS 951, SOC 2 or BSI C5. If such reports are provided by the service organisations, the cloud service provider reviews, for example, the following aspects and, if necessary, incorporates the findings into the risk assessment in order to derive and initiate mitigating actions: - The scope and the validity respectively the period covered by the report;- Modifications of the opinion, deviations/exceptions noted and management's response thereon;- Complementary User Entity Controls (CUEC) to be designed and operated by the cloud service provider;- Disclosed subservice organisations incl. any changes among those (e.g. additional subservice organisations); and- Stated security incidents. Information on CSOC has to be obtained for subservice organisations only. Not every service organisation is a subservice organisation, see section \"Consideration of Subservice Organisations\"\"). Appropriate procedures may comprise the review of independent third party reports",
+ "ComplementaryCriteria": "or audit procedures performed by the cloud service provider at the subservice organisation."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SSO-05.03B",
+ "Description": "The frequency of the monitoring corresponds to the classification of the service organisation based on the risk assessment conducted by the cloud service provider (cf. SSO-02).",
+ "Attributes": [
+ {
+ "Section": "Control and Monitoring of Service Providers and Suppliers (SSO)",
+ "SubSection": "SSO-05 Supplier Compliance",
+ "Type": "Basic",
+ "AboutCriteria": "Information obtained for monitoring of the design and operations of the service-related system of internal control typically includes reports in accordance with ISAE 3402, IDW PS 951, SOC 2 or BSI C5. If such reports are provided by the service organisations, the cloud service provider reviews, for example, the following aspects and, if necessary, incorporates the findings into the risk assessment in order to derive and initiate mitigating actions: - The scope and the validity respectively the period covered by the report;- Modifications of the opinion, deviations/exceptions noted and management's response thereon;- Complementary User Entity Controls (CUEC) to be designed and operated by the cloud service provider;- Disclosed subservice organisations incl. any changes among those (e.g. additional subservice organisations); and- Stated security incidents. Information on CSOC has to be obtained for subservice organisations only. Not every service organisation is a subservice organisation, see section \"Consideration of Subservice Organisations\"\"). Appropriate procedures may comprise the review of independent third party reports",
+ "ComplementaryCriteria": "or audit procedures performed by the cloud service provider at the subservice organisation."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SSO-05.04B",
+ "Description": "If a service organisation is considered to be a subservice organisation, the following applies:- The cloud service provider assesses this relationship and carries out appropriate procedures;- These procedures provide reasonable assurance that the subservice organization has designed and operated relevant controls;- The subservice organizations controls correspond to the expected complementary subservice organization controls (CSOCs) assumed in the design of the cloud service providers controls; and- This ensures that the applicable C5 criteria are met.",
+ "Attributes": [
+ {
+ "Section": "Control and Monitoring of Service Providers and Suppliers (SSO)",
+ "SubSection": "SSO-05 Supplier Compliance",
+ "Type": "Basic",
+ "AboutCriteria": "Information obtained for monitoring of the design and operations of the service-related system of internal control typically includes reports in accordance with ISAE 3402, IDW PS 951, SOC 2 or BSI C5. If such reports are provided by the service organisations, the cloud service provider reviews, for example, the following aspects and, if necessary, incorporates the findings into the risk assessment in order to derive and initiate mitigating actions: - The scope and the validity respectively the period covered by the report;- Modifications of the opinion, deviations/exceptions noted and management's response thereon;- Complementary User Entity Controls (CUEC) to be designed and operated by the cloud service provider;- Disclosed subservice organisations incl. any changes among those (e.g. additional subservice organisations); and- Stated security incidents. Information on CSOC has to be obtained for subservice organisations only. Not every service organisation is a subservice organisation, see section \"Consideration of Subservice Organisations\"\"). Appropriate procedures may comprise the review of independent third party reports",
+ "ComplementaryCriteria": "or audit procedures performed by the cloud service provider at the subservice organisation."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SSO-05.05B",
+ "Description": "Identified deviations are subjected to analysis, evaluation and treatment in accordance with the risk assessment of service organisations (cf. SSO-02).",
+ "Attributes": [
+ {
+ "Section": "Control and Monitoring of Service Providers and Suppliers (SSO)",
+ "SubSection": "SSO-05 Supplier Compliance",
+ "Type": "Basic",
+ "AboutCriteria": "Information obtained for monitoring of the design and operations of the service-related system of internal control typically includes reports in accordance with ISAE 3402, IDW PS 951, SOC 2 or BSI C5. If such reports are provided by the service organisations, the cloud service provider reviews, for example, the following aspects and, if necessary, incorporates the findings into the risk assessment in order to derive and initiate mitigating actions: - The scope and the validity respectively the period covered by the report;- Modifications of the opinion, deviations/exceptions noted and management's response thereon;- Complementary User Entity Controls (CUEC) to be designed and operated by the cloud service provider;- Disclosed subservice organisations incl. any changes among those (e.g. additional subservice organisations); and- Stated security incidents. Information on CSOC has to be obtained for subservice organisations only. Not every service organisation is a subservice organisation, see section \"Consideration of Subservice Organisations\"\"). Appropriate procedures may comprise the review of independent third party reports",
+ "ComplementaryCriteria": "or audit procedures performed by the cloud service provider at the subservice organisation."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SSO-05.06B",
+ "Description": "When a change in a third party contributing to the provision of the cloud service significantly adversely affects its level of security, the cloud service provider informs all of its cloud service customers without undue delay.",
+ "Attributes": [
+ {
+ "Section": "Control and Monitoring of Service Providers and Suppliers (SSO)",
+ "SubSection": "SSO-05 Supplier Compliance",
+ "Type": "Basic",
+ "AboutCriteria": "Information obtained for monitoring of the design and operations of the service-related system of internal control typically includes reports in accordance with ISAE 3402, IDW PS 951, SOC 2 or BSI C5. If such reports are provided by the service organisations, the cloud service provider reviews, for example, the following aspects and, if necessary, incorporates the findings into the risk assessment in order to derive and initiate mitigating actions: - The scope and the validity respectively the period covered by the report;- Modifications of the opinion, deviations/exceptions noted and management's response thereon;- Complementary User Entity Controls (CUEC) to be designed and operated by the cloud service provider;- Disclosed subservice organisations incl. any changes among those (e.g. additional subservice organisations); and- Stated security incidents. Information on CSOC has to be obtained for subservice organisations only. Not every service organisation is a subservice organisation, see section \"Consideration of Subservice Organisations\"\"). Appropriate procedures may comprise the review of independent third party reports",
+ "ComplementaryCriteria": "or audit procedures performed by the cloud service provider at the subservice organisation."
+ }
+ ],
+ "Checks": [
+ "trustedadvisor_premium_support_plan_subscribed",
+ "iam_support_role_created",
+ "account_security_contact_information_is_registered",
+ "account_maintain_different_contact_details_to_security_billing_and_operations",
+ "account_maintain_current_contact_details"
+ ]
+ },
+ {
+ "Id": "SSO-05.07B",
+ "Description": "The cloud service provider establishes and documents a procedure to regularly review non-disclosure or confidentiality requirements for all suppliers involved in providing the cloud service. This procedure is implemented in practice, and the review is conducted at least once per year.",
+ "Attributes": [
+ {
+ "Section": "Control and Monitoring of Service Providers and Suppliers (SSO)",
+ "SubSection": "SSO-05 Supplier Compliance",
+ "Type": "Basic",
+ "AboutCriteria": "Information obtained for monitoring of the design and operations of the service-related system of internal control typically includes reports in accordance with ISAE 3402, IDW PS 951, SOC 2 or BSI C5. If such reports are provided by the service organisations, the cloud service provider reviews, for example, the following aspects and, if necessary, incorporates the findings into the risk assessment in order to derive and initiate mitigating actions: - The scope and the validity respectively the period covered by the report;- Modifications of the opinion, deviations/exceptions noted and management's response thereon;- Complementary User Entity Controls (CUEC) to be designed and operated by the cloud service provider;- Disclosed subservice organisations incl. any changes among those (e.g. additional subservice organisations); and- Stated security incidents. Information on CSOC has to be obtained for subservice organisations only. Not every service organisation is a subservice organisation, see section \"Consideration of Subservice Organisations\"\"). Appropriate procedures may comprise the review of independent third party reports",
+ "ComplementaryCriteria": "or audit procedures performed by the cloud service provider at the subservice organisation."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SSO-05.01AC",
+ "Description": "The procedures for monitoring compliance with the requirements are supplemented by automatic procedures relating to the following aspects: - Configuration of system components;- Performance and availability of system components;- Response time to malfunctions and security incidents; and- Recovery time (time until completion of error handling).",
+ "Attributes": [
+ {
+ "Section": "Control and Monitoring of Service Providers and Suppliers (SSO)",
+ "SubSection": "SSO-05 Supplier Compliance",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Information obtained for monitoring of the design and operations of the service-related system of internal control typically includes reports in accordance with ISAE 3402, IDW PS 951, SOC 2 or BSI C5. If such reports are provided by the service organisations, the cloud service provider reviews, for example, the following aspects and, if necessary, incorporates the findings into the risk assessment in order to derive and initiate mitigating actions: - The scope and the validity respectively the period covered by the report;- Modifications of the opinion, deviations/exceptions noted and management's response thereon;- Complementary User Entity Controls (CUEC) to be designed and operated by the cloud service provider;- Disclosed subservice organisations incl. any changes among those (e.g. additional subservice organisations); and- Stated security incidents. Information on CSOC has to be obtained for subservice organisations only. Not every service organisation is a subservice organisation, see section \"Consideration of Subservice Organisations\"\"). Appropriate procedures may comprise the review of independent third party reports",
+ "ComplementaryCriteria": "or audit procedures performed by the cloud service provider at the subservice organisation."
+ }
+ ],
+ "Checks": [
+ "acm_certificates_transparency_logs_enabled",
+ "apigateway_restapi_logging_enabled",
+ "apigatewayv2_api_access_logging_enabled",
+ "appsync_field_level_logging_enabled",
+ "athena_workgroup_logging_enabled",
+ "awslambda_function_invoke_api_operations_cloudtrail_logging_enabled",
+ "bedrock_model_invocation_logging_enabled",
+ "cloudfront_distributions_logging_enabled",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_logs_s3_bucket_access_logging_enabled",
+ "cloudtrail_multi_region_enabled_logging_management_events",
+ "cloudtrail_s3_dataevents_read_enabled",
+ "cloudtrail_s3_dataevents_write_enabled",
+ "codebuild_project_logging_enabled",
+ "datasync_task_logging_enabled",
+ "dms_replication_task_source_logging_enabled",
+ "dms_replication_task_target_logging_enabled",
+ "ec2_client_vpn_endpoint_connection_logging_enabled",
+ "ecs_task_definitions_logging_block_mode",
+ "ecs_task_definitions_logging_enabled",
+ "eks_control_plane_logging_all_types_enabled",
+ "elasticbeanstalk_environment_cloudwatch_logging_enabled",
+ "elb_logging_enabled",
+ "elbv2_logging_enabled",
+ "glue_etl_jobs_logging_enabled",
+ "mq_broker_logging_enabled",
+ "networkfirewall_logging_enabled",
+ "opensearch_service_domains_audit_logging_enabled",
+ "opensearch_service_domains_cloudwatch_logging_enabled",
+ "redshift_cluster_audit_logging",
+ "route53_public_hosted_zones_cloudwatch_logging_enabled",
+ "s3_bucket_server_access_logging_enabled",
+ "stepfunctions_statemachine_logging_enabled",
+ "waf_global_webacl_logging_enabled",
+ "wafv2_webacl_logging_enabled",
+ "wafv2_webacl_rule_logging_enabled"
+ ]
+ },
+ {
+ "Id": "SSO-05.02AC",
+ "Description": "Identified violations and discrepancies are automatically reported to the responsible personnel or system components of the cloud service provider for prompt assessment and action.",
+ "Attributes": [
+ {
+ "Section": "Control and Monitoring of Service Providers and Suppliers (SSO)",
+ "SubSection": "SSO-05 Supplier Compliance",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Information obtained for monitoring of the design and operations of the service-related system of internal control typically includes reports in accordance with ISAE 3402, IDW PS 951, SOC 2 or BSI C5. If such reports are provided by the service organisations, the cloud service provider reviews, for example, the following aspects and, if necessary, incorporates the findings into the risk assessment in order to derive and initiate mitigating actions: - The scope and the validity respectively the period covered by the report;- Modifications of the opinion, deviations/exceptions noted and management's response thereon;- Complementary User Entity Controls (CUEC) to be designed and operated by the cloud service provider;- Disclosed subservice organisations incl. any changes among those (e.g. additional subservice organisations); and- Stated security incidents. Information on CSOC has to be obtained for subservice organisations only. Not every service organisation is a subservice organisation, see section \"Consideration of Subservice Organisations\"\"). Appropriate procedures may comprise the review of independent third party reports",
+ "ComplementaryCriteria": "or audit procedures performed by the cloud service provider at the subservice organisation."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SSO-05.03AC",
+ "Description": "The cloud service provider defines and implements a process for conducting periodic security assessments for all third parties. The nature and scope of these security assessments correspond to the risk associated with each third party. These risk-based security assessments ensure that third parties meet the required security standards and that any potential risks are identified and mitigated appropriately.",
+ "Attributes": [
+ {
+ "Section": "Control and Monitoring of Service Providers and Suppliers (SSO)",
+ "SubSection": "SSO-05 Supplier Compliance",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Information obtained for monitoring of the design and operations of the service-related system of internal control typically includes reports in accordance with ISAE 3402, IDW PS 951, SOC 2 or BSI C5. If such reports are provided by the service organisations, the cloud service provider reviews, for example, the following aspects and, if necessary, incorporates the findings into the risk assessment in order to derive and initiate mitigating actions: - The scope and the validity respectively the period covered by the report;- Modifications of the opinion, deviations/exceptions noted and management's response thereon;- Complementary User Entity Controls (CUEC) to be designed and operated by the cloud service provider;- Disclosed subservice organisations incl. any changes among those (e.g. additional subservice organisations); and- Stated security incidents. Information on CSOC has to be obtained for subservice organisations only. Not every service organisation is a subservice organisation, see section \"Consideration of Subservice Organisations\"\"). Appropriate procedures may comprise the review of independent third party reports",
+ "ComplementaryCriteria": "or audit procedures performed by the cloud service provider at the subservice organisation."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SSO-06.01B",
+ "Description": "The cloud service provider has defined and documented contract termination or exit strategies for the purchase of services where the risk assessment of the service organisations regarding the scope, complexity and uniqueness of the service provided resulted in a very high dependency (cf. Supplementary Information).",
+ "Attributes": [
+ {
+ "Section": "Control and Monitoring of Service Providers and Suppliers (SSO)",
+ "SubSection": "SSO-06 Contract Termination Strategy for Service Organisations",
+ "Type": "Basic",
+ "AboutCriteria": "A very high dependency can be assumed in particular if the purchased service is indispensable for the provision of the cloud service. This situation is the case if the cloud service provider: - Provides the cloud service from data centres operated by service organisations; or- Provides a SaaS service and uses the IaaS or PaaS of another cloud service provider. A very high dependency can also be assumed if the service cannot be obtained within one month from an alternative service organisation, as: - It is unique on the market and no other service organisation can deliver it;- It is strongly individualised by the service organisation and/or the cloud service provider;- It cannot be supplied by any other service organisation in the required quality of service; or- It requires specific knowledge that is only/mainly available to the current service organisation and not to the cloud service provider.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SSO-06.02B",
+ "Description": "Exit strategies are aligned with operational continuity plans and include the following aspects: - Analysis of the potential costs, impacts, resources and timing of the transition of a purchased service to an alternative service organisation;- Definition and allocation of roles, responsibilities and sufficient resources to perform the activities for a transition;- Definition of success criteria for the transition; and- Definition of indicators for monitoring the performance of services, which should initiate the withdrawal from the service if the results are unacceptable.",
+ "Attributes": [
+ {
+ "Section": "Control and Monitoring of Service Providers and Suppliers (SSO)",
+ "SubSection": "SSO-06 Supplier Risk Management",
+ "Type": "Basic",
+ "AboutCriteria": "A very high dependency can be assumed in particular if the purchased service is indispensable for the provision of the cloud service. This situation is the case if the cloud service provider: - Provides the cloud service from data centres operated by service organisations; or- Provides a SaaS service and uses the IaaS or PaaS of another cloud service provider. A very high dependency can also be assumed if the service cannot be obtained within one month from an alternative service organisation, as: - It is unique on the market and no other service organisation can deliver it;- It is strongly individualised by the service organisation and/or the cloud service provider;- It cannot be supplied by any other service organisation in the required quality of service; or- It requires specific knowledge that is only/mainly available to the current service organisation and not to the cloud service provider.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SSO-07.01B",
+ "Description": "Policies and instructions are defined to ensure transparency within service organisations of the cloud service provider with respect to the following aspects: - Data flow and interfaces between the cloud service provider and third parties are documented, including measures regarding the secure transmission and access control for data shared with third parties;- It is identified whether third parties used by the cloud service provider itself rely on service providers that contribute to the provisioning of the cloud service;- If third parties rely on service providers, the types of data processed by the service providers are identified and risks related to the subcontracting of services are assessed (cf. SSO-02).- If third parties rely on service providers, require the third parties to monitor the compliance of their service providers with relevant contractual, legal and regulatory requirements (cf. SSO-05); and- Cloud service customers are informed of third parties and their service providers in use for provisioning the cloud service (both types being considered as subservice organisations of the cloud service provider) and what type of data these subservice organisations are processing.",
+ "Attributes": [
+ {
+ "Section": "Control and Monitoring of Service Providers and Suppliers (SSO)",
+ "SubSection": "SSO-07 Ensuring Transparency within Service Organisations",
+ "Type": "Basic",
+ "AboutCriteria": "Monitoring of third parties can occur via audits, certifications and third party reports (cf. SSO-05) and may be performed by the subcontracting third party. The cloud service provider remains responsible for reviewing the results of compliance monitoring and assessing the risk.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SSO-07.02B",
+ "Description": "The cloud service provider documents this information and reviews its completeness, accuracy and validity at least annually.",
+ "Attributes": [
+ {
+ "Section": "Control and Monitoring of Service Providers and Suppliers (SSO)",
+ "SubSection": "SSO-07 Supplier Governance",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SSO-08.01B",
+ "Description": "When a functional component is used to provide the cloud service, and may have access, directly or indirectly, to cloud service customer data, the cloud service provider defines and implements: - A policy according to SP-01 that does not allow such a component to exchange directly with its supplier;- Instructions according to SP-01 for the cloud service provider to authorise any content provided by the supplier for its functional components before transferring the content to the functional components (for each transfer);- Instructions according to SP-01 for the cloud service provider to authorise any content to be sent from a functional component to its supplier before transferring the content to the supplier (for each transfer); and- When a procedure to authorise content transfers is automated, then the Cloud Serivce Provider implements this procedure using a solution that keeps traces of the operations proposed by the supplier of the functional component, of the verification performed to authorise the content and of the incoming and outgoing transfers effectively performed.",
+ "Attributes": [
+ {
+ "Section": "Control and Monitoring of Service Providers and Suppliers (SSO)",
+ "SubSection": "SSO-08 Controlling Exchanges with Suppliers of Functional Components",
+ "Type": "Basic",
+ "AboutCriteria": "A supplier of a functional component is typically a service organisation of the cloud service provider. The authorisation for the transfer may be automated. Content provided by the supplier refers to updates of the functional components.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SIM-01.01B",
+ "Description": "Policies and instructions with technical and organisational safeguards are documented, communicated and provided in accordance with SP-01 to ensure a fast, effective and proper response to all known security incidents.The cloud service provider defines guidelines for the classification, prioritisation, escalation and root cause analysis of security incidents and creates interfaces to the incident management and business continuity management.",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-01 Policy for Security Incident Management",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that they receive notifications from the cloud service provider about security incidents that affect them and that these notifications are forwarded in a timely manner to the responsible departments for handling so that an appropriate response can be triggered."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SIM-01.02B",
+ "Description": "The cloud service provider has set up a 'Computer Emergency Response Team' (CERT), which contributes to the coordinated resolution of occurring security incidents.",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-01 Security Incident Management",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_support_role_created",
+ "iam_securityaudit_role_created"
+ ]
+ },
+ {
+ "Id": "SIM-01.03B",
+ "Description": "Communication channels with the cloud service customers are identified and defined and customers affected by security incidents are informed in a timely and appropriate manner.",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-01 Security Incident Management",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "account_security_contact_information_is_registered",
+ "account_maintain_current_contact_details",
+ "account_maintain_different_contact_details_to_security_billing_and_operations",
+ "iam_support_role_created",
+ "iam_securityaudit_role_created"
+ ]
+ },
+ {
+ "Id": "SIM-01.01AC",
+ "Description": "There are instructions as to how the data of a suspicious system can be collected in a conclusive manner in the event of a security incident.",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-01 Security Incident Management",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SIM-01.02AC",
+ "Description": "In addition, there are analysis plans for typical security incidents and an evaluation methodology which ensures the collected information does not lose its evidential value in any subsequent legal assessment.",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-01 Security Incident Management",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "guardduty_is_enabled",
+ "cloudtrail_log_file_validation_enabled",
+ "ssmincidents_enabled_with_plans"
+ ]
+ },
+ {
+ "Id": "SIM-02.01B",
+ "Description": "The cloud service provider has documented, approved and communicated one or more security incident response plans. The plans address all stages of incident response, including identification, containment, eradication, recovery, and lessons learned. They are approved by subject matter experts of the cloud service provider and communicated to all relevant stakeholders.",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-02 Security Incident Response Plans",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "ssmincidents_enabled_with_plans",
+ "backup_recovery_point_encrypted",
+ "backup_plans_exist",
+ "backup_reportplans_exist",
+ "cloudtrail_cloudwatch_logging_enabled"
+ ]
+ },
+ {
+ "Id": "SIM-02.02B",
+ "Description": "The plans are evaluated and updated at least annually or as necessary to reflect changes in the organisational structure or environment.",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-02 Incident Response",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SIM-03.01B",
+ "Description": "Subject matter experts of the cloud service provider classify, prioritise and perform root-cause analyses for events that could constitute a security incident.",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-03 Processing of Security Incidents",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "ssmincidents_enabled_with_plans",
+ "cloudtrail_threat_detection_privilege_escalation",
+ "guardduty_no_high_severity_findings"
+ ]
+ },
+ {
+ "Id": "SIM-03.02B",
+ "Description": "If the cloud service provider determines the need for external assistance, it selects a competent and trustworthy incident response service provider or one that is recommended by a national cybersecurity authority.",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-03 Incident Communication",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SIM-03.03B",
+ "Description": "The cloud service provider maintains a catalogue that clearly identifies the information security incidents that affect cloud service customer data and uses that catalogue to classify information security incidents.",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-03 Incident Communication",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "servicecatalog_portfolio_shared_within_organization_only"
+ ]
+ },
+ {
+ "Id": "SIM-03.04B",
+ "Description": "The incident classification mechanism includes provisions to correlate information security events. In addition, these correlated information security events are themselves assessed and classified according to their criticality.",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-03 Incident Communication",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "ssmincidents_enabled_with_plans"
+ ]
+ },
+ {
+ "Id": "SIM-03.05B",
+ "Description": "The results of these root-cause analyses are documented, shared with relevant stakeholders, and used as part of evaluation and learning processes.",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-03 Incident Communication",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SIM-03.06B",
+ "Description": "All documents and evidence that provide details on security incidents related to the cloud service are archived in a way that could be used as evidence in court. Security mechanisms and processes for protecting all the information about security incidents related to the cloud service are implemented in accordance with criticality levels and legal requirements.",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-03 Incident Communication",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "cloudtrail_multi_region_enabled_logging_management_events",
+ "cloudtrail_multi_region_enabled",
+ "cloudtrail_kms_encryption_enabled"
+ ]
+ },
+ {
+ "Id": "SIM-03.07B",
+ "Description": "The analysis process also ensures traceability of the entire kill chain of a security incident.",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-03 Incident Communication",
+ "Type": "Basic",
+ "AboutCriteria": "The term 'kill chain' refers to the stages an attacker goes through to carry out a cyberattack, leading to a security incident. Understanding and ensuring traceability of the entire kill chain helps the cloud service provider identify weaknesses in their security posture and enhance defenses.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "awslambda_function_invoke_api_operations_cloudtrail_logging_enabled",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_insights_exist",
+ "cloudtrail_kms_encryption_enabled",
+ "cloudtrail_log_file_validation_enabled",
+ "cloudtrail_logs_s3_bucket_access_logging_enabled",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "cloudtrail_multi_region_enabled",
+ "cloudtrail_multi_region_enabled_logging_management_events",
+ "cloudtrail_s3_dataevents_read_enabled",
+ "cloudtrail_s3_dataevents_write_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled",
+ "iam_inline_policy_no_full_access_to_cloudtrail",
+ "iam_policy_no_full_access_to_cloudtrail"
+ ]
+ },
+ {
+ "Id": "SIM-03.01AC",
+ "Description": "The cloud service provider simulates the identification, analysis and defence of security incidents and attacks at least once a year through appropriate tests and exercises (e.g. Red Team training).",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-03 Incident Communication",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SIM-03.02AC",
+ "Description": "The cloud service provider establishes, or contracts for the services of, an integrated team of forensic/incident responder personnel specifically trained on evidence preservation and chain of custody management.",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-03 Incident Communication",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SIM-03.03AC",
+ "Description": "The cloud service provider monitors the handling of information security incidents to verify the application of incident management policies and procedures. Any deviations identified during monitoring are addressed through timely and appropriate remediation measures.",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-03 Incident Communication",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SIM-04.01B",
+ "Description": "After a security incident has been processed, the solution is documented in accordance with the contractual agreements and the report is sent to the affected customers for final acknowledgement or, if applicable, as confirmation.",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-04 Documentation and Reporting of Security Incidents",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that they receive notifications from the cloud service provider about security incidents that affect them and their resolution and that these notifications are forwarded promptly to the entity responsible for handling them so that an appropriate response can be made."
+ }
+ ],
+ "Checks": [
+ "ssmincidents_enabled_with_plans"
+ ]
+ },
+ {
+ "Id": "SIM-04.01AC",
+ "Description": "The customer can either actively approve solutions or the solution is automatically approved after a certain period.",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-04 Incident Recovery",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SIM-04.02AC",
+ "Description": "Information on security incidents or confirmed security breaches is made available to all affected customers.",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-04 Incident Recovery",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SIM-04.03AC",
+ "Description": "The contract between the cloud service provider and the cloud service customer regulates which data is made available to the cloud service customer for his own analysis in the event of security incidents.",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-04 Incident Recovery",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SIM-05.01B",
+ "Description": "The cloud service provider informs employees and external business partners of their obligations. If necessary, they agree to or are contractually obliged to report all security events that become known to them and are directly related to the cloud service provided by the cloud service provider to a previously designated central office of the cloud service provider promptly.",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-05 Duty of the Employees to Report Security Incidents to a Central Body",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that identified security events, which the cloud service provider is required to process, are communicated promptly to previously designated, responsible personnel. The identification of such security events is supported by suitable controls (cf. complementary criterion for OPS-10)."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SIM-05.02B",
+ "Description": "The cloud service provider communicates that 'false reports' of events that do not subsequently turn out to be incidents do not have any negative consequences.",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-05 Incident Analysis",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SIM-05.03B",
+ "Description": "The cloud service provider makes the information security incident reporting mechanisms known as part of its communication to employees, cloud service customers and external business partners.",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-05 Incident Analysis",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SIM-06.01B",
+ "Description": "Mechanisms are in place to measure and monitor the type and scope of security incidents and to report them to support agencies. The information obtained from the evaluation is used to identify recurrent or significant incidents and to identify the need for further protection.",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-06 Evaluation and Learning Process",
+ "Type": "Basic",
+ "AboutCriteria": "Supporting bodies may be external service providers or government agencies such as the BSI.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that they include into their ISMS the findings and measures related to previous security incidents reported by the cloud service provider. The cloud service customers evaluate whether and which supporting measures they might take on their side."
+ }
+ ],
+ "Checks": [
+ "ssmincidents_enabled_with_plans"
+ ]
+ },
+ {
+ "Id": "SIM-06.02B",
+ "Description": "The evaluation and learning process includes the results of root-cause analyses conducted in accordance with SIM-02.",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-06 Incident Reporting",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SIM-06.03B",
+ "Description": "The cloud service provider defines, implements and maintains a knowledge repository of security incidents and the measures taken to solve them, as well as information related to the assets that these security incidents affected and uses that information to enrich the classification catalogue of incidents (cf. SIM-03).",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-06 Incident Reporting",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "SIM-06.04B",
+ "Description": "The intelligence gained from the incident management and gathered in the knowledge repository is used to identify recurring security events or incidents, or potential significant security incidents, to determine the need for advanced safeguards, and implement them.",
+ "Attributes": [
+ {
+ "Section": "Security Incident Management (SIM)",
+ "SubSection": "SIM-06 Incident Reporting",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "BCM-01.01B",
+ "Description": "The cloud service provider operates a business continuity and emergency management system in accordance with ISO 22301 and/or BSI 200-4.",
+ "Attributes": [
+ {
+ "Section": "Business Continuity Management (BCM)",
+ "SubSection": "BCM-01 Business Continuity and Emergency Management System",
+ "Type": "Basic",
+ "AboutCriteria": "The basic criterion can (but need not) be fulfilled with a certification of the BCM according to ISO/IEC 22301",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "backup_plans_exist",
+ "backup_vaults_encrypted",
+ "backup_vaults_exist",
+ "ec2_ebs_volume_protected_by_backup_plan"
+ ]
+ },
+ {
+ "Id": "BCM-01.02B",
+ "Description": "Policies and instructions for establishing the strategy and guidelines to ensure business continuity management for the cloud service are documented, communicated and provided in accordance with SP-01.",
+ "Attributes": [
+ {
+ "Section": "Business Continuity Management (BCM)",
+ "SubSection": "BCM-01 Business Continuity Management",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "backup_plans_exist",
+ "backup_vaults_encrypted",
+ "backup_vaults_exist",
+ "ec2_ebs_volume_protected_by_backup_plan"
+ ]
+ },
+ {
+ "Id": "BCM-01.03B",
+ "Description": "The top management (or a member of the top management) of the cloud service provider is named as the process owner of business continuity and emergency management and is responsible for establishing the process within the company as well as ensuring compliance with the guidelines. They must ensure that sufficient resources are made available for an effective process.",
+ "Attributes": [
+ {
+ "Section": "Business Continuity Management (BCM)",
+ "SubSection": "BCM-01 Business Continuity Management",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "BCM-01.04B",
+ "Description": "People in management and other relevant leadership positions demonstrate leadership and commitment to this issue by encouraging employees to actively contribute to the effectiveness of continuity and emergency management.",
+ "Attributes": [
+ {
+ "Section": "Business Continuity Management (BCM)",
+ "SubSection": "BCM-01 Business Continuity Management",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "BCM-01.05B",
+ "Description": "Policies and instructions related to business impact analyses and business continuity plans are documented, communicated and made available in accordance with SP-01.",
+ "Attributes": [
+ {
+ "Section": "Business Continuity Management (BCM)",
+ "SubSection": "BCM-01 Business Continuity Management",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "backup_plans_exist",
+ "backup_reportplans_exist",
+ "ssmincidents_enabled_with_plans"
+ ]
+ },
+ {
+ "Id": "BCM-02.01B",
+ "Description": "The policies and instructions for business continuity management for the cloud service include the need to perform a business impact analysis. The cloud service provider analyses the impact of disrupting activities to its organisation with respect the development and operations of the cloud service in accordance with applicable policies and instructions with at least the following aspects: - Possible scenarios based on a risk analysis that includes cyber risks;- Identification of critical products and services;- Identification of dependencies, including processes (including resources required), applications, business partners and third parties;- Capturing threats to critical products and services;- Identification of effects resulting from planned and unplanned malfunctions and changes over time;- Determination of the maximum tolerable period of downtime and service degregation;- Identification of restoration priorities;- Determination of time targets for the resumption of critical products and services within the maximum acceptable time period (i.e. RTO);- Determination of time targets for the maximum reasonable period during which cloud service derived data, cloud service provider data, account data and, if its processing is contractually agreed upon, cloud service customer data can be lost and not recovered (i.e. RPO); and- Estimation of the resources needed for resumption.",
+ "Attributes": [
+ {
+ "Section": "Business Continuity Management (BCM)",
+ "SubSection": "BCM-02 Business Impact Analysis",
+ "Type": "Basic",
+ "AboutCriteria": "Scenarios to be considered according to the basic criterion are, for example, the loss of personnel, buildings, infrastructure and service providers.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that the scenarios for a failure of the cloud service or the cloud service provider are sufficiently considered in the context of their business impact analysis."
+ }
+ ],
+ "Checks": [
+ "backup_plans_exist",
+ "backup_recovery_point_encrypted",
+ "backup_reportplans_exist",
+ "backup_vaults_encrypted",
+ "backup_vaults_exist",
+ "documentdb_cluster_backup_enabled",
+ "dynamodb_table_protected_by_backup_plan",
+ "ec2_ebs_volume_protected_by_backup_plan",
+ "efs_have_backup_enabled",
+ "elasticache_redis_cluster_backup_enabled",
+ "fsx_file_system_copy_tags_to_backups_enabled",
+ "neptune_cluster_backup_enabled",
+ "rds_cluster_protected_by_backup_plan",
+ "rds_instance_backup_enabled",
+ "rds_instance_protected_by_backup_plan"
+ ]
+ },
+ {
+ "Id": "BCM-02.02B",
+ "Description": "The business impact analysis resulting from the applicable policies and instructions is reviewed at regular intervals, at least once a year, or after significant organisational or environment-related changes.",
+ "Attributes": [
+ {
+ "Section": "Business Continuity Management (BCM)",
+ "SubSection": "BCM-02 Business Impact Analysis",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "BCM-03.01B",
+ "Description": "Based on the results of the business impact analysis, business continuity plans are documented in a consistent manner, and in accordance with applicable policies and instructions. Business continuity plans take the following aspects into account: - Defined purpose and scope with consideration of the relevant dependencies;- Accessibility and comprehensibility of the plans for persons who are to act accordingly;- Ownership by at least one designated person responsible for review, updating and approval;- Defined communication channels, roles and responsibilities including notification of the customer;- Recovery procedures, manual interim solutions and reference information (taking into account prioritisation in the recovery of cloud infrastructure components and services and alignment with customers);- Methods for putting the plans into effect;- Continuous process improvement;- Consistency over all locations, zones, regions and partitions; and- Interfaces to Security Incident Management.",
+ "Attributes": [
+ {
+ "Section": "Business Continuity Management (BCM)",
+ "SubSection": "BCM-03 Business Continuity Plans",
+ "Type": "Basic",
+ "AboutCriteria": "Although different partitions do not share a common IAM (and hence no common personnel for BCM), business continuity plans may be shared between different partitions since the same cloud services are provided.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that the results of their business impact analysis are sufficiently considered when planning the operational continuity and the business plan in order to provide for the effects of a failure of the cloud service or cloud service provider. Cloud service customers ensure through suitable controls that the availability of the cloud service, its recovery time according to the BCM plan and the data loss of the cloud service are consistent with their own availability requirements and tolerable data loss."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "BCM-03.02B",
+ "Description": "The business continuity plans are reviewed at regular intervals, at least once a year, or after significant organisational or environment-related changes.",
+ "Attributes": [
+ {
+ "Section": "Business Continuity Management (BCM)",
+ "SubSection": "BCM-03 Business Continuity Planning",
+ "Type": "Basic",
+ "AboutCriteria": "Although different partitions do not share a common IAM (and hence no common personnel for BCM), business continuity plans may be shared between different partitions since the same cloud services are provided.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "BCM-04.01B",
+ "Description": "Business continuity plans are tested on a regular basis (at least annually) or after significant organisational or environmental changes. Tests involve affected cloud service customers and relevant third parties (e.g. service organisations).",
+ "Attributes": [
+ {
+ "Section": "Business Continuity Management (BCM)",
+ "SubSection": "BCM-04 Testing Business Continuity",
+ "Type": "Basic",
+ "AboutCriteria": "Tests are primarily conducted at the operational level and are aimed at operational target groups. Tests include e.g.: - Test of technical precautionary measures;- Functional tests; and- Plan review. Exercises also take place on a tactical and strategic level. These include e.g.: - Plan meeting;- Staff exercise;- Command post exercise;- Communication and alerting exercise;- Simulation of scenarios; and- Emergency or full exercise. Relevant third parties are in particular service organisations of the cloud service provider who contribute to the development or operation of the cloud service (cf. basic criteria SSO-02 and SSO-06).",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that measures to prevent the impact of a cloud service or cloud service provider outage are regularly reviewed, updated, tested and exercised. The cloud service provider is involved in the tests and exercises in accordance with the contractual agreements. Cloud service customers ensure through suitable controls that the results of the cloud service provider's BCM tests and exercises are incorporated into their own BCM and that they are fully appreciated with regard to ensuring the customer's operational continuity. In tests and exercises that involve the customer and therefore require own measures on the customer side, cloud service customers ensure that the appropriate measures for coping with the scenario are practiced and tested by means of suitable BCM controls."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "BCM-04.02B",
+ "Description": "The tests are documented and results are taken into account to review the business continuity plans and for future business continuity measures.",
+ "Attributes": [
+ {
+ "Section": "Business Continuity Management (BCM)",
+ "SubSection": "BCM-04 Business Continuity Testing",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "BCM-04.01AC",
+ "Description": "In addition to the tests, exercises are also carried out which, among other things, have resulted in scenarios from security incidents that have already occurred in the past.",
+ "Attributes": [
+ {
+ "Section": "Business Continuity Management (BCM)",
+ "SubSection": "BCM-04 Business Continuity Testing",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Tests are primarily conducted at the operational level and are aimed at operational target groups. Tests include e.g.: - Test of technical precautionary measures;- Functional tests; and- Plan review. Exercises also take place on a tactical and strategic level. These include e.g.: - Plan meeting;- Staff exercise;- Command post exercise;- Communication and alerting exercise;- Simulation of scenarios; and- Emergency or full exercise. Relevant third parties are in particular service organisations of the cloud service provider who contribute to the development or operation of the cloud service (cf. basic criteria SSO-02 and SSO-06).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "BCM-04.02AC",
+ "Description": "The cloud service provider has procedures in place to ensure that cloud service customers are timely informed about planned activities related to business continuity tests and exercises that could affect the information security of the cloud service (e.g. regarding its availability). This information includes the scheduled timeframe for the operations as well as a description of the work to be carried out.",
+ "Attributes": [
+ {
+ "Section": "Business Continuity Management (BCM)",
+ "SubSection": "BCM-04 Business Continuity Testing",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "BCM-04.03AC",
+ "Description": "The cloud service provider provide cloud service customers an assessment of the potential impacts concerning the information security of the cloud service and with details for contacting the cloud service provider.",
+ "Attributes": [
+ {
+ "Section": "Business Continuity Management (BCM)",
+ "SubSection": "BCM-04 Business Continuity Testing",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "BCM-04.04AC",
+ "Description": "After a completed exercise, the existing alarm plan is reviewed and (if needed) adapted.",
+ "Attributes": [
+ {
+ "Section": "Business Continuity Management (BCM)",
+ "SubSection": "BCM-04 Business Continuity Testing",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "BCM-05.01B",
+ "Description": "Policies and instructions for Business Continuity Management (BCM) are documented, communicated and provided in accordance with SP-01 regarding the following aspects: - Goals of the BCM;- Roles and responsibilities, management commitment;- Scoping of the BCM, identifying relevant business processes;- Interfaces, in particular to Incident Management;- Communication with relevant entities and competent authorities;- Methodology;- Consideration of Risk;- Business Impact Analysis (BIA);- Business Continuity Plan (BCP);- Resource Planning (usually part of the BCP);- Testing of Business Continuity Plans and regular updates to BCM documentation; and- Continuous improvement of the Business Continuity Management.",
+ "Attributes": [
+ {
+ "Section": "Business Continuity Management (BCM)",
+ "SubSection": "BCM-05 Policy for Business Continuity Management",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COM-01.01B",
+ "Description": "The legal, regulatory, self-imposed and contractual requirements relevant to the information security of the cloud service as well as the cloud service provider's procedures for complying with these requirements are explicitly defined and documented.",
+ "Attributes": [
+ {
+ "Section": "Compliance (COM)",
+ "SubSection": "COM-01 Identification of Applicable Legal, Regulatory, Self-imposed or Contractual Requirements",
+ "Type": "Basic",
+ "AboutCriteria": "The cloud service provider's documentation may refer to the following requirements, among others: - Requirements for the protection of personal data (e.g. EU General Data Protection Regulation);- Compliance requirements based on contractual obligations with cloud service customers (e.g. ISO/IEC 27001, SOC 2, PCI-DSS);- Generally accepted accounting principles (e.g. in accordance with HGB or IFRS);- Requirements regarding access to data and auditability of digital documents (e.g. according to GDPdU); and- Other laws (e.g. according to BSIG or AktG). The documentation of the identified requirements and the procedures for complying with these requirements may be spread across several documents and does not necessarily have to be recorded in a single register or directory.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COM-01.01AC",
+ "Description": "The cloud service provider provides an overview or summary of the procedures described in the basic criterion when requested by a cloud service customer.",
+ "Attributes": [
+ {
+ "Section": "Compliance (COM)",
+ "SubSection": "COM-01 Compliance Management",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COM-02.01B",
+ "Description": "The cloud service provider documents and implements an audit programme over three years that defines the scope and the frequency of the audits in accordance with the management of change, policies, and the results of the risk assessment (cf. OIS-07).",
+ "Attributes": [
+ {
+ "Section": "Compliance (COM)",
+ "SubSection": "COM-02 Policy for Planning and Conducting Audits",
+ "Type": "Basic",
+ "AboutCriteria": "An audit is a systematic, independent and documented process for obtaining objective evidence and evaluating it objectively to determine the extent to which the audit criteria are fulfilled. Audits may be performed as internal audits, sometimes called first party audits, that are conducted by, or on behalf of, the organisation itself. They may also be performed as external audits, generally called second and third party audits. Second party audits are conducted by parties having an interest in the organisation, such as customers, or by other individuals on their behalf. Third party audits are conducted by independent auditing organisations. An audit programme comprises arrangements for a set of one or more audits planned for a specific time frame and directed towards a specific purpose. It may comprise internal and external audits. COM-02 is fully applicable to virtual infrastructure and infrastructure as code. Audit activities might still impact operations in a virtual environment. Reviews of configurations might for example be performed as part of code reviews.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that appropriate responses are made to malfunctions of the cloud service through such audits. To the extent that contractually guaranteed information and audit rights exist, the cloud service customers ensure through suitable controls that these rights are designed and executed in accordance with their own requirements."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COM-02.02B",
+ "Description": "Risk-based policies and instructions for planning and conducting audits that protect the operation of the cloud service from interference by audits are documented, communicated and made available in accordance with SP-01 and address the following aspects: - Restriction to read-only access to system components in accordance with the agreed audit plan and as necessary to perform the activities;- Activities that may result in malfunctions of the cloud service or breaches of contractual requirements are performed during scheduled maintenance windows or outside peak periods;- Logging and monitoring of activities;- Review of server and network equipment configurations under the responsibility of the cloud service provider;- Intrusion testing for external access points; and- Source code reviews of internally developed security functions.",
+ "Attributes": [
+ {
+ "Section": "Compliance (COM)",
+ "SubSection": "COM-02 Legal and Regulatory Compliance",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_securityaudit_role_created"
+ ]
+ },
+ {
+ "Id": "COM-02.01AC",
+ "Description": "The cloud service provider grants its cloud service customers contractually guaranteed information and audit rights. These rights may be exercised individually or as part of group audits.",
+ "Attributes": [
+ {
+ "Section": "Compliance (COM)",
+ "SubSection": "COM-02 Legal and Regulatory Compliance",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COM-03.01B",
+ "Description": "Subject matter experts check the compliance of the information security management system at regular intervals, at least annually, with the relevant and applicable legal, regulatory, self-imposed or contractual requirements (cf. COM-01) through internal audits. This includes checks regarding: - Compliance with the policies and instructions (cf. SP-01) within their scope of responsibility (cf. OIS-01); and- Effectiveness of organisational and operational measures to manage the risks posed to the security of network and information systems (cf. OIS-07).",
+ "Attributes": [
+ {
+ "Section": "Compliance (COM)",
+ "SubSection": "COM-03 Internal Audits of the Information Security Management System",
+ "Type": "Basic",
+ "AboutCriteria": "Subject matter experts operate, e.g., in the cloud service provider's internal revision department or expert third parties commissioned by the cloud service provider, such as auditing companies, and may hold relevant certifications such as 'Certified Internal Auditor (CIA)'. With regard to ISMS compliance, see Section 9.2 of ISO/IEC 27001, which outlines the requirements for conducting internal audits of an Information Security Management System (ISMS) and for establishing an internal audit program. When establishing the internal audit program(s), the cloud service provider should define the scope and criteria by considering the importance of the processes concerned and the results of previous audits. This approach allows cloud service providers to define the audit scope based on the criticality of complying with relevant legal, regulatory, or contractual requirements (cf. COM-01) and internal policies and instructions (cf. SP-01), without requiring a comprehensive review of all requirements during each audit cycle.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COM-03.02B",
+ "Description": "Subject matter experts conducting internal audits are not in the line of authority of the personnel of the area under review. If the size of the cloud service provider does not allow such separation of line of authority, alternative measures to guarantee the impartiality of compliance checks are put in place.",
+ "Attributes": [
+ {
+ "Section": "Compliance (COM)",
+ "SubSection": "COM-03 Audit and Assessment",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_securityaudit_role_created"
+ ]
+ },
+ {
+ "Id": "COM-03.03B",
+ "Description": "Identified vulnerabilities and deviations are subject to risk assessment in accordance with the risk management procedure (cf. OIS-07) and follow-up measures are defined and tracked (cf. OPS-18).",
+ "Attributes": [
+ {
+ "Section": "Compliance (COM)",
+ "SubSection": "COM-03 Audit and Assessment",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COM-03.04B",
+ "Description": "The cloud service provider documents specifically deviations that are non-conformities from the applicable legal, regulatory, self-imposed and contractual requirements relevant to the information security of the cloud service, including an assessment of their severity, and keeps track of their remediation.",
+ "Attributes": [
+ {
+ "Section": "Compliance (COM)",
+ "SubSection": "COM-03 Audit and Assessment",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COM-03.01AC",
+ "Description": "Internal audits are supplemented by procedures to automatically monitor applicable requirements of policies and instructions with regard to the following aspects: - Configuration of system components to provide the cloud service within the cloud service provider's area of responsibility;- Performance and availability of these system components;- Response time to malfunctions and security incidents; and- Recovery time (time to completion of error handling).",
+ "Attributes": [
+ {
+ "Section": "Compliance (COM)",
+ "SubSection": "COM-03 Audit and Assessment",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COM-03.02AC",
+ "Description": "Identified vulnerabilities and deviations are automatically reported to the appropriate cloud service provider's subject matter experts for immediate assessment and action.",
+ "Attributes": [
+ {
+ "Section": "Compliance (COM)",
+ "SubSection": "COM-03 Audit and Assessment",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COM-03.03AC",
+ "Description": "The cloud service provider provides interfaces to cloud service customers so that they can check compliance with selected contractual agreements in real time.",
+ "Attributes": [
+ {
+ "Section": "Compliance (COM)",
+ "SubSection": "COM-03 Audit and Assessment",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COM-04.01B",
+ "Description": "The top management of the cloud service provider is regularly informed about the information security performance within the scope of the ISMS in order to ensure its continued suitability, adequacy and effectiveness. The information is included in the management review of the ISMS. This management review ist performed at least once a year",
+ "Attributes": [
+ {
+ "Section": "Compliance (COM)",
+ "SubSection": "COM-04 Information on Information Security Performance and Management Assessment of the ISMS",
+ "Type": "Basic",
+ "AboutCriteria": "The top management is a natural person or group of people who take final decisions for the institution and are accountable for these. The aspects to be dealt with in the management review of the ISMS are listed in Section 9.3 of ISO / IEC 27001.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "COM-04.01AC",
+ "Description": "The cloud service provider defines and implements technical and operational metrics that align with the organisation's business objectives, security requirements, and compliance obligations. These metrics are documented and included in the management review of the ISMS to ensure their continued suitability, adequacy, and effectiveness.",
+ "Attributes": [
+ {
+ "Section": "Compliance (COM)",
+ "SubSection": "COM-04 Internal Controls",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "awslambda_function_invoke_api_operations_cloudtrail_logging_enabled",
+ "cloudtrail_bucket_requires_mfa_delete",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_insights_exist",
+ "cloudtrail_kms_encryption_enabled",
+ "cloudtrail_log_file_validation_enabled",
+ "cloudtrail_logs_s3_bucket_access_logging_enabled",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "cloudtrail_multi_region_enabled",
+ "cloudtrail_multi_region_enabled_logging_management_events",
+ "cloudtrail_s3_dataevents_read_enabled",
+ "cloudtrail_s3_dataevents_write_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled",
+ "iam_inline_policy_no_full_access_to_cloudtrail"
+ ]
+ },
+ {
+ "Id": "INQ-01.01B",
+ "Description": "Investigation requests from government agencies for cloud service customer data, cloud service derived data and account data are subject to a documented legal assessment by subject matter experts of the cloud service provider. The assessment determines whether the government agency has an applicable and legally valid legal basis and what further steps need to be taken for the given request.",
+ "Attributes": [
+ {
+ "Section": "Dealing with Investigation Requests from Government Agencies (INQ)",
+ "SubSection": "INQ-01 Legal Assessment of Investigative Requests",
+ "Type": "Basic",
+ "AboutCriteria": "For evidence purposes, all requests that were completely processed during the specified period shall form the population for testing the operating effectiveness of controls to meet the criteria in this domain. All requests are to be included in the population, irrespective of whether they resulted in cloud service customer data or cloud service derived data being disclosed.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that the type and scope of government investigation requests and the associated disclosure of their own data has been dealt with in their own risk management and that the use of the cloud service is only taken up or continued when this risk has been deemed acceptable."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "INQ-02.01B",
+ "Description": "The cloud service provider informs the affected cloud service customer(s) without undue delay. Exceptions for this information of the customer need to be justified by the legal basis of this request or because there are clear indications of illegal actions of the customer in connection with the use of the cloud service.",
+ "Attributes": [
+ {
+ "Section": "Dealing with Investigation Requests from Government Agencies (INQ)",
+ "SubSection": "INQ-02 Informing Cloud Service Customers about Investigation Requests",
+ "Type": "Basic",
+ "AboutCriteria": "This does not affect other legal or regulatory requirements that requires earlier information for cloud service customers.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that such notifications are received and legally checked according to their own specifications and possibilities."
+ }
+ ],
+ "Checks": [
+ "account_maintain_current_contact_details",
+ "account_maintain_different_contact_details_to_security_billing_and_operations",
+ "iam_securityaudit_role_created"
+ ]
+ },
+ {
+ "Id": "INQ-03.01B",
+ "Description": "Access to or disclosure of cloud service customer data, cloud service derived data or account data in response to government investigation requests is only permitted if the cloud service provider has performed a legal assessment. This assessment has to confirm that there is an applicable and valid legal basis and that the request must be granted according to this basis.",
+ "Attributes": [
+ {
+ "Section": "Dealing with Investigation Requests from Government Agencies (INQ)",
+ "SubSection": "INQ-03 Conditions for Access to or Disclosure of Data in Investigation Requests",
+ "Type": "Basic",
+ "AboutCriteria": "Disclosure of cloud service customer data to government agencies may include handing over encryption keys. The disclosure of keys should also be scrutinised in accordance with the INQ criteria. In particular, with reference to INQ-04, care should be taken to ensure that no other cloud service customer data is compromised by handing over a key.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "INQ-04.01B",
+ "Description": "The cloud service provider's procedures for granting access to or disclosing cloud service customer data and cloud service derived data in the context of investigation requests from government agencies ensure that the agencies only gain access to or insight into the data that is the subject of the investigation request.",
+ "Attributes": [
+ {
+ "Section": "Dealing with Investigation Requests from Government Agencies (INQ)",
+ "SubSection": "INQ-04 Limiting Access to or Disclosure of Data in Investigation Requests",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "INQ-04.02B",
+ "Description": "If no clear limitation of the data is possible, the cloud service provider anonymises or pseudonymises the data so that government agencies can only assign it to those cloud service customers who are subject of the investigation request.",
+ "Attributes": [
+ {
+ "Section": "Dealing with Investigation Requests from Government Agencies (INQ)",
+ "SubSection": "INQ-04 Investigation Response",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "INQ-04.01AC",
+ "Description": "The cloud service provider monitors the access and activities performed by or on behalf of investigators as determined by the process described in INQ-01.",
+ "Attributes": [
+ {
+ "Section": "Dealing with Investigation Requests from Government Agencies (INQ)",
+ "SubSection": "INQ-04 Investigation Response",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "accessanalyzer_enabled",
+ "accessanalyzer_enabled_without_findings",
+ "cloudfront_distributions_s3_origin_access_control",
+ "cloudtrail_logs_s3_bucket_access_logging_enabled"
+ ]
+ },
+ {
+ "Id": "INQ-04.02AC",
+ "Description": "Any deviations identified during monitoring are addressed through timely and appropriate remediation measures.",
+ "Attributes": [
+ {
+ "Section": "Dealing with Investigation Requests from Government Agencies (INQ)",
+ "SubSection": "INQ-04 Investigation Response",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "INQ-05.01B",
+ "Description": "The cloud service provider documents the technical procedures and other relevant technical information regarding the provision or disclosure of cloud service customer data in response to valid investigative requests and provides it to cloud service customers.",
+ "Attributes": [
+ {
+ "Section": "Dealing with Investigation Requests from Government Agencies (INQ)",
+ "SubSection": "INQ-05 Communication of Technical Procedures for Data Disclosure in Investigation Requests",
+ "Type": "Basic",
+ "AboutCriteria": "The criterion is limited to cloud service customer data. The cloud service provider has typically access to other data types such as cloud service derived data and account data such that extending the criterion to those other data types, may not lead to useful information for customers risk management. Technical capabilities and limitations to access cloud service customer data include aspects such as: - If the cloud service customers stores its cloud service customer data in unencrypted form;- If the cloud service provider encrypts cloud service customer data in storage and transit;- Whether the cloud service provider has the ability to decrypt cloud service customer data in case of such requests and how this ability for access or disclosure is used;- Retention periods for cloud service derived data relating to the cloud service customer and whether such data is stored in encrypted form;- Possibilities for decrypting cloud service customer data or for extracting cloud service customer data during the decryption process;- Disclosure of user identities and credentials; and- Further measures that have been created or can be used for disclosing cloud service customer data.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that they minimize potential disclosure of their customer data. According to the protection need of the cloud service customer data, the cloud service customer take the decision if the particular cloud service can be used or if the risk of disclosure is to high."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "INQ-05.02B",
+ "Description": "The type and scope of the provided information is based on the needs of the cloud service customers' expert personnel to assess risks to the cloud service customer's data confidentiality. At a minimum, the following aspects must be addressed: - The process for the provision and disclosure of cloud service customer data in response to legitimate investigative requests;- The technical capabilities and limitations of the cloud service provider regarding disclosure of cloud service customer data;- Logging mechanisms implemented to records access for disclosure of cloud service customer data;- Access possibilities for cloud service customers to review such logs;- Methods for accessing and disclosing cloud service customer data; and- Laws, regulations, or other legal means and their applicability concerning the cloud service provider's ability to inform its customers about the provision and disclosure of cloud service customer data.",
+ "Attributes": [
+ {
+ "Section": "Dealing with Investigation Requests from Government Agencies (INQ)",
+ "SubSection": "INQ-05 Legal Cooperation",
+ "Type": "Basic",
+ "AboutCriteria": "The criterion is limited to cloud service customer data. The cloud service provider has typically access to other data types such as cloud service derived data and account data such that extending the criterion to those other data types, may not lead to useful information for customers risk management. Technical capabilities and limitations to access cloud service customer data include aspects such as: - If the cloud service customers stores its cloud service customer data in unencrypted form;- If the cloud service provider encrypts cloud service customer data in storage and transit;- Whether the cloud service provider has the ability to decrypt cloud service customer data in case of such requests and how this ability for access or disclosure is used;- Retention periods for cloud service derived data relating to the cloud service customer and whether such data is stored in encrypted form;- Possibilities for decrypting cloud service customer data or for extracting cloud service customer data during the decryption process;- Disclosure of user identities and credentials; and- Further measures that have been created or can be used for disclosing cloud service customer data.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "INQ-05.03B",
+ "Description": "The document is maintained in accordance with SP-01 and aligned with the cloud service provider's guidelines on minimising access to cloud service customer data (cf. DEV-01) to ensure its relevance and accuracy for cloud service customers.",
+ "Attributes": [
+ {
+ "Section": "Dealing with Investigation Requests from Government Agencies (INQ)",
+ "SubSection": "INQ-05 Legal Cooperation",
+ "Type": "Basic",
+ "AboutCriteria": "The criterion is limited to cloud service customer data. The cloud service provider has typically access to other data types such as cloud service derived data and account data such that extending the criterion to those other data types, may not lead to useful information for customers risk management. Technical capabilities and limitations to access cloud service customer data include aspects such as: - If the cloud service customers stores its cloud service customer data in unencrypted form;- If the cloud service provider encrypts cloud service customer data in storage and transit;- Whether the cloud service provider has the ability to decrypt cloud service customer data in case of such requests and how this ability for access or disclosure is used;- Retention periods for cloud service derived data relating to the cloud service customer and whether such data is stored in encrypted form;- Possibilities for decrypting cloud service customer data or for extracting cloud service customer data during the decryption process;- Disclosure of user identities and credentials; and- Further measures that have been created or can be used for disclosing cloud service customer data.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-01.01B",
+ "Description": "The cloud service provider provides cloud service customers with publicly available guidelines and recommendations for the secure use of the cloud service provided. The information contained therein is intended to assist the cloud service customer in the secure configuration, installation and use of the cloud service, as well as the implementation of complementary customer controls, to the extent applicable to the cloud service and the responsibility of the cloud user.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-01 Guidelines and Recommendations for Cloud Service Customers",
+ "Type": "Basic",
+ "AboutCriteria": "In a cloud environment, security responsibilities are shared between the cloud service provider and the customer, varying by service type — Infrastructure as a Service (IaaS), Platform as a Service (PaaS), or Software as a Service (SaaS). Guidance on the complementary customer controls helps cloud service customers understand their roles and responsibilities within the Shared Responsibility Model, also in terms of security and operational management (cf. OIS-03). By offering detailed guidance, cloud service customers are equipped to understand and implement the necessary controls that fall under their responsibility. The level of detail and length can vary according to the type of cloud service provided. Examples for defensive mechanisms include payload filtering, traffic shaping, load balancing, load shedding and DDoS defences. Examples for wide-area distributed architecture mechanisms include replication for fault tolerance, multiple cloud regions to avoid localised outages and disasters and geo-dispersion of service endpoints to reduce user-facing latency.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that the cloud service provider's information is used to derive policies, concepts and measures for the secure configuration and use (according to their own risk assessment) of the cloud service. Compliance with these policies, concepts and measures is checked. Changes to the information are promptly assessed for their impact on these documents and any necessary changes are implemented."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-01.02B",
+ "Description": "The type and scope of the information provided will be based on the needs of subject matter experts of the cloud service customers who set information security requirements, implement them or verify the implementation (e.g. IT, Compliance, Internal Audit). The information in the guidelines and recommendations for the secure use of the cloud service address the following aspects, where applicable to the cloud service: - Instructions for secure configuration;- Information sources on known vulnerabilities and update mechanisms;- Malware protection for containers or virtual machines;- Error handling and logging mechanisms;- Authentication mechanisms;- Roles and rights concept including combinations that result in an elevated risk;- Services and functions for administration of the cloud service by privileged users;- Complementary user entity controls;- Encryption mechanisms and services;- Data leakage prevention;- Secure development and operation of applications on the cloud service;- Use and configuration of defensive mechanisms;- Use and configuration of wide-area distributed architecture mechanisms;- Methods used for client data separation (cf. OPS-28 and OPS-29); and- How information security risks related to the use of the cloud service can be addressed through proper logging and monitoring mechanisms.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-01 Product Security",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-01.03B",
+ "Description": "The cloud service provider describes in the user documentation all risks the cloud service customer has to manage on its side.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-01 Product Security",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-01.04B",
+ "Description": "The information is maintained so that it is applicable to the cloud service provided in the version intended for productive use.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-01 Product Security",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-01.01AC",
+ "Description": "The cloud service provider promptly notifies cloud service customers about any planned modifications to the cloud service that could result in a loss or downgrade of functionality.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-01 Product Security",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-02.01B",
+ "Description": "The cloud service provider applies appropriate measures to check the cloud service for vulnerabilities which might have been integrated into the cloud service during the software development process.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-02 Identification of Vulnerabilities of the Cloud Service",
+ "Type": "Basic",
+ "AboutCriteria": "Known vulnerabilities in externally related system components (e.g. operating systems) used for the development and provision of the cloud service but not going through the cloud service provider's software development process are the subject of criterion OPS-25 (Managing Vulnerabilities, Malfunctions and Errors - Vulnerability Scans).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-02.02B",
+ "Description": "The procedures for identifying such vulnerabilities are part of the software development process and, depending on a risk assessment, include the following activities: - Static Application Security Testing;- Dynamic Application Security Testing;- Code reviews by the cloud service provider's subject matter experts;- Conducting security checks based on a Software Bill of Materials (SBOM); and- Obtaining information about confirmed vulnerabilities in software libraries provided by third parties and used in their own cloud service.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-02 Security by Design",
+ "Type": "Basic",
+ "AboutCriteria": "Known vulnerabilities in externally related system components (e.g. operating systems) used for the development and provision of the cloud service but not going through the cloud service provider's software development process are the subject of criterion OPS-25 (Managing Vulnerabilities, Malfunctions and Errors - Vulnerability Scans).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-02.03B",
+ "Description": "The severity of identified vulnerabilities is assessed according to defined criteria and measures are taken to immediately eliminate or mitigate them.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-02 Security by Design",
+ "Type": "Basic",
+ "AboutCriteria": "Known vulnerabilities in externally related system components (e.g. operating systems) used for the development and provision of the cloud service but not going through the cloud service provider's software development process are the subject of criterion OPS-25 (Managing Vulnerabilities, Malfunctions and Errors - Vulnerability Scans).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-02.01AC",
+ "Description": "The procedures for identifying such vulnerabilities also include annual code reviews or security penetration tests by qualified external third parties.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-02 Security by Design",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Known vulnerabilities in externally related system components (e.g. operating systems) used for the development and provision of the cloud service but not going through the cloud service provider's software development process are the subject of criterion OPS-25 (Managing Vulnerabilities, Malfunctions and Errors - Vulnerability Scans).",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-03.01B",
+ "Description": "The cloud service provider ensures that cloud service customers have access to regularly updated information about known vulnerabilities associated with the cloud service. This includes: - Known-exploited vulnerabilities;- Known vulnerabilities for which a patch and/or mitigating measures are provided by the cloud service provider (N-Day vulnerabilities), with appropriate references to the patch/measure; and- Known vulnerabilities for which a patch and/or mitigating measures are unlikely to be provided by the cloud service provider (Forever-Day vulnerabilities), along with a justification for why they are not provided. These pertain to the provided cloud service and assets provided by the cloud service provider that the cloud service customers have to install, provide or operate within their own responsibility.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-03 Informing Customers about Known Vulnerabilities",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that the information in this register is incorporated without undue delay into their own risk management, evaluated and, if necessary, taken into account in their own area of responsibility."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-03.02B",
+ "Description": "The provided information includes a description of the remediation options for that vulnerability.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-03 Security Testing",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-03.03B",
+ "Description": "These vulnerabilities are also identified based on Software Bill of Materials (SBOM) data.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-03 Security Testing",
+ "Type": "Basic",
+ "AboutCriteria": "Although the cloud service provider has to identify the vulnerabilities based on SBOM data to fulfill this criterion, this SBOM data need not be handed over to the customer to fulfill the criterion.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-03.04B",
+ "Description": "The vulnerabilities are presented with references to the Common Vulnerabilities and Exposures (CVE) and assessments are based on: - The Common Vulnerability Scoring System (CVSS),- The Exploit Prediction Scoring System (EPSS), and- The Stakeholder-Specific Vulnerability Categorization (SSVC) in the latest version valid at the time of the execution of the control. This information is easily accessible to any cloud service customer and forms a suitable basis for risk assessment and possible follow-up actions on the part of the cloud service customers, among other things through references to vulnerability-specific measures in: - Vulnerability, Exploitability eXchange (VEX), and- Common Security Advisory Frameworks (CSAF).",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-03 Security Testing",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-03.05B",
+ "Description": "The cloud service provider determines when a vulnerability is notified to the cloud service customers as part of Coordinated Vulnerability Disclosure (CVD).",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-03 Security Testing",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-03.06B",
+ "Description": "The cloud service provider consults at least daily the vulnerability registers of its service organisations, analyses the potential impact of the published vulnerabilities on the cloud service, and handles them according to the vulnerability handling process (cf. OPS-18).",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-03 Security Testing",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-03.01AC",
+ "Description": "Assets provided by the cloud service provider, which must be installed, provided or operated by cloud service customers within their area of responsibility, are equipped with automatic update mechanisms. After approval by the respective cloud service customer, software updates are rolled out by the cloud service provider.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-03 Security Testing",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Assets provided by the cloud service provider that cloud service customers have to install, deploy or operate themselves in their area of responsibility are for example local software clients and apps as well as tools for integrating the cloud service. If the cloud service relies on other cloud services, this information should incorporate or refer to the vulnerabilities of those other cloud services in order for this criterion to be met.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-03.02AC",
+ "Description": "Vulnerabilities are disclosed in accordance with the Common Security Advisory Framework Version 2.0 or higher, and as specified in BSI's Technical Guideline TR-03191.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-03 Security Testing",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Assets provided by the cloud service provider that cloud service customers have to install, deploy or operate themselves in their area of responsibility are for example local software clients and apps as well as tools for integrating the cloud service. If the cloud service relies on other cloud services, this information should incorporate or refer to the vulnerabilities of those other cloud services in order for this criterion to be met.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-04.01B",
+ "Description": "The cloud service provided is equipped with error handling and logging mechanisms for system components under the responsibility of the cloud service customer. These enable cloud users to obtain security-related information about the security status of the cloud service as well as the data, services or functions it provides.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-04 Error handling and Logging Mechanisms",
+ "Type": "Basic",
+ "AboutCriteria": "Unlike the additional criterion OPS-15, which covers both, system components under the responsibility of the cloud service provider, as well as system components under the responsibility of the cloud service customer, the scope of this criterion is limited to system components under the responsibility of the cloud service customer only.",
+ "ComplementaryCriteria": "If the cloud service is equipped with error handling and logging mechanisms, cloud service customers must activate these and configure them according to defined requirements. The cloud service customer must incorporate his own information security management for this purpose."
+ }
+ ],
+ "Checks": [
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudwatch_alarm_actions_alarm_state_configured",
+ "cloudwatch_alarm_actions_enabled",
+ "cloudwatch_changes_to_network_acls_alarm_configured",
+ "cloudwatch_changes_to_network_gateways_alarm_configured",
+ "cloudwatch_changes_to_network_route_tables_alarm_configured",
+ "cloudwatch_changes_to_vpcs_alarm_configured",
+ "cloudwatch_cross_account_sharing_disabled",
+ "cloudwatch_log_group_kms_encryption_enabled",
+ "cloudwatch_log_group_no_secrets_in_logs",
+ "cloudwatch_log_group_not_publicly_accessible",
+ "cloudwatch_log_group_retention_policy_specific_days_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_authentication_failures",
+ "cloudwatch_log_metric_filter_aws_organizations_changes",
+ "cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk",
+ "cloudwatch_log_metric_filter_for_s3_bucket_policy_changes",
+ "cloudwatch_log_metric_filter_policy_changes",
+ "cloudwatch_log_metric_filter_root_usage",
+ "cloudwatch_log_metric_filter_security_group_changes",
+ "cloudwatch_log_metric_filter_sign_in_without_mfa",
+ "cloudwatch_log_metric_filter_unauthorized_api_calls"
+ ]
+ },
+ {
+ "Id": "PSS-04.02B",
+ "Description": "These mechanisms are designed to address identified security risks related to the use of the cloud service. The cloud service provider identifies and documents these risks in advance, ensuring that the implemented logging mechanisms capture relevant events and activities.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-04 Security Updates",
+ "Type": "Basic",
+ "AboutCriteria": "Unlike the additional criterion OPS-15, which covers both, system components under the responsibility of the cloud service provider, as well as system components under the responsibility of the cloud service customer, the scope of this criterion is limited to system components under the responsibility of the cloud service customer only.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-04.03B",
+ "Description": "The information is detailed enough to allow cloud users to check the following aspects, insofar as they are applicable to the cloud service: - Which cloud service customer data and cloud service derived data, services or functions available to the cloud user within the cloud service, have been accessed by whom, when and from where (Audit Logs);- Malfunctions during processing of automatic or manual actions; and- Changes to security-relevant configuration parameters, error handling and logging mechanisms, user authentication, action authorisation, cryptography, and communication security.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-04 Security Updates",
+ "Type": "Basic",
+ "AboutCriteria": "Unlike the additional criterion OPS-15, which covers both, system components under the responsibility of the cloud service provider, as well as system components under the responsibility of the cloud service customer, the scope of this criterion is limited to system components under the responsibility of the cloud service customer only.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-04.04B",
+ "Description": "The logged information is protected from unauthorised access and modification and can be deleted by the cloud service customer.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-04 Security Updates",
+ "Type": "Basic",
+ "AboutCriteria": "Unlike the additional criterion OPS-15, which covers both, system components under the responsibility of the cloud service provider, as well as system components under the responsibility of the cloud service customer, the scope of this criterion is limited to system components under the responsibility of the cloud service customer only.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudtrail_kms_encryption_enabled",
+ "cloudwatch_log_group_kms_encryption_enabled",
+ "codebuild_project_s3_logs_encrypted"
+ ]
+ },
+ {
+ "Id": "PSS-04.05B",
+ "Description": "If the cloud service customer is responsible for the activation or type and scope of logging, the cloud service provider has provide appropriate logging capabilities.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-04 Security Updates",
+ "Type": "Basic",
+ "AboutCriteria": "Unlike the additional criterion OPS-15, which covers both, system components under the responsibility of the cloud service provider, as well as system components under the responsibility of the cloud service customer, the scope of this criterion is limited to system components under the responsibility of the cloud service customer only.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "acm_certificates_transparency_logs_enabled",
+ "apigateway_restapi_logging_enabled",
+ "apigatewayv2_api_access_logging_enabled",
+ "appsync_field_level_logging_enabled",
+ "athena_workgroup_logging_enabled",
+ "awslambda_function_invoke_api_operations_cloudtrail_logging_enabled",
+ "bedrock_model_invocation_logging_enabled",
+ "cloudfront_distributions_logging_enabled",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_logs_s3_bucket_access_logging_enabled",
+ "cloudtrail_multi_region_enabled_logging_management_events",
+ "cloudtrail_s3_dataevents_read_enabled",
+ "cloudtrail_s3_dataevents_write_enabled",
+ "codebuild_project_logging_enabled",
+ "datasync_task_logging_enabled",
+ "dms_replication_task_source_logging_enabled",
+ "dms_replication_task_target_logging_enabled",
+ "ec2_client_vpn_endpoint_connection_logging_enabled",
+ "ecs_task_definitions_logging_block_mode",
+ "ecs_task_definitions_logging_enabled",
+ "eks_control_plane_logging_all_types_enabled",
+ "elasticbeanstalk_environment_cloudwatch_logging_enabled",
+ "elb_logging_enabled",
+ "elbv2_logging_enabled",
+ "glue_etl_jobs_logging_enabled",
+ "mq_broker_logging_enabled",
+ "networkfirewall_logging_enabled",
+ "opensearch_service_domains_audit_logging_enabled",
+ "opensearch_service_domains_cloudwatch_logging_enabled",
+ "redshift_cluster_audit_logging",
+ "route53_public_hosted_zones_cloudwatch_logging_enabled",
+ "s3_bucket_server_access_logging_enabled",
+ "stepfunctions_statemachine_logging_enabled",
+ "waf_global_webacl_logging_enabled",
+ "wafv2_webacl_logging_enabled",
+ "wafv2_webacl_rule_logging_enabled"
+ ]
+ },
+ {
+ "Id": "PSS-04.01AC",
+ "Description": "Cloud users can retrieve security-related information via documented interfaces which are suitable for further processing this information as part of their Security Information and Event Management (SIEM).",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-04 Security Updates",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "Unlike the additional criterion OPS-15, which covers both, system components under the responsibility of the cloud service provider, as well as system components under the responsibility of the cloud service customer, the scope of this criterion is limited to system components under the responsibility of the cloud service customer only.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "ssm_documents_set_as_public",
+ "ssm_document_secrets"
+ ]
+ },
+ {
+ "Id": "PSS-05.01B",
+ "Description": "The cloud service provider provides authentication mechanisms that can force strong authentication (e.g. two or more factors) for users, IT components or applications within the cloud users' area of responsibility. These authentication mechanisms are set up at all access points that allow users, IT components or applications to interact with the cloud service.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-05 Authentication Mechanisms",
+ "Type": "Basic",
+ "AboutCriteria": "IT components in the sense of this criterion are independently usable objects with external interfaces that can be connected with other IT components. Access points in the sense of this criterion are those that can be accessed by users, IT components or applications via networks (for users, for example, the login screen on the publicly accessible website of the cloud service provider). Multi-factor authentication can e.g. be performed with cryptographic certificates, smart cards or tokens.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that the authentication mechanisms offered by the cloud service are used in accordance with the customer's identity and authorisation management requirements."
+ }
+ ],
+ "Checks": [
+ "cloudtrail_bucket_requires_mfa_delete",
+ "cloudwatch_log_metric_filter_sign_in_without_mfa",
+ "cognito_user_pool_mfa_enabled",
+ "directoryservice_supported_mfa_radius_enabled",
+ "iam_administrator_access_with_mfa",
+ "iam_root_hardware_mfa_enabled",
+ "iam_root_mfa_enabled",
+ "iam_user_hardware_mfa_enabled",
+ "iam_user_mfa_enabled_console_access",
+ "s3_bucket_no_mfa_delete"
+ ]
+ },
+ {
+ "Id": "PSS-05.02B",
+ "Description": "For privileged users, IT components or applications, these authentication mechanisms are enforced.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-05 Security Monitoring",
+ "Type": "Basic",
+ "AboutCriteria": "IT components in the sense of this criterion are independently usable objects with external interfaces that can be connected with other IT components. Access points in the sense of this criterion are those that can be accessed by users, IT components or applications via networks (for users, for example, the login screen on the publicly accessible website of the cloud service provider). Multi-factor authentication can e.g. be performed with cryptographic certificates, smart cards or tokens.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "iam_administrator_access_with_mfa",
+ "iam_root_mfa_enabled"
+ ]
+ },
+ {
+ "Id": "PSS-05.01AC",
+ "Description": "The cloud service offers out-of-band (OOB) authentication, in which the factors are transmitted via different channels (e.g. Internet and mobile network).",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-05 Security Monitoring",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "IT components in the sense of this criterion are independently usable objects with external interfaces that can be connected with other IT components. Access points in the sense of this criterion are those that can be accessed by users, IT components or applications via networks (for users, for example, the login screen on the publicly accessible website of the cloud service provider). Multi-factor authentication can e.g. be performed with cryptographic certificates, smart cards or tokens.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-06.01B",
+ "Description": "To protect confidentiality, availability, integrity and authenticity during interactions with the cloud service, a suitable session management system is used that corresponds to the state-of-the-art and is protected against known attacks.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-06 Session Management",
+ "Type": "Basic",
+ "AboutCriteria": "Known attacks include manipulation, forgery, session takeover, Denial of Service attacks, enveloping, replay and null cipher attacks.",
+ "ComplementaryCriteria": "Cloud service customers can use appropriate controls to ensure that they are using the session management protection features of the cloud service in accordance with their own ISMS. They also set the time period after which a session becomes invalid according to their own ISMS specifications."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-06.02B",
+ "Description": "Mechanisms are implemented that invalidate a session after it has been detected as inactive. The inactivity can be detected by time measurement. In this case, the time interval can be configured by the cloud service provider or - if technically possible - by the cloud service customer.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-06 Security Incident Response",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "appstream_fleet_session_idle_disconnect_timeout",
+ "appstream_fleet_session_disconnect_timeout",
+ "appstream_fleet_maximum_session_duration"
+ ]
+ },
+ {
+ "Id": "PSS-07.01B",
+ "Description": "If passwords are used as authentication information for the cloud service, their confidentiality is ensured by the following procedures: - Users can initially create the password themselves or must change an initial password when logging in to the cloud service for the first time. An initial password loses its validity after a maximum of 14 days;- When creating passwords, compliance with the length and complexity requirements of the cloud service provider (cf. IAM-09) or the cloud service customer is technically enforced;- The user is informed about changing or resetting the password. Any password reset procedure is not valid for more than 48 hours and the password shall be changed by the user after the use of the reset procedure; and- The server-side storage uses hash functions in combination with salt values, both corresponding to the state-of-the-art. The cloud service provider makes available to the cloud service customers the rules and recommendations that apply to the users under their responsibility, and provides the cloud service customers with tools to manage and enforce these rules.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-07 Confidentiality of Authentication Information",
+ "Type": "Basic",
+ "AboutCriteria": "The state-of-the-art regarding cryptographic hash functions is described in the current version of the BSI Technical Guideline TR-02102-1 'Cryptographic Mechanisms: Recommendations and Key Lengths'.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that they use sufficiently secure passwords (cf. IAM-09) according to their own assessment and that the risks of unauthorised access associated with their own choice are borne."
+ }
+ ],
+ "Checks": [
+ "cognito_user_pool_password_policy_lowercase",
+ "cognito_user_pool_password_policy_minimum_length_14",
+ "cognito_user_pool_password_policy_number",
+ "cognito_user_pool_password_policy_symbol",
+ "cognito_user_pool_password_policy_uppercase",
+ "cognito_user_pool_temporary_password_expiration",
+ "glue_data_catalogs_connection_passwords_encryption_enabled",
+ "iam_password_policy_expires_passwords_within_90_days_or_less",
+ "iam_password_policy_lowercase",
+ "iam_password_policy_minimum_length_14",
+ "iam_password_policy_number",
+ "iam_password_policy_reuse_24",
+ "iam_password_policy_symbol",
+ "iam_password_policy_uppercase",
+ "iam_user_mfa_enabled_console_access",
+ "iam_user_no_setup_initial_access_key"
+ ]
+ },
+ {
+ "Id": "PSS-07.02B",
+ "Description": "The cloud service provider distributes credentials using additional security mechanisms to verify the identity of the recipient (e.g. multi-factor authentication), validate the request and protect the credentials.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-07 Security Documentation",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudtrail_bucket_requires_mfa_delete",
+ "cloudwatch_log_metric_filter_sign_in_without_mfa",
+ "cognito_user_pool_mfa_enabled",
+ "directoryservice_supported_mfa_radius_enabled",
+ "iam_administrator_access_with_mfa",
+ "iam_root_hardware_mfa_enabled",
+ "iam_root_mfa_enabled",
+ "iam_user_hardware_mfa_enabled",
+ "iam_user_mfa_enabled_console_access",
+ "s3_bucket_no_mfa_delete"
+ ]
+ },
+ {
+ "Id": "PSS-08.01B",
+ "Description": "The cloud service provider provides cloud users with a roles and rights concept. This concept allows users to manage their own access rights. It describes rights profiles for the functions provided by the cloud service. Cloud users can configure certain access control parameters themselves.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-08 Roles and Rights Concept",
+ "Type": "Basic",
+ "AboutCriteria": "In IaaS, a role and rights concept would describe, among other things, the rights profiles for the following functions of the cloud service: - Administration of the states of virtual machines (start, pause, stop) as well as for their migration or monitoring;- Management of available images that can be used to create virtual machines; and- Management of virtual networks (e.g. configuration of virtual routers and switches).",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that: - they actively utilise the roles and rights concept and accompanying functionalities offered by the cloud service provider;- the granting of permissions to users in their area of responsibility is subject to authorisation; and- the appropriateness of the assigned authorisations is regularly reviewed and authorisations are adjusted or withdrawn in a timely manner in the event of necessary changes (e.g. employee resignation)."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-08.02B",
+ "Description": "The rights profiles are suitable for enabling cloud users to manage access authorisations and permissions in accordance with the principle of least-privilege and how it is necessary for the performance of tasks ('need-to-know principle') and to implement the principle of functional separation between operational and controlling functions ('separation of duties').",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-08 Security Training",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-08.03B",
+ "Description": "The cloud service provider offers a functionality to help cloud service customers review user access rights under their responsibility.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-08 Security Training",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "accessanalyzer_enabled",
+ "accessanalyzer_enabled_without_findings"
+ ]
+ },
+ {
+ "Id": "PSS-08.04B",
+ "Description": "In case the service includes the management of customer identities, for a given customer identity, the cloud service provider is able to provide the list of access rights currently granted to that identity according to the contractual terms.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-08 Security Training",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-09.01B",
+ "Description": "Access to the functions provided by the cloud service is restricted by access controls (authorisation mechanisms) that verify whether users, IT components, or applications are authorised to perform certain actions.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-09 Authorisation Mechanisms",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that system components under their responsibility are regularly checked for vulnerabilities and to mitigate these by appropriate measures."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-09.02B",
+ "Description": "The cloud service provider validates the functionality of the authorisation mechanisms before new functions are made available to cloud users and in the event of changes to the authorisation mechanisms of existing functions (cf. DEV-06).",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-09 Security Compliance",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-09.03B",
+ "Description": "If the validation led to vulnerabilities, the severity of identified vulnerabilities is assessed according to defined criteria based on industry standard metrics (e.g. Common Vulnerability Scoring System) and measures for timely resolution or mitigation are initiated.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-09 Security Compliance",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-09.04B",
+ "Description": "Information about known-exploited vulnerabilities and known vulnerabilities for which a patch and/or mitigating measures are unlikely to be provided by the cloud service provider is included in the information provided to cloud service customers about known vulnerabilities (cf. PSS-03).",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-09 Security Compliance",
+ "Type": "Basic",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-09.01AC",
+ "Description": "Access controls are attribute-based to enable granular and contextual checks against multiple attributes of a user, IT component, or application (e.g., role, location, authentication method).",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-09 Security Compliance",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "accessanalyzer_enabled",
+ "iam_policy_attached_only_to_group_or_roles",
+ "ec2_instance_profile_attached",
+ "iam_role_cross_account_readonlyaccess_policy",
+ "iam_securityaudit_role_created"
+ ]
+ },
+ {
+ "Id": "PSS-10.01B",
+ "Description": "If the cloud service offers functions for software-defined networking (SDN), the confidentiality of cloud service customer data is ensured by suitable SDN procedures.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-10 Software Defined Networking",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion is typically not applicable to the SaaS service model. Suitable SDN methods for increasing confidentiality are, for example, L2 overlay networking (tagging) or tunnelling/encapsulation.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that they validate the functionality of SDN features for their individual use cases before using newly introduced capabilities or modifed existing ones."
+ }
+ ],
+ "Checks": [
+ "cloudfront_distributions_field_level_encryption_enabled",
+ "sns_topics_kms_encryption_at_rest_enabled"
+ ]
+ },
+ {
+ "Id": "PSS-10.02B",
+ "Description": "The cloud service provider validates the functionality of the SDN functions before providing new SDN features to cloud users or modifying existing SDN features. Identified defects are assessed and corrected in a risk-oriented manner.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-10 Security Governance",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion is typically not applicable to the SaaS service model. Suitable SDN methods for increasing confidentiality are, for example, L2 overlay networking (tagging) or tunnelling/encapsulation.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-11.01B",
+ "Description": "If cloud service customers operate virtual machines or containers with the cloud service, the cloud service provider ensures the following aspects: - Cloud service customers can restrict the selection of images of virtual machines or containers according to their specifications, so that users of the cloud service customer can only launch the images or containers released according to these restrictions;- Images made available are labelled with information about their origin;- If the cloud service provider provides images of virtual machines or containers to the cloud service customer, the cloud service provider appropriately informs the cloud service customer of the changes made to the previous version; and- In addition, these images provided by the cloud service provider are hardened according to generally accepted industry standards;",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-11 Images for Virtual Machines and Containers",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion is typically not applicable to the SaaS service model. Generally accepted industry standards are, for example, the Security Configuration Benchmark of the Centre for Internet Security (CIS) or the corresponding modules in the BSI IT-Grundschutz-Compendium.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that the images of virtual machines or containers they operate with the cloud service comply with their information security management requirements and that the results of the integrity checks at startup and at runtime are processed according to these requirements."
+ }
+ ],
+ "Checks": [
+ "ecr_registry_scan_images_on_push_enabled",
+ "ecr_repositories_scan_images_on_push_enabled",
+ "ecr_repositories_scan_vulnerabilities_in_latest_image",
+ "inspector2_is_enabled"
+ ]
+ },
+ {
+ "Id": "PSS-11.01AC",
+ "Description": "At startup and runtime of virtual machine or container images, an integrity check is performed that detects image manipulations and reports them to the cloud service customer.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-11 Security Risk Management",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "This criterion is typically not applicable to the SaaS service model. Generally accepted industry standards are, for example, the Security Configuration Benchmark of the Centre for Internet Security (CIS) or the corresponding modules in the BSI IT-Grundschutz-Compendium.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "ecr_registry_scan_images_on_push_enabled",
+ "ecr_repositories_scan_images_on_push_enabled",
+ "ecr_repositories_scan_vulnerabilities_in_latest_image"
+ ]
+ },
+ {
+ "Id": "PSS-12.01B",
+ "Description": "The architecture of the cloud service, including the technical design of its infrastructure, ensures that cloud service customer data and eventual data backups thereof are processed and stored only in the region specified in the contractual agreements with the cloud service provider. If the cloud service customer is able to select from multiple regions, processing and storage of the aforementioned data is limited to the selected region.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-12 Region of Data Processing and Storage",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion supplements the Boundary Condition BC-01. It does not require the cloud service provider to offer multiple partitions. If the cloud service provider offers only one partition for the cloud service(s) in scope, this does not comprise a deviation from the criterion. If the additional complemental criterion is only applicable for selected partitions in scope of an assurance engagement in accordance with this catalogue, this should be presented in the cloud service provider's description of its system of internal control for the cloud service. This criterion is a prerequisite for technical service sovereignty.",
+ "ComplementaryCriteria": "Cloud service customers ensure through suitable controls that, when selecting service providers and configuring the cloud service, they are informed about the available data processing and storage partitions and, if there is a choice between different partitions, that they select those that meet their own requirements. Depending on the use case and especially when using services of a cloud service provider which is based in another country, cloud service customers take the laws of their own jurisdiction applicable to them into account when making their selection (e.g. when processing personal data; compliance with legal retention obligations for business documents, etc.)."
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-12.01AS",
+ "Description": "The basic criterion also applies to all cloud service derived data.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-12 Security Assessment",
+ "Type": "Additional (Sharpening)",
+ "AboutCriteria": "This criterion supplements the Boundary Condition BC-01. It does not require the cloud service provider to offer multiple partitions. If the cloud service provider offers only one partition for the cloud service(s) in scope, this does not comprise a deviation from the criterion. If the additional complemental criterion is only applicable for selected partitions in scope of an assurance engagement in accordance with this catalogue, this should be presented in the cloud service provider's description of its system of internal control for the cloud service. This criterion is a prerequisite for technical service sovereignty.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-12.02B",
+ "Description": "Processing and storage of cloud service customer data data within the service organisations of the cloud service provider also adheres to the regions selected by the cloud service customer.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-12 Security Assessment",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion supplements the Boundary Condition BC-01. It does not require the cloud service provider to offer multiple partitions. If the cloud service provider offers only one partition for the cloud service(s) in scope, this does not comprise a deviation from the criterion. If the additional complemental criterion is only applicable for selected partitions in scope of an assurance engagement in accordance with this catalogue, this should be presented in the cloud service provider's description of its system of internal control for the cloud service. This criterion is a prerequisite for technical service sovereignty.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "apigateway_restapi_cache_encrypted",
+ "athena_workgroup_encryption",
+ "backup_recovery_point_encrypted",
+ "backup_vaults_encrypted",
+ "bedrock_model_invocation_logs_encryption_enabled",
+ "cloudfront_distributions_field_level_encryption_enabled",
+ "cloudtrail_kms_encryption_enabled",
+ "cloudwatch_log_group_kms_encryption_enabled",
+ "codebuild_report_group_export_encrypted",
+ "dms_endpoint_redis_in_transit_encryption_enabled",
+ "documentdb_cluster_storage_encrypted",
+ "dynamodb_accelerator_cluster_encryption_enabled",
+ "dynamodb_accelerator_cluster_in_transit_encryption_enabled",
+ "dynamodb_tables_kms_cmk_encryption_enabled",
+ "ec2_ebs_default_encryption",
+ "ec2_ebs_snapshots_encrypted",
+ "ec2_ebs_volume_encryption",
+ "efs_encryption_at_rest_enabled",
+ "eks_cluster_kms_cmk_encryption_in_secrets_enabled",
+ "elasticache_redis_cluster_in_transit_encryption_enabled",
+ "elasticache_redis_cluster_rest_encryption_enabled",
+ "firehose_stream_encrypted_at_rest",
+ "glue_data_catalogs_connection_passwords_encryption_enabled",
+ "glue_data_catalogs_metadata_encryption_enabled",
+ "glue_development_endpoints_cloudwatch_logs_encryption_enabled",
+ "glue_development_endpoints_job_bookmark_encryption_enabled",
+ "glue_development_endpoints_s3_encryption_enabled",
+ "glue_etl_jobs_amazon_s3_encryption_enabled",
+ "glue_etl_jobs_cloudwatch_logs_encryption_enabled",
+ "glue_etl_jobs_job_bookmark_encryption_enabled",
+ "glue_ml_transform_encrypted_at_rest",
+ "kafka_cluster_encryption_at_rest_uses_cmk",
+ "kafka_cluster_in_transit_encryption_enabled",
+ "kafka_connector_in_transit_encryption_enabled",
+ "kinesis_stream_encrypted_at_rest",
+ "neptune_cluster_snapshot_encrypted",
+ "neptune_cluster_storage_encrypted",
+ "opensearch_service_domains_encryption_at_rest_enabled",
+ "opensearch_service_domains_node_to_node_encryption_enabled",
+ "rds_cluster_storage_encrypted",
+ "rds_instance_storage_encrypted",
+ "rds_instance_transport_encrypted",
+ "rds_snapshots_encrypted",
+ "redshift_cluster_encrypted_at_rest",
+ "redshift_cluster_in_transit_encryption_enabled",
+ "s3_bucket_default_encryption",
+ "s3_bucket_kms_encryption",
+ "sagemaker_notebook_instance_encryption_enabled",
+ "sagemaker_training_jobs_intercontainer_encryption_enabled",
+ "sagemaker_training_jobs_volume_and_output_encryption_enabled",
+ "sns_topics_kms_encryption_at_rest_enabled",
+ "sqs_queues_server_side_encryption_enabled",
+ "storagegateway_fileshare_encryption_enabled",
+ "transfer_server_in_transit_encryption_enabled",
+ "workspaces_volume_encryption_enabled"
+ ]
+ },
+ {
+ "Id": "PSS-12.02AS",
+ "Description": "The basic criterion also applies to all cloud service derived data.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-12 Security Assessment",
+ "Type": "Additional (Sharpening)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-12.03B",
+ "Description": "The contractual agreements specify the regions in which processing and storage of cloud service customer data, cloud service derived data and account data occurs and the circumstances under which changes may be applied.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-12 Security Assessment",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion supplements the Boundary Condition BC-01. It does not require the cloud service provider to offer multiple partitions. If the cloud service provider offers only one partition for the cloud service(s) in scope, this does not comprise a deviation from the criterion. If the additional complemental criterion is only applicable for selected partitions in scope of an assurance engagement in accordance with this catalogue, this should be presented in the cloud service provider's description of its system of internal control for the cloud service. This criterion is a prerequisite for technical service sovereignty.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-12.03AS",
+ "Description": "The basic criterion also applies to all cloud service derived data.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-12 Security Assessment",
+ "Type": "Additional (Sharpening)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-12.04B",
+ "Description": "Customers are notified beforehand in case of any changes to the regions of data processing or storage. If the cloud service provider has not been granted prior general authorisation by the cloud service customer to do so, such authorisations are obtained in accordance with the requirements specified in the contractual agreements or let the cloud service customer exercise termination rights.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-12 Security Assessment",
+ "Type": "Basic",
+ "AboutCriteria": "This criterion supplements the Boundary Condition BC-01. It does not require the cloud service provider to offer multiple partitions. If the cloud service provider offers only one partition for the cloud service(s) in scope, this does not comprise a deviation from the criterion. If the additional complemental criterion is only applicable for selected partitions in scope of an assurance engagement in accordance with this catalogue, this should be presented in the cloud service provider's description of its system of internal control for the cloud service. This criterion is a prerequisite for technical service sovereignty.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-12.04AS",
+ "Description": "The basic criterion also applies to all cloud service derived data.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-12 Security Assessment",
+ "Type": "Additional (Sharpening)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-12.01AC",
+ "Description": "The cloud service provider offers partitions selectable by the cloud service customer where partition-specific identity management is enforced for both cloud service customers and all cloud service provider personnel. Identity verification and identity storage are confined to the geographical boundaries of the selected partition.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-12 Security Assessment",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "This criterion supplements the Boundary Condition BC-01. It does not require the cloud service provider to offer multiple partitions. If the cloud service provider offers only one partition for the cloud service(s) in scope, this does not comprise a deviation from the criterion. If the additional complemental criterion is only applicable for selected partitions in scope of an assurance engagement in accordance with this catalogue, this should be presented in the cloud service provider's description of its system of internal control for the cloud service. This criterion is a prerequisite for technical service sovereignty.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "PSS-12.02AC",
+ "Description": "Within these partitions, the following operations by the cloud service provider are restricted to occur only within the geographical boundaries of the customer-selected partitions: - Privileged access to the production environment by the cloud service provider, including potential access to cloud service customer data and cloud service derived data;- System logging and event monitoring by the cloud service provider, except for processing event logs specifically for threat intelligence and handling IP addresses for routing purposes;- Cryptographic key management and storage practices to ensure keys are handled and stored within limits of the partition. These restrictions considering partitions also apply to any service organisations involved in the operation of the cloud service.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-12 Security Assessment",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "This criterion supplements the Boundary Condition BC-01. It does not require the cloud service provider to offer multiple partitions. If the cloud service provider offers only one partition for the cloud service(s) in scope, this does not comprise a deviation from the criterion. If the additional complemental criterion is only applicable for selected partitions in scope of an assurance engagement in accordance with this catalogue, this should be presented in the cloud service provider's description of its system of internal control for the cloud service. This criterion is a prerequisite for technical service sovereignty.",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "kms_cmk_not_multi_region",
+ "cloudfront_distributions_geo_restrictions_enabled",
+ "cloudtrail_multi_region_enabled_logging_management_events",
+ "kms_cmk_not_multi_region",
+ "organizations_scp_check_deny_regions",
+ "s3_multi_region_access_point_public_access_block"
+ ]
+ },
+ {
+ "Id": "PSS-12.03AC",
+ "Description": "Monitoring of threat intelligence data, which excludes any cloud service customer data and Account data, and logging of required routing information such as IP addresses are not required to be geographically limited to a single partition.",
+ "Attributes": [
+ {
+ "Section": "Product Safety and Security (PSS)",
+ "SubSection": "PSS-12 Security Assessment",
+ "Type": "Additional (Complementing)",
+ "AboutCriteria": "",
+ "ComplementaryCriteria": ""
+ }
+ ],
+ "Checks": [
+ "cloudtrail_bucket_requires_mfa_delete",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_insights_exist",
+ "cloudtrail_kms_encryption_enabled",
+ "cloudtrail_log_file_validation_enabled",
+ "cloudtrail_logs_s3_bucket_access_logging_enabled",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "cloudtrail_multi_region_enabled",
+ "cloudtrail_multi_region_enabled_logging_management_events",
+ "cloudtrail_s3_dataevents_read_enabled",
+ "cloudtrail_s3_dataevents_write_enabled"
+ ]
+ }
+ ]
+}
diff --git a/prowler/compliance/aws/ccc_aws.json b/prowler/compliance/aws/ccc_aws.json
new file mode 100644
index 0000000000..ba00424a72
--- /dev/null
+++ b/prowler/compliance/aws/ccc_aws.json
@@ -0,0 +1,8172 @@
+{
+ "Framework": "CCC",
+ "Version": "",
+ "Provider": "AWS",
+ "Name": "Common Cloud Controls Catalog (CCC)",
+ "Description": "Common Cloud Controls Catalog (CCC) for AWS",
+ "Requirements": [
+ {
+ "Id": "CCC.AuditLog.C01.TR01",
+ "Description": "When the signature validation process is performed, then it MUST detect any modification of data.",
+ "Attributes": [
+ {
+ "FamilyName": "Integrity",
+ "FamilyDescription": "Controls designed to protected the integrity of Audit Log data.",
+ "Section": "CCC.AuditLog.C01 Implement Digital Signatures With Hash Chaining",
+ "SubSection": "",
+ "SubSectionObjective": "Digital signatures allows for external verification of log data tampering and\nhash chaining allows for deleted log files to be detected.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "Ensure hash of data is included in digital signature.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06",
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-01"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudtrail_log_file_validation_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C01.TR02",
+ "Description": "When the signature validation process is performed, then it MUST detect any missing (deleted) log file.",
+ "Attributes": [
+ {
+ "FamilyName": "Integrity",
+ "FamilyDescription": "Controls designed to protected the integrity of Audit Log data.",
+ "Section": "CCC.AuditLog.C01 Implement Digital Signatures With Hash Chaining",
+ "SubSection": "",
+ "SubSectionObjective": "Digital signatures allows for external verification of log data tampering and\nhash chaining allows for deleted log files to be detected.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "Ensure verification process includes a chained hash function.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06",
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-01"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudtrail_log_file_validation_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C02.TR01",
+ "Description": "When a manual action is performed to generate each audit log type,\nthen the corresponding audit log type MUST be generated and recorded.",
+ "Attributes": [
+ {
+ "FamilyName": "Integrity",
+ "FamilyDescription": "Controls designed to protected the integrity of Audit Log data.",
+ "Section": "CCC.AuditLog.C02 Enable And Validate All Audit Log Types",
+ "SubSection": "",
+ "SubSectionObjective": "Review audit log configuration and ensure that all audit log types\nare being generated and replicated to configured sinks",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Review audit log configuration",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-2",
+ "AU-3",
+ "AU-12"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudtrail_multi_region_enabled",
+ "cloudtrail_multi_region_enabled_logging_management_events",
+ "cloudtrail_insights_exist",
+ "cloudtrail_log_file_validation_enabled",
+ "cloudtrail_kms_encryption_enabled",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "cloudtrail_logs_s3_bucket_access_logging_enabled",
+ "cloudtrail_s3_dataevents_read_enabled",
+ "cloudtrail_s3_dataevents_write_enabled",
+ "cloudtrail_threat_detection_enumeration",
+ "cloudtrail_threat_detection_llm_jacking",
+ "cloudtrail_threat_detection_privilege_escalation"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C03.TR01",
+ "Description": "When an attempt is made to disable a log source, then an alert MUST be generated.",
+ "Attributes": [
+ {
+ "FamilyName": "Integrity",
+ "FamilyDescription": "Controls designed to protected the integrity of Audit Log data.",
+ "Section": "CCC.AuditLog.C03 Alert On Audit Log Changes And Access",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that specific alerts have been configured to detect changes in\naudit log configuration such as disabling exporting of logs.\nAlerts MUST also be created to detect changes in retention/object lock policies\nfor exported data log sources/buckets.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Ensure alerting is correctly configured\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-5",
+ "AU-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled",
+ "cloudtrail_log_file_validation_enabled",
+ "cloudtrail_kms_encryption_enabled",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_multi_region_enabled",
+ "cloudtrail_insights_exist",
+ "s3_bucket_object_lock",
+ "cloudtrail_multi_region_enabled_logging_management_events"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C03.TR02",
+ "Description": "When an attempt is made to alter the retention or object lock status\nof an external data log source or bucket, then an alert MUST be generated.",
+ "Attributes": [
+ {
+ "FamilyName": "Integrity",
+ "FamilyDescription": "Controls designed to protected the integrity of Audit Log data.",
+ "Section": "CCC.AuditLog.C03 Alert On Audit Log Changes And Access",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that specific alerts have been configured to detect changes in\naudit log configuration such as disabling exporting of logs.\nAlerts MUST also be created to detect changes in retention/object lock policies\nfor exported data log sources/buckets.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Ensure alerting is correctly configured\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-5",
+ "AU-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled",
+ "cloudwatch_changes_to_network_acls_alarm_configured",
+ "cloudwatch_changes_to_network_gateways_alarm_configured",
+ "cloudwatch_changes_to_network_route_tables_alarm_configured",
+ "cloudwatch_changes_to_vpcs_alarm_configured",
+ "cloudwatch_log_metric_filter_policy_changes",
+ "cloudwatch_log_metric_filter_aws_organizations_changes",
+ "cloudwatch_log_metric_filter_for_s3_bucket_policy_changes",
+ "cloudwatch_log_metric_filter_security_group_changes",
+ "cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk",
+ "cloudwatch_log_metric_filter_unauthorized_api_calls"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C04.TR01",
+ "Description": "When audit log buckets are created then verify that server access\nlogging MUST be enabled for the audit log bucket,\nwith logs delivered to a separate, secure logging bucket.",
+ "Attributes": [
+ {
+ "FamilyName": "Integrity",
+ "FamilyDescription": "Controls designed to protected the integrity of Audit Log data.",
+ "Section": "CCC.AuditLog.C04 Ensure Access Logging Is Enabled on the Audit Log Bucket",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that access logging is enabled for the audit log storage bucket to\ncapture all requests made to the bucket, providing an audit trail of data access.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Configure the audit log bucket to enable server access logging.\nEnsure the target logging bucket is configured for appropriate security,\nincluding restricted access and immutability.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01",
+ "CCC.TH09"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-2",
+ "AU-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudtrail_logs_s3_bucket_access_logging_enabled",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "cloudtrail_bucket_requires_mfa_delete",
+ "cloudtrail_kms_encryption_enabled",
+ "s3_bucket_server_access_logging_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C05.TR01",
+ "Description": "When audit logs are exported, then audit logs MUST be present in the configured data location.",
+ "Attributes": [
+ {
+ "FamilyName": "Availability",
+ "FamilyDescription": "Controls designed to protected the availability of Audit Log data.",
+ "Section": "CCC.AuditLog.C05 Export Audit Logs To Bucket",
+ "SubSection": "",
+ "SubSectionObjective": "Configure audit logs to be sent to a external bucket where they can be globally replicated\nand can be subject to greater access control and data retention polices.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Configure audit log exporting.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9",
+ "AU-11",
+ "AU-4"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudtrail_kms_encryption_enabled",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "cloudtrail_logs_s3_bucket_access_logging_enabled",
+ "cloudtrail_bucket_requires_mfa_delete",
+ "cloudtrail_s3_dataevents_read_enabled",
+ "cloudtrail_s3_dataevents_write_enabled",
+ "cloudtrail_multi_region_enabled",
+ "cloudtrail_multi_region_enabled_logging_management_events",
+ "s3_bucket_cross_region_replication",
+ "s3_bucket_cross_account_access"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C06.TR01",
+ "Description": "When the retention policy is applied, then data MUST\nbe automatically deleted after the configured number of days.",
+ "Attributes": [
+ {
+ "FamilyName": "Availability",
+ "FamilyDescription": "Controls designed to protected the availability of Audit Log data.",
+ "Section": "CCC.AuditLog.C06 Enforce Retention Policy on Audit Log Bucket",
+ "SubSection": "",
+ "SubSectionObjective": "Configure a custom retention policy on the designated audit log bucket to ensure that logs are\nretained for the correct number of days as defined by your organization's policy.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green"
+ ],
+ "Recommendation": "Configure the audit log bucket's lifecycle rules or object retention settings to enforce\nthe required data retention period.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06",
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9",
+ "AU-11"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "s3_bucket_lifecycle_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C07.TR01",
+ "Description": "When a standard file deletion is attempted on an object within\nthe audit log bucket, then it MUST be prevented unless MFA is provided.",
+ "Attributes": [
+ {
+ "FamilyName": "Availability",
+ "FamilyDescription": "Controls designed to protected the availability of Audit Log data.",
+ "Section": "CCC.AuditLog.C07 Enforce MFA Delete on Audit Log Bucket",
+ "SubSection": "",
+ "SubSectionObjective": "Enable Multi-Factor Authentication (MFA) delete on the audit log bucket to\nprovide greater protection against accidental or malicious deletion of audit data.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green"
+ ],
+ "Recommendation": "Enable MFA Delete (or equivalent multi-factor authentication for delete operations)\non the audit log bucket.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06",
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9",
+ "AU-11"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudtrail_bucket_requires_mfa_delete"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C08.TR01",
+ "Description": "When an attempt is made to delete data before the object\nlock period expires, then the deletion MUST be denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Availability",
+ "FamilyDescription": "Controls designed to protected the availability of Audit Log data.",
+ "Section": "CCC.AuditLog.C08 Enable Object Lock On Audit Log Bucket",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that object log is enabled globally on all objects with the bucket.\nThe lock time MUST be configured to meet your organization, legal and compliance goals.\nDeletion attempts before the lock period MUST be denied.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Configure object lock policy.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9",
+ "AU-11"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "s3_bucket_object_lock"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C09.TR01",
+ "Description": "When restricted fields are accessed by unauthorized users, then those fields MUST remain masked.",
+ "Attributes": [
+ {
+ "FamilyName": "Confidentiality",
+ "FamilyDescription": "Controls designed to protected the confidentiality of Audit Log data.",
+ "Section": "CCC.AuditLog.C09 Restrict Field And Log Type Access",
+ "SubSection": "",
+ "SubSectionObjective": "Configure access to audit logs to follow the principle of least privilege in particular where technically\npossible limit the log fields users have access to to prevent accidental exposure to sensitive\ninformation such as PII.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Review field level access controls on audit data.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6",
+ "AU-9",
+ "AC-3",
+ "PT-2",
+ "PT-3",
+ "PT-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudtrail_kms_encryption_enabled",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "cloudtrail_bucket_requires_mfa_delete",
+ "cloudwatch_log_group_not_publicly_accessible",
+ "s3_bucket_public_access"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C10.TR01",
+ "Description": "When audit log storage bucket's are created then, bucket's access control settings MUST explicitly deny\npublic read and write access.",
+ "Attributes": [
+ {
+ "FamilyName": "Confidentiality",
+ "FamilyDescription": "Controls designed to protected the confidentiality of Audit Log data.",
+ "Section": "CCC.AuditLog.C10 Ensure Audit Bucket is Not Publicly Accessible",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that audit log storage buckets are not publicly accessible to prevent\nunauthorized exposure of sensitive log data.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green"
+ ],
+ "Recommendation": "Configure bucket policies and access control lists (ACLs) to restrict public access.\nRegularly review bucket permissions to ensure no public access has been inadvertently granted.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AA-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "cloudtrail_kms_encryption_enabled",
+ "s3_bucket_public_list_acl",
+ "s3_bucket_public_write_acl"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C10.TR02",
+ "Description": "When the URL of a audit log storage bucket's object is accessed publicly then,\nit should be denied by bucket policy.",
+ "Attributes": [
+ {
+ "FamilyName": "Confidentiality",
+ "FamilyDescription": "Controls designed to protected the confidentiality of Audit Log data.",
+ "Section": "CCC.AuditLog.C10 Ensure Audit Bucket is Not Publicly Accessible",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that audit log storage buckets are not publicly accessible to prevent\nunauthorized exposure of sensitive log data.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green"
+ ],
+ "Recommendation": "Configure bucket policies and access control lists (ACLs) to restrict public access.\nRegularly review bucket permissions to ensure no public access has been inadvertently granted.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AA-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "s3_bucket_public_write_acl",
+ "s3_bucket_public_list_acl",
+ "s3_bucket_public_access",
+ "s3_bucket_policy_public_write_access"
+ ]
+ },
+ {
+ "Id": "CCC.Build.C01.TR01",
+ "Description": "Attempt to initiate a build using an unauthorized build agent and verify that the build is rejected.",
+ "Attributes": [
+ {
+ "FamilyName": "Access Control",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.Build.C01 Restrict Allowed Build Agents",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that builds are executed only on authorized build agents to maintain\ncontrol over the build environment and prevent unauthorized code execution.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "codebuild_project_user_controlled_buildspec",
+ "codebuild_project_source_repo_url_no_sensitive_credentials",
+ "codebuild_project_uses_allowed_github_organizations",
+ "codebuild_project_not_publicly_accessible",
+ "codebuild_project_logging_enabled",
+ "codebuild_project_s3_logs_encrypted",
+ "codebuild_project_no_secrets_in_variables",
+ "codebuild_project_older_90_days"
+ ]
+ },
+ {
+ "Id": "CCC.Build.C02.TR01",
+ "Description": "Attempt to trigger a build from an unauthorized external service or\nrepository and verify that the build does not start.",
+ "Attributes": [
+ {
+ "FamilyName": "Access Control",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.Build.C02 Restrict Allowed External Services for Build Triggers",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that builds can only be triggered by authorized external services or\nrepositories to prevent unauthorized code execution or tampering.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "codebuild_project_uses_allowed_github_organizations",
+ "codebuild_project_user_controlled_buildspec",
+ "codebuild_project_source_repo_url_no_sensitive_credentials",
+ "codebuild_project_not_publicly_accessible"
+ ]
+ },
+ {
+ "Id": "CCC.Build.C03.TR01",
+ "Description": "Attempt to access the build environment from an external network and verify that access is denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.Build.C03 Deny External Network Access for Build Environments",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that build environments do not have external network access to\nprevent unauthorized external access and data exfiltration.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH02",
+ "CCC.TH05"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-5"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-7",
+ "SC-5"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "codebuild_project_not_publicly_accessible"
+ ]
+ },
+ {
+ "Id": "CCC.CntrReg.C01.TR01",
+ "Description": "Attempt to push an artifact with known vulnerabilities to the registry\nand observe if it is flagged or rejected by the vulnerability scanning process.",
+ "Attributes": [
+ {
+ "FamilyName": "Risk Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.CntrReg.C01 Implement Vulnerability Scanning for Artifacts",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that container images and artifacts stored in the container registry are scanned for\nvulnerabilities to identify and remediate security issues before deployment.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.CntrReg.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "ID.RA-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "RA-5",
+ "SI-5"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "ecr_registry_scan_images_on_push_enabled",
+ "ecr_repositories_scan_vulnerabilities_in_latest_image"
+ ]
+ },
+ {
+ "Id": "CCC.CntrReg.C02.TR01",
+ "Description": "Confirm that artifacts older than the specified retention period are automatically\ndeleted from the registry.",
+ "Attributes": [
+ {
+ "FamilyName": "Data Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.CntrReg.C02 Implement Cleanup Policies for Artifacts",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that unused or outdated artifacts are cleaned up according to defined policies to\nmanage storage effectively and reduce security risks associated with outdated versions.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH14"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.IP-6"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SI-12"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "ecr_repositories_lifecycle_policy_enabled",
+ "s3_bucket_lifecycle_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.DataWar.C01.TR01",
+ "Description": "Attempt to access underlying database tables directly without\nusing managed views and verify that access is denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.DataWar.C01 Enforce Use of Managed Views for Data Access",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that data access is provided through managed views, restricting users\nfrom accessing underlying tables directly and enforcing consistent security policies.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.DataWar.C02.TR01",
+ "Description": "Attempt to query sensitive columns without the necessary permissions and\nverify that access is denied or data is masked.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.DataWar.C02 Enforce Column-Level Security Policies",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that access to sensitive data columns is restricted based on user roles,\npreventing unauthorized access to sensitive information.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.DataWar.C03.TR01",
+ "Description": "Attempt to query data rows that the user should not have access to and verify\nthat access is denied or data is not returned.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.DataWar.C03 Enforce Row-Level Security Policies",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that access to data rows is restricted based on user roles or attributes,\npreventing unauthorized access to specific subsets of data.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.GenAI.C01.TR01",
+ "Description": "Untrusted input such as user queries, RAG data or tool output\nMUST be validated before it is passed to a GenAI model.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C01 Model Input Filtering and Sanitisation",
+ "SubSection": "",
+ "SubSectionObjective": "Inspect and validate input before it is passed to a GenAI\nmodel in order to filter or sanitise adversarial queries\nand prevent sensitive data leakage.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH01",
+ "CCC.GenAI.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-003",
+ "AIR-PREV-017",
+ "AIR-PREV-002",
+ "AIR-DET-001"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Input Validation and Sanitization"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0020",
+ "AML.M0021",
+ "AML.M0015"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "bedrock_guardrail_prompt_attack_filter_enabled",
+ "bedrock_guardrail_sensitive_information_filter_enabled",
+ "bedrock_model_invocation_logging_enabled",
+ "bedrock_model_invocation_logs_encryption_enabled",
+ "bedrock_agent_guardrail_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.GenAI.C01.TR02",
+ "Description": "If malicious patterns such as prompt injection or sensitive\ndata are detected during input validation, the input MUST\nbe blocked or sanitised.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C01 Model Input Filtering and Sanitisation",
+ "SubSection": "",
+ "SubSectionObjective": "Inspect and validate input before it is passed to a GenAI\nmodel in order to filter or sanitise adversarial queries\nand prevent sensitive data leakage.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH01",
+ "CCC.GenAI.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-003",
+ "AIR-PREV-017",
+ "AIR-PREV-002",
+ "AIR-DET-001"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Input Validation and Sanitization"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0020",
+ "AML.M0021",
+ "AML.M0015"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "bedrock_guardrail_prompt_attack_filter_enabled",
+ "bedrock_guardrail_sensitive_information_filter_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.GenAI.C02.TR01",
+ "Description": "GenAI model output MUST be validated for format conformance,\nmalicious patterns, sensitive data and inapropriate content\nbefore being passed to users, application or plugins.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C02 Model Output Filtering and Sanitisation",
+ "SubSection": "",
+ "SubSectionObjective": "Inspect and validate GenAI model output before passing it to\nusers, applications or plugins in order to filter or sanitise\ninsecure or unreliable output and prevent sensitive data leakage.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH01",
+ "CCC.GenAI.TH03",
+ "CCC.GenAI.TH04",
+ "CCC.GenAI.TH05",
+ "CCC.GenAI.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-003",
+ "AIR-PREV-017",
+ "AIR-PREV-002",
+ "AIR-DET-001"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Output Validation and Sanitization"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0020",
+ "AML.M0002"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "bedrock_guardrail_sensitive_information_filter_enabled",
+ "bedrock_guardrail_prompt_attack_filter_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.GenAI.C02.TR02",
+ "Description": "In the event of policy violations, the AI-generated content MUST\nbe redacted, encoded or rejected.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C02 Model Output Filtering and Sanitisation",
+ "SubSection": "",
+ "SubSectionObjective": "Inspect and validate GenAI model output before passing it to\nusers, applications or plugins in order to filter or sanitise\ninsecure or unreliable output and prevent sensitive data leakage.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH01",
+ "CCC.GenAI.TH03",
+ "CCC.GenAI.TH04",
+ "CCC.GenAI.TH05",
+ "CCC.GenAI.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-003",
+ "AIR-PREV-017",
+ "AIR-PREV-002",
+ "AIR-DET-001"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Output Validation and Sanitization"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0020",
+ "AML.M0002"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "bedrock_guardrail_prompt_attack_filter_enabled",
+ "bedrock_guardrail_sensitive_information_filter_enabled",
+ "bedrock_model_invocation_logging_enabled",
+ "bedrock_model_invocation_logs_encryption_enabled",
+ "bedrock_agent_guardrail_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.GenAI.C03.TR01",
+ "Description": "When data is designated for model training or RAG ingestion, then its\nsource MUST be explicitly approved and its provenance documented.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C03 Data Provenance and Source Vetting",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all data for training, fine-tuning or RAG comes\nfrom trusted, approved sources and is authorised for the\nintended purposes in order to prevent the initial introduction\nof malicious content or leaked sensitive data.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH02",
+ "CCC.GenAI.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-006"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Training Data Management"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0025"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.GenAI.C03.TR02",
+ "Description": "Data from unvetted sources MUST NOT be used in production systems.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C03 Data Provenance and Source Vetting",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all data for training, fine-tuning or RAG comes\nfrom trusted, approved sources and is authorised for the\nintended purposes in order to prevent the initial introduction\nof malicious content or leaked sensitive data.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH02",
+ "CCC.GenAI.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-006"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Training Data Management"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0025"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "vpc_endpoint_services_allowed_principals_trust_boundaries",
+ "vpc_endpoint_connections_trust_boundaries",
+ "s3_bucket_cross_account_access",
+ "s3_bucket_cross_region_replication",
+ "s3_bucket_public_access",
+ "s3_bucket_public_list_acl",
+ "s3_bucket_public_write_acl",
+ "s3_bucket_secure_transport_policy",
+ "s3_bucket_kms_encryption",
+ "s3_account_level_public_access_blocks",
+ "s3_bucket_level_public_access_block",
+ "s3_access_point_public_access_block"
+ ]
+ },
+ {
+ "Id": "CCC.GenAI.C04.TR01",
+ "Description": "When data is ingested for training, fine-tuning or conversion\nto vector embeddings, it MUST be validated for sensitive\ninformation or malicious content.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C04 Sanitisation of Ingested Data",
+ "SubSection": "",
+ "SubSectionObjective": "Validate and sanitise all data ingested by GenAI systems\nfrom extenal sources or internal knowledge bases, whether\nfor training, conversion to vector embeddings, or real-time\nretireval, in order to remove or redact poisoned or sensitive\ndata before further processing.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH02",
+ "CCC.GenAI.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-002"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Training Data Sanitization"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0007"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudformation_stack_outputs_find_secrets",
+ "ec2_instance_secrets_user_data",
+ "ec2_launch_template_no_secrets",
+ "ssm_document_secrets",
+ "cloudwatch_log_group_no_secrets_in_logs",
+ "awslambda_function_no_secrets_in_variables",
+ "awslambda_function_no_secrets_in_code"
+ ]
+ },
+ {
+ "Id": "CCC.GenAI.C04.TR02",
+ "Description": "If sensitive data or malicious content is detected, it must\nbe rejected, redacted or flagged for manual review.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C04 Sanitisation of Ingested Data",
+ "SubSection": "",
+ "SubSectionObjective": "Validate and sanitise all data ingested by GenAI systems\nfrom extenal sources or internal knowledge bases, whether\nfor training, conversion to vector embeddings, or real-time\nretireval, in order to remove or redact poisoned or sensitive\ndata before further processing.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH02",
+ "CCC.GenAI.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-002"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Training Data Sanitization"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0007"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "bedrock_guardrail_prompt_attack_filter_enabled",
+ "bedrock_guardrail_sensitive_information_filter_enabled",
+ "bedrock_agent_guardrail_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.GenAI.C05.TR01",
+ "Description": "When a RAG-enabled system generates a response containing information\nretrieved from its knowledge base, then the response MUST include a\nverifiable citation that links back to the specific source document.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C05 Citations and Source Traceability",
+ "SubSection": "",
+ "SubSectionObjective": "Require the GenAI system to provide citations or direct links\nback to the source documents used to generate a response, in\nto enhance the transparency, trustworthiness, and verifiability\nof AI-generated content.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH09",
+ "CCC.GenAI.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-DET-013"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudtrail_multi_region_enabled",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_kms_encryption_enabled",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "cloudtrail_s3_dataevents_read_enabled",
+ "cloudtrail_s3_dataevents_write_enabled",
+ "cloudtrail_log_file_validation_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.GenAI.C06.TR01",
+ "Description": "When an LLM invokes an external tool (e.g., an API, a plugin),\nthen the tool MUST operate with the least privileges required\nfor performing its intended functionality.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.GenAI.C06 Least Privilege for Plugins",
+ "SubSection": "",
+ "SubSectionObjective": "Restricts the permissions of any external tools the GenAI system\ncan call to limit the potential damage if an agent is coerced\nto perform unintended actions or vulnerabilities in the tools\nare exploited.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH07",
+ "CCC.GenAI.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Agent Permissions"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "apigateway_restapi_authorizers_enabled",
+ "apigatewayv2_api_authorizers_enabled",
+ "apigateway_restapi_public",
+ "apigateway_restapi_public_with_authorizer",
+ "awslambda_function_url_public",
+ "awslambda_function_not_publicly_accessible",
+ "iam_policy_allows_privilege_escalation",
+ "iam_inline_policy_allows_privilege_escalation",
+ "iam_policy_no_full_access_to_cloudtrail",
+ "iam_policy_no_full_access_to_kms",
+ "iam_inline_policy_no_full_access_to_cloudtrail",
+ "iam_inline_policy_no_full_access_to_kms",
+ "iam_group_administrator_access_policy",
+ "iam_user_administrator_access_policy",
+ "iam_role_administratoraccess_policy"
+ ]
+ },
+ {
+ "Id": "CCC.GenAI.C07.TR01",
+ "Description": "When an application makes an API call to a foundational model in a\nproduction environment, then it MUST specify an explicit version\nidentifier.",
+ "Attributes": [
+ {
+ "FamilyName": "Configuration Management",
+ "FamilyDescription": "The Configuration Management control family involves establishing,\nmaintaining and monitoring the configuration of the service and\nrelated applications and infrastructure to ensure consistency,\nsecure defaults and compliance.\n",
+ "Section": "CCC.GenAI.C07 Model Version Pinning",
+ "SubSection": "",
+ "SubSectionObjective": "Mandate that applications are locked (\"pinned\") to a specific,\ntested version of a foundational model to prevent unexpected\nbehaviour changes introduced by provider-side updates.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH10"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-010"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.GenAI.C08.TR01",
+ "Description": "When a new AI model is considered for production deployment, it\nMUST undergo a formal red teaming and quality assurance review.",
+ "Attributes": [
+ {
+ "FamilyName": "Model Assurance and Evaluation",
+ "FamilyDescription": "The Model Assurance and Evaluation control family encompasses\nthe proactiveand continuous processes of testing and validating\nthe AI model's behavior to ensure it aligns with safety, ethical,\nand quality standards.\n",
+ "Section": "CCC.GenAI.C08 Quality Control and Red Teaming",
+ "SubSection": "",
+ "SubSectionObjective": "Establish a formal program for quality evaluation and adversarial\ntesting (red teaming) to ensure GenAI system meet all business,\nquality, security and compliance requirements before getting deployed\ninto production environments.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH01",
+ "CCC.GenAI.TH02",
+ "CCC.GenAI.TH04",
+ "CCC.GenAI.TH08",
+ "CCC.GenAI.TH10"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-005"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Adversarial Training and Testing",
+ "Red Teaming",
+ "Product Governance"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0008"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "bedrock_guardrail_prompt_attack_filter_enabled",
+ "bedrock_guardrail_sensitive_information_filter_enabled",
+ "bedrock_agent_guardrail_enabled",
+ "bedrock_model_invocation_logging_enabled",
+ "bedrock_model_invocation_logs_encryption_enabled",
+ "bedrock_api_key_no_administrative_privileges",
+ "bedrock_api_key_no_long_term_credentials"
+ ]
+ },
+ {
+ "Id": "CCC.GenAI.C08.TR02",
+ "Description": "If model quality review or red teaming identifies an issue that exceeds\nthe organization's risk tolerance, the model MUST NOT be deployed until\nthe issue is remediated.",
+ "Attributes": [
+ {
+ "FamilyName": "Model Assurance and Evaluation",
+ "FamilyDescription": "The Model Assurance and Evaluation control family encompasses\nthe proactiveand continuous processes of testing and validating\nthe AI model's behavior to ensure it aligns with safety, ethical,\nand quality standards.\n",
+ "Section": "CCC.GenAI.C08 Quality Control and Red Teaming",
+ "SubSection": "",
+ "SubSectionObjective": "Establish a formal program for quality evaluation and adversarial\ntesting (red teaming) to ensure GenAI system meet all business,\nquality, security and compliance requirements before getting deployed\ninto production environments.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH01",
+ "CCC.GenAI.TH02",
+ "CCC.GenAI.TH04",
+ "CCC.GenAI.TH08",
+ "CCC.GenAI.TH10"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-005"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Adversarial Training and Testing",
+ "Red Teaming",
+ "Product Governance"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0008"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "bedrock_guardrail_prompt_attack_filter_enabled",
+ "bedrock_guardrail_sensitive_information_filter_enabled",
+ "bedrock_model_invocation_logging_enabled",
+ "bedrock_model_invocation_logs_encryption_enabled",
+ "bedrock_agent_guardrail_enabled",
+ "bedrock_api_key_no_administrative_privileges",
+ "bedrock_api_key_no_long_term_credentials"
+ ]
+ },
+ {
+ "Id": "CCC.KeyMgmt.C01.TR01",
+ "Description": "When a key version is scheduled for deletion or disabled, an\nalert MUST be generated within five minutes.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging and Metrics Publication",
+ "FamilyDescription": "Controls that collect, alert, and retain key-management events.",
+ "Section": "CCC.KeyMgmt.C01 Alert on Key-version Changes",
+ "SubSection": "",
+ "SubSectionObjective": "Generate near-real-time alerts when a KMS key version is disabled or scheduled for deletion, enabling rapid investigation and recovery.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Use native event services (e.g., CloudWatch Events, Azure Monitor, Cloud Audit Logs) to route notifications to an incident-response channel.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.KeyMgmt.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "RS.AN-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "IR-5"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "kms_cmk_not_deleted_unintentionally"
+ ]
+ },
+ {
+ "Id": "CCC.KeyMgmt.C02.TR01",
+ "Description": "When IAM roles and key policies are reviewed, Decrypt permission\nMUST be granted exclusively to documented authorised principals.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls that enforce least-privilege use of KMS operations.",
+ "Section": "CCC.KeyMgmt.C02 Limit Decrypt Permissions",
+ "SubSection": "",
+ "SubSectionObjective": "Restrict the Decrypt operation to authorised principals only, applying the principle of least privilege to protect sensitive data.",
+ "Applicability": [
+ "tlp-green"
+ ],
+ "Recommendation": "Periodically audit policy documents via automated tooling and report any deviations.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.KeyMgmt.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "kms_cmk_not_deleted_unintentionally",
+ "kms_cmk_not_multi_region",
+ "kms_cmk_rotation_enabled",
+ "kms_cmk_are_used",
+ "iam_inline_policy_no_full_access_to_kms"
+ ]
+ },
+ {
+ "Id": "CCC.KeyMgmt.C03.TR01",
+ "Description": "When rotation settings are examined, rotation MUST be enabled with\nan interval not exceeding 365 days.",
+ "Attributes": [
+ {
+ "FamilyName": "Key Lifecycle Management",
+ "FamilyDescription": "Controls that govern creation, rotation, import, and retirement of cryptographic keys.",
+ "Section": "CCC.KeyMgmt.C03 Enforce Automatic Rotation",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure symmetric keys rotate automatically within policy intervals to reduce exposure of key material.",
+ "Applicability": [
+ "tlp-green"
+ ],
+ "Recommendation": "Use cloud-provider rotation features and verify via configuration scanning.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.KeyMgmt.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "kms_cmk_rotation_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.KeyMgmt.C04.TR01",
+ "Description": "When a key import request is processed, the key MUST use an\napproved algorithm (RSA-2048+, EC-P256+) and originate from a\ncertified HSM.",
+ "Attributes": [
+ {
+ "FamilyName": "Key Lifecycle Management",
+ "FamilyDescription": "Controls that govern creation, rotation, import, and retirement of cryptographic keys.",
+ "Section": "CCC.KeyMgmt.C04 Validate Imported Keys",
+ "SubSection": "",
+ "SubSectionObjective": "Accept only externally generated keys that meet approved cryptographic strength and provenance requirements.",
+ "Applicability": [
+ "tlp-green"
+ ],
+ "Recommendation": "Implement an approval workflow that validates attestation data before import.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.KeyMgmt.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "kms_cmk_not_deleted_unintentionally",
+ "kms_cmk_rotation_enabled",
+ "kms_cmk_not_multi_region",
+ "kms_cmk_are_used"
+ ]
+ },
+ {
+ "Id": "CCC.LB.C01.TR01",
+ "Description": "When a single client sends more than 2000 requests within any\n5-minute sliding window, the load balancer MUST throttle all\nsubsequent requests from that client for at least 60 seconds.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "Controls that detect anomalous traffic and record load-balancer activity.\n",
+ "Section": "CCC.LB.C01 Enforce and Detect Rate Limiting",
+ "SubSection": "",
+ "SubSectionObjective": "Detect and throttle malicious or excessive requests to prevent downstream resource exhaustion and brute-force activity.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Implement per-IP token-bucket limits with and verify via\nsynthetic traffic tests.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.LB.TH01",
+ "CCC.LB.TH09"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-1",
+ "PR.AC-7",
+ "PR.PT-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-6",
+ "SC-5",
+ "AC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "elbv2_logging_enabled",
+ "elb_logging_enabled",
+ "vpc_flow_logs_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.LB.C01.TR02",
+ "Description": "When throttling is invoked, the load balancer MUST\nrecord the event in the access log within 5 minutes\nfor alerting and trend analysis.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "Controls that detect anomalous traffic and record load-balancer activity.\n",
+ "Section": "CCC.LB.C01 Enforce and Detect Rate Limiting",
+ "SubSection": "",
+ "SubSectionObjective": "Detect and throttle malicious or excessive requests to prevent downstream resource exhaustion and brute-force activity.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Enable access logging and configure metric filters\non HTTP 429 counts to trigger alerts.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.LB.TH01",
+ "CCC.LB.TH09"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-1",
+ "PR.AC-7",
+ "PR.PT-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-6",
+ "SC-5",
+ "AC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "elbv2_logging_enabled",
+ "elb_logging_enabled",
+ "vpc_flow_logs_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.LB.C06.TR01",
+ "Description": "When more than 10 percent of targets change from healthy to\nunhealthy within five minutes, an alert MUST be issued.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "Controls that detect anomalous traffic and record load-balancer activity.\n",
+ "Section": "CCC.LB.C06 Secure Health-Check Telemetry",
+ "SubSection": "",
+ "SubSectionObjective": "Monitor health-check endpoints for tampering and alert on\nabnormal status changes.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Instrument metrics for health check results and target\nremoval events. Configure monitoring alarms to alert\non abnormal spikes in unhealthy targets.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.LB.TH05"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.AE-2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SI-4"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "elbv2_logging_enabled",
+ "elb_logging_enabled",
+ "cloudwatch_alarm_actions_enabled",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "vpc_flow_logs_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.LB.C04.TR01",
+ "Description": "When routing weights change, the request MUST originate\nfrom an explicitly defined and trusted identity and MUST\nbe logged.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls that restrict who can change or query load-balancer resources.\n",
+ "Section": "CCC.LB.C04 Enforce Distribution Policies",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure traffic-splitting weights and algorithms are modified\nonly by trusted identities.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Define a list of trusted principals allowed to modify\nrouting configurations. Enforce via conditional access\npolicies, and log changes using audit logging.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.LB.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled",
+ "iam_policy_attached_only_to_group_or_roles",
+ "iam_group_administrator_access_policy",
+ "iam_role_administratoraccess_policy",
+ "iam_user_administrator_access_policy"
+ ]
+ },
+ {
+ "Id": "CCC.LB.C05.TR01",
+ "Description": "When stickiness is enabled, session cookies MUST expire\nwithin 30 minutes of inactivity.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls that restrict who can change or query load-balancer resources.\n",
+ "Section": "CCC.LB.C05 Validate Session Affinity",
+ "SubSection": "",
+ "SubSectionObjective": "Configure session persistence to minimise fixation and hijacking\nrisks.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Audit CCC.LB.F15 parameters via configuration scans.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.LB.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-7"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-23"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_user_administrator_access_policy",
+ "iam_group_administrator_access_policy",
+ "iam_role_administratoraccess_policy",
+ "iam_inline_policy_allows_privilege_escalation",
+ "iam_inline_policy_no_full_access_to_cloudtrail",
+ "iam_inline_policy_no_full_access_to_kms",
+ "iam_inline_policy_no_administrative_privileges",
+ "iam_policy_allows_privilege_escalation",
+ "iam_customer_attached_policy_no_administrative_privileges",
+ "iam_aws_attached_policy_no_administrative_privileges",
+ "iam_policy_no_full_access_to_cloudtrail",
+ "iam_policy_no_full_access_to_kms",
+ "iam_customer_unattached_policy_no_administrative_privileges",
+ "iam_policy_attached_only_to_group_or_roles"
+ ]
+ },
+ {
+ "Id": "CCC.LB.C09.TR01",
+ "Description": "When an API call originates outside the approved CIDR\nset, the request MUST be denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls that restrict who can change or query load-balancer resources.\n",
+ "Section": "CCC.LB.C09 Restrict Management API Access",
+ "SubSection": "",
+ "SubSectionObjective": "Limit load-balancer API calls to authorised identities and\ntrusted networks.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Combine VPC endpoints with IAM condition-key filters for protected APIs.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.LB.TH08"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-5"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "vpc_endpoint_services_allowed_principals_trust_boundaries",
+ "vpc_endpoint_connections_trust_boundaries",
+ "vpc_endpoint_for_ec2_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.LB.C02.TR01",
+ "Description": "When concurrent connections reach 80 percent of capacity, the\nautoscaling group MUST add at least one instance within five\nminutes.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "Controls that preserve availability and confidentiality of\ntraffic processed by the load balancer.\n",
+ "Section": "CCC.LB.C02 Auto-Scale Load Balancer Capacity",
+ "SubSection": "",
+ "SubSectionObjective": "Expand load-balancer capacity to maintain availability during traffic\nspikes.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Enable autoscaling policies.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.LB.TH09"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "ID.BE-5"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "CP-10"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "autoscaling_group_capacity_rebalance_enabled",
+ "autoscaling_group_elb_health_check_enabled",
+ "autoscaling_group_multiple_az",
+ "autoscaling_group_multiple_instance_types",
+ "autoscaling_group_using_ec2_launch_template"
+ ]
+ },
+ {
+ "Id": "CCC.LB.C07.TR01",
+ "Description": "When responses pass through the load balancer, the\n\"Server\" header MUST be replaced with \"lb\".",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "Controls that preserve availability and confidentiality of\ntraffic processed by the load balancer.\n",
+ "Section": "CCC.LB.C07 Scrub Sensitive Headers",
+ "SubSection": "",
+ "SubSectionObjective": "Remove headers that disclose internal details or software\nversions from HTTP responses.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Configure header-transformation rules.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.TH15"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-13"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.LB.C08.TR01",
+ "Description": "When a certificate is within 30 days of expiry, automated renewal\nMUST complete and deploy a new certificate within 24 hours.",
+ "Attributes": [
+ {
+ "FamilyName": "Encryption",
+ "FamilyDescription": "Controls that ensure trustworthy TLS certificates and ciphers.",
+ "Section": "CCC.LB.C08 Automate Certificate Renewal",
+ "SubSection": "",
+ "SubSectionObjective": "Maintain valid TLS certificates by automating renewal and\ndeployment before expiry.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Use certificate-manager auto-renewal workflows.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.LB.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-6"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-17"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "acm_certificates_expiration_check",
+ "acm_certificates_transparency_logs_enabled",
+ "acm_certificates_with_secure_key_algorithms"
+ ]
+ },
+ {
+ "Id": "CCC.Logging.C01.TR01",
+ "Description": "When a new cloud account is created, provider-level audit and network flow logging MUST be\nenabled by default and directed to the central sink.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "Controls related to the confidentiality, integrity and availability of log data.\n",
+ "Section": "CCC.Logging.C01 Centralized and Comprehensive Log Aggregation",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure all operational and security logs from across the cloud environment, including\napplications, operating systems, network traffic, and cloud service activity, are captured\nautomatically and streamed to a central, secure log management service.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Logging.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-2",
+ "AU-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudtrail_multi_region_enabled",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_kms_encryption_enabled",
+ "cloudtrail_log_file_validation_enabled",
+ "vpc_flow_logs_enabled",
+ "cloudtrail_logs_s3_bucket_access_logging_enabled",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "cloudtrail_s3_dataevents_read_enabled",
+ "cloudtrail_s3_dataevents_write_enabled",
+ "apigateway_restapi_logging_enabled",
+ "apigateway_restapi_authorizers_enabled",
+ "apigateway_restapi_public",
+ "apigatewayv2_api_access_logging_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Logging.C01.TR02",
+ "Description": "When a new cloud compute resource is deployed, it MUST be configured to forward all relevant\nlogs (e.g., OS, application, service logs) to the central log sink.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "Controls related to the confidentiality, integrity and availability of log data.\n",
+ "Section": "CCC.Logging.C01 Centralized and Comprehensive Log Aggregation",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure all operational and security logs from across the cloud environment, including\napplications, operating systems, network traffic, and cloud service activity, are captured\nautomatically and streamed to a central, secure log management service.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Logging.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-2",
+ "AU-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "vpc_flow_logs_enabled",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_multi_region_enabled",
+ "cloudtrail_kms_encryption_enabled",
+ "cloudtrail_s3_dataevents_read_enabled",
+ "cloudtrail_s3_dataevents_write_enabled",
+ "apigateway_restapi_logging_enabled",
+ "apigatewayv2_api_access_logging_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_for_s3_bucket_policy_changes",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible"
+ ]
+ },
+ {
+ "Id": "CCC.Logging.C02.TR01",
+ "Description": "When a new log bucket or stream is created, its retention policy MUST be configured\nin accordance with organisation's data retention policy.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "Controls related to the confidentiality, integrity and availability of log data.\n",
+ "Section": "CCC.Logging.C02 Enforce Data Retention Policy for Logs",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that the retention period configured for logs aligns with the organization's\ndata retention policy.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Logging.TH05"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "GV.PO-01"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-11"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudwatch_log_group_retention_policy_specific_days_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Logging.C02.TR02",
+ "Description": "When a query is performed to retrieve log events older than the number of days defined\nin the organisation's data retention policy, it MUST return an empty result.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "Controls related to the confidentiality, integrity and availability of log data.\n",
+ "Section": "CCC.Logging.C02 Enforce Data Retention Policy for Logs",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that the retention period configured for logs aligns with the organization's\ndata retention policy.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Logging.TH05"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "GV.PO-01"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-11"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudwatch_log_group_retention_policy_specific_days_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C08.TR01",
+ "Description": "When an attempt is made to modify or delete data before the object\nlock period expires, then the action MUST be denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "Controls related to the confidentiality, integrity and availability of log data.\n",
+ "Section": "CCC.Logging.C03 Enable Object Lock On Log Bucket",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure log immutability by enabling Write Once, Read Many (WORM) protection\nusing object lock on log storage buckets. This prevents logs from being modified\nor deleted during the defined retention period, supporting compliance and forensic\nintegrity.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Configure object lock policy.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9",
+ "AU-11"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "s3_bucket_object_lock"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C04.TR01",
+ "Description": "When restricted fields are accessed by unauthorized users, then those fields MUST remain masked.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls that restrict who can access and modify logs.\n",
+ "Section": "CCC.Logging.C04 Restrict Field And Log Type Access",
+ "SubSection": "",
+ "SubSectionObjective": "Configure access to logs to follow the principle of least privilege in particular where technically\npossible limit the log fields users have access to to prevent accidental exposure to sensitive\ninformation such as PII.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Review field level access controls on log data.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Logging.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6",
+ "AU-9",
+ "AC-3",
+ "PT-2",
+ "PT-3",
+ "PT-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudwatch_log_group_not_publicly_accessible",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible"
+ ]
+ },
+ {
+ "Id": "CCC.Logging.C05.TR01",
+ "Description": "When a log storage bucket is created, the bucket's access control settings MUST\nexplicitly deny public read and write access.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls that restrict who can access and modify logs.\n",
+ "Section": "CCC.Logging.C05 Ensure Log Bucket is Not Publicly Accessible",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that log storage buckets are not publicly accessible to prevent unauthorized\naccess to sensitive log data. In addition, logs should be replicated to another cloud\nregion to enhance availability, durability, and support disaster recovery requirements.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green"
+ ],
+ "Recommendation": "Configure bucket policies and access control lists (ACLs) to restrict public access.\nRegularly review bucket permissions to ensure no public access has been inadvertently granted.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AA-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "cloudtrail_multi_region_enabled",
+ "cloudtrail_logs_s3_bucket_access_logging_enabled",
+ "cloudtrail_kms_encryption_enabled",
+ "s3_bucket_public_list_acl",
+ "s3_bucket_public_write_acl",
+ "s3_bucket_public_access",
+ "s3_account_level_public_access_blocks",
+ "s3_bucket_level_public_access_block"
+ ]
+ },
+ {
+ "Id": "CCC.Logging.C05.TR02",
+ "Description": "When the URL of a log storage bucket's object is accessed publicly, the action MUST be denied\nby bucket policy.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls that restrict who can access and modify logs.\n",
+ "Section": "CCC.Logging.C05 Ensure Log Bucket is Not Publicly Accessible",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that log storage buckets are not publicly accessible to prevent unauthorized\naccess to sensitive log data. In addition, logs should be replicated to another cloud\nregion to enhance availability, durability, and support disaster recovery requirements.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green"
+ ],
+ "Recommendation": "Configure bucket policies and access control lists (ACLs) to restrict public access.\nRegularly review bucket permissions to ensure no public access has been inadvertently granted.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AA-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "s3_bucket_public_access",
+ "s3_bucket_public_list_acl",
+ "s3_bucket_public_write_acl",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "s3_bucket_cross_region_replication",
+ "s3_account_level_public_access_blocks"
+ ]
+ },
+ {
+ "Id": "CCC.Logging.C06.TR01",
+ "Description": "When a single principal executes an anomalously high number of log queries,\nan alert MUST be generated.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging and Monitoring",
+ "FamilyDescription": "Controls that collect, alert, and retain logging-related events.\n",
+ "Section": "CCC.Logging.C06 Detect and Alert on Potential Log Exfiltration",
+ "SubSection": "",
+ "SubSectionObjective": "Identify and alert on anomalous data access patterns that may indicate an attempt\nto exfiltrate log data.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Logging.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-03",
+ "DE.CM-09"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SI-4",
+ "CA-7",
+ "AU-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudtrail_threat_detection_enumeration",
+ "cloudtrail_threat_detection_privilege_escalation"
+ ]
+ },
+ {
+ "Id": "CCC.Logging.C07.TR01",
+ "Description": "When an audit log event is recorded that corresponds to a modification of the logging service\nconfiguration such as disabling a log trail, deleting a log sink, or altering a log forwarding rule,\nan alert MUST be generated.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging and Monitoring",
+ "FamilyDescription": "Controls that collect, alert, and retain logging-related events.\n",
+ "Section": "CCC.Logging.C07 Detect and Alert on Log Service Tampering",
+ "SubSection": "",
+ "SubSectionObjective": "Alert when any component of the critical logging infrastructure is disabled, modified,\nor deleted, indicating a defense evasion attempt.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH16"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-03",
+ "DE.CM-09"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SI-4",
+ "CA-7",
+ "AU-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_insights_exist",
+ "cloudtrail_log_file_validation_enabled",
+ "cloudtrail_kms_encryption_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled",
+ "cloudtrail_multi_region_enabled_logging_management_events",
+ "cloudwatch_changes_to_network_acls_alarm_configured",
+ "cloudwatch_changes_to_network_gateways_alarm_configured",
+ "cloudwatch_changes_to_network_route_tables_alarm_configured",
+ "cloudwatch_changes_to_vpcs_alarm_configured"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C01.TR01",
+ "Description": "When a request is made to read a protected bucket, the service MUST prevent any request using KMS keys not listed as trusted by the organization.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C01 Prevent Unencrypted Requests",
+ "SubSection": "CCC.ObjStor.C01 Prevent Requests to Buckets or Objects with Untrusted KMS Keys",
+ "SubSectionObjective": "Prevent any requests to object storage buckets or objects using untrusted KMS keys to protect against unauthorized data encryption that can impact data availability and integrity.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01",
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DCS-04",
+ "DCS-06"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "s3_bucket_kms_encryption",
+ "kms_key_not_publicly_accessible",
+ "iam_policy_no_full_access_to_kms",
+ "storagegateway_fileshare_encryption_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C01.TR02",
+ "Description": "When a request is made to read a protected object, the service MUST prevent any request using KMS keys not listed as trusted by the organization.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C01 Prevent Unencrypted Requests",
+ "SubSection": "CCC.ObjStor.C01 Prevent Requests to Buckets or Objects with Untrusted KMS Keys",
+ "SubSectionObjective": "Prevent any requests to object storage buckets or objects using untrusted KMS keys to protect against unauthorized data encryption that can impact data availability and integrity.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01",
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DCS-04",
+ "DCS-06"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "kms_key_not_publicly_accessible",
+ "kms_cmk_not_deleted_unintentionally",
+ "iam_policy_no_full_access_to_kms",
+ "iam_inline_policy_no_full_access_to_kms"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C01.TR03",
+ "Description": "When a request is made to write to a bucket, the service MUST prevent any request using KMS keys not listed as trusted by the organization.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C01 Prevent Unencrypted Requests",
+ "SubSection": "CCC.ObjStor.C01 Prevent Requests to Buckets or Objects with Untrusted KMS Keys",
+ "SubSectionObjective": "Prevent any requests to object storage buckets or objects using untrusted KMS keys to protect against unauthorized data encryption that can impact data availability and integrity.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01",
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DCS-04",
+ "DCS-06"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "s3_bucket_kms_encryption",
+ "iam_policy_no_full_access_to_kms",
+ "kms_key_not_publicly_accessible",
+ "kms_cmk_not_deleted_unintentionally",
+ "storagegateway_fileshare_encryption_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C01.TR04",
+ "Description": "When a request is made to write to an object, the service MUST prevent any request using KMS keys not listed as trusted by the organization.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C01 Prevent Unencrypted Requests",
+ "SubSection": "CCC.ObjStor.C01 Prevent Requests to Buckets or Objects with Untrusted KMS Keys",
+ "SubSectionObjective": "Prevent any requests to object storage buckets or objects using untrusted KMS keys to protect against unauthorized data encryption that can impact data availability and integrity.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01",
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DCS-04",
+ "DCS-06"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_policy_no_full_access_to_kms",
+ "iam_inline_policy_no_full_access_to_kms",
+ "kms_cmk_not_deleted_unintentionally",
+ "kms_key_not_publicly_accessible",
+ "kms_cmk_not_multi_region"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C03.TR01",
+ "Description": "When an object storage bucket deletion is attempted, the bucket MUST be fully recoverable for a set time-frame after deletion is requested.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C03 Implement Multi-factor Authentication (MFA) for Access",
+ "SubSection": "CCC.ObjStor.C03 Prevent Bucket Deletion Through Irrevocable Bucket Retention Policy",
+ "SubSectionObjective": "Ensure that object storage bucket is not deleted after creation, and that the preventative measure cannot be unset.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-16"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.1.4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28",
+ "CP-10"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "s3_bucket_object_versioning",
+ "s3_bucket_object_lock",
+ "s3_bucket_lifecycle_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C03.TR02",
+ "Description": "When an attempt is made to modify the retention policy for an object storage bucket, the service MUST prevent the policy from being modified.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C03 Implement Multi-factor Authentication (MFA) for Access",
+ "SubSection": "CCC.ObjStor.C03 Prevent Bucket Deletion Through Irrevocable Bucket Retention Policy",
+ "SubSectionObjective": "Ensure that object storage bucket is not deleted after creation, and that the preventative measure cannot be unset.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-16"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.1.4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28",
+ "CP-10"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "s3_bucket_object_versioning",
+ "s3_bucket_lifecycle_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C04.TR01",
+ "Description": "When an object is uploaded to the object storage system, the object MUST automatically receive a default retention policy that prevents premature deletion or modification.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C04 Log All Access and Changes",
+ "SubSection": "CCC.ObjStor.C04 Objects have an Effective Retention Policy by Default",
+ "SubSectionObjective": "Ensure that all objects stored in the object storage system have a retention policy applied by default, preventing premature deletion or modification of objects and ensuring compliance with data retention regulations.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-16"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.1.4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28",
+ "CP-10"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "kinesis_stream_data_retention_period",
+ "s3_bucket_object_versioning",
+ "s3_bucket_object_lock"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C04.TR02",
+ "Description": "When an attempt is made to delete or modify an object that is subject to an active retention policy, the service MUST prevent the action from being completed.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C04 Log All Access and Changes",
+ "SubSection": "CCC.ObjStor.C04 Objects have an Effective Retention Policy by Default",
+ "SubSectionObjective": "Ensure that all objects stored in the object storage system have a retention policy applied by default, preventing premature deletion or modification of objects and ensuring compliance with data retention regulations.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-16"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.1.4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28",
+ "CP-10"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "kinesis_stream_data_retention_period",
+ "dynamodb_table_deletion_protection_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C05.TR01",
+ "Description": "When an object is uploaded to the object storage bucket, the object MUST be stored with a unique identifier.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C05 Prevent Access from Untrusted Entities",
+ "SubSection": "CCC.ObjStor.C05 Versioning is Enabled for All Objects in the Bucket",
+ "SubSectionObjective": "Ensure that versioning is enabled for all objects stored in the object storage bucket to enable recovery of previous versions of objects in case of loss or corruption.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.1.4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28",
+ "CP-10"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-16"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "s3_bucket_object_versioning",
+ "s3_bucket_object_lock"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C05.TR02",
+ "Description": "When an object is modified, the service MUST assign a new unique identifier to the modified object to differentiate it from the previous version.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C05 Prevent Access from Untrusted Entities",
+ "SubSection": "CCC.ObjStor.C05 Versioning is Enabled for All Objects in the Bucket",
+ "SubSectionObjective": "Ensure that versioning is enabled for all objects stored in the object storage bucket to enable recovery of previous versions of objects in case of loss or corruption.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.1.4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28",
+ "CP-10"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-16"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "s3_bucket_object_versioning",
+ "s3_bucket_object_lock",
+ "iam_rotate_access_key_90_days",
+ "ecr_repositories_tag_immutability"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C05.TR03",
+ "Description": "When an object is modified, the service MUST allow for recovery of previous versions of the object.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C05 Prevent Access from Untrusted Entities",
+ "SubSection": "CCC.ObjStor.C05 Versioning is Enabled for All Objects in the Bucket",
+ "SubSectionObjective": "Ensure that versioning is enabled for all objects stored in the object storage bucket to enable recovery of previous versions of objects in case of loss or corruption.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.1.4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28",
+ "CP-10"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-16"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "s3_bucket_object_versioning",
+ "dynamodb_tables_pitr_enabled",
+ "backup_recovery_point_encrypted"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C05.TR04",
+ "Description": "When an object is deleted, the service MUST retain other versions of the object to allow for recovery of previous versions.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C05 Prevent Access from Untrusted Entities",
+ "SubSection": "CCC.ObjStor.C05 Versioning is Enabled for All Objects in the Bucket",
+ "SubSectionObjective": "Ensure that versioning is enabled for all objects stored in the object storage bucket to enable recovery of previous versions of objects in case of loss or corruption.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.1.4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28",
+ "CP-10"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-16"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "s3_bucket_object_versioning",
+ "kinesis_stream_data_retention_period",
+ "kms_cmk_not_deleted_unintentionally"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C06.TR01",
+ "Description": "When an object storage bucket is accessed, the service MUST store access logs in a separate data store.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C06 Prevent Deployment in Restricted Regions",
+ "SubSection": "CCC.ObjStor.C06 Access Logs are Stored in a Separate Data Store",
+ "SubSectionObjective": "Ensure that access logs for object storage buckets are stored in a separate data store to protect against unauthorized access, tampering, or deletion of logs (Logbuckets are exempt from this requirement, but must be tlp-red).",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07",
+ "CCC.TH09"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-6"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-07",
+ "DSP-17"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.15.0"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9",
+ "SC-28"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudtrail_s3_dataevents_read_enabled",
+ "cloudtrail_logs_s3_bucket_access_logging_enabled",
+ "s3_bucket_server_access_logging_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C02.TR01",
+ "Description": "When a permission set is allowed for an object in a bucket, the service MUST allow the same permission set to access all objects in the same bucket.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C02 Ensure Data Encryption at Rest for All Stored Data",
+ "SubSection": "CCC.ObjStor.C02 Enforce Uniform Bucket-level Access to Prevent Inconsistent Permissions",
+ "SubSectionObjective": "Ensure that uniform bucket-level access is enforced across all object storage buckets. This prevents the use of ad-hoc or inconsistent object-level permissions, ensuring centralized, consistent, and secure access management in accordance with the principle of least privilege.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.4.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "AC-6"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DCS-09"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "s3_bucket_public_write_acl"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C02.TR02",
+ "Description": "When a permission set is denied for an object in a bucket, the service MUST deny the same permission set to access all objects in the same bucket.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C02 Ensure Data Encryption at Rest for All Stored Data",
+ "SubSection": "CCC.ObjStor.C02 Enforce Uniform Bucket-level Access to Prevent Inconsistent Permissions",
+ "SubSectionObjective": "Ensure that uniform bucket-level access is enforced across all object storage buckets. This prevents the use of ad-hoc or inconsistent object-level permissions, ensuring centralized, consistent, and secure access management in accordance with the principle of least privilege.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.4.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "AC-6"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DCS-09"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "s3_bucket_public_write_acl",
+ "s3_bucket_acl_prohibited",
+ "s3_bucket_public_access"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN01.AR01",
+ "Description": "Verify that only authorized users can access MLDE resources,\nand that access modes are properly defined and enforced.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN01 Define Access Mode for ML Development Environments",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that access to Machine Learning Development Environment (MLDE)\nresources is strictly defined and controlled.\nOnly authorized users with appropriate permissions can access these environments,\nmitigating the risk of unauthorized access, data leakage, or service disruption.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green",
+ "tlp-clear"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH01",
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.1.1",
+ "2013 A.9.2.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-2",
+ "AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-01",
+ "IAM-02"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "accessanalyzer_enabled",
+ "accessanalyzer_enabled_without_findings",
+ "iam_root_mfa_enabled",
+ "iam_root_credentials_management_enabled",
+ "iam_avoid_root_usage",
+ "iam_user_mfa_enabled_console_access",
+ "awslambda_function_not_publicly_accessible",
+ "awslambda_function_url_public",
+ "iam_group_administrator_access_policy",
+ "iam_user_administrator_access_policy",
+ "iam_policy_attached_only_to_group_or_roles",
+ "iam_inline_policy_no_full_access_to_cloudtrail",
+ "iam_inline_policy_no_full_access_to_kms",
+ "iam_policy_allows_privilege_escalation",
+ "s3_bucket_public_access",
+ "s3_bucket_public_list_acl",
+ "s3_bucket_public_write_acl",
+ "s3_account_level_public_access_blocks",
+ "s3_bucket_cross_account_access"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN03.AR01",
+ "Description": "Verify that root access is disabled on MLDE instances containing sensitive data.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN03 Disable Root Access on MLDE Instances",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent users from obtaining root access on MLDE instances to reduce the\nrisk of unauthorized system modifications and potential security breaches.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-08",
+ "IAM-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.2.3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.MLDE.CN03.AR02",
+ "Description": "For MLDE instances without sensitive data, ensure that root access is only\nenabled when necessary and properly authorized.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN03 Disable Root Access on MLDE Instances",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent users from obtaining root access on MLDE instances to reduce the\nrisk of unauthorized system modifications and potential security breaches.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green",
+ "tlp-clear"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-08",
+ "IAM-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.2.3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "ec2_instance_port_ssh_exposed_to_internet",
+ "ec2_instance_managed_by_ssm",
+ "ec2_instance_imdsv2_enabled",
+ "ec2_launch_template_imdsv2_required",
+ "ec2_instance_account_imdsv2_enabled",
+ "ec2_instance_public_ip"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN04.AR01",
+ "Description": "Verify that terminal access is disabled on MLDE instances containing sensitive data.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN04 Disable Terminal Access on MLDE Instances",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent users from accessing the terminal on MLDE instances to limit the risk of\nunauthorized commands and potential system compromise.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-08"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.2.3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "ec2_instance_port_ssh_exposed_to_internet",
+ "ec2_securitygroup_allow_ingress_from_internet_to_all_ports",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_3389",
+ "ec2_instance_public_ip",
+ "ec2_instance_internet_facing_with_instance_profile"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN04.AR02",
+ "Description": "For MLDE instances without sensitive data, ensure that terminal access is only\nenabled when necessary and properly authorized.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN04 Disable Terminal Access on MLDE Instances",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent users from accessing the terminal on MLDE instances to limit the risk of\nunauthorized commands and potential system compromise.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green",
+ "tlp-clear"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-08"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.2.3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "ec2_instance_port_ssh_exposed_to_internet",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22",
+ "ec2_securitygroup_allow_ingress_from_internet_to_all_ports",
+ "ec2_networkacl_allow_ingress_tcp_port_22",
+ "ec2_instance_public_ip",
+ "ec2_launch_template_no_public_ip",
+ "autoscaling_group_launch_configuration_no_public_ip"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN02.AR01",
+ "Description": "Confirm that file download functionality is disabled on MLDE instances containing sensitive data.",
+ "Attributes": [
+ {
+ "FamilyName": "Data Protection",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN02 Disable File Downloads on MLDE Instances",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent unauthorized file downloads from MLDE instances to protect sensitive data from being exfiltrated.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH02",
+ "CCC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-5"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSI-05",
+ "DSI-07"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.2.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-7",
+ "SC-8"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.MLDE.CN02.AR02",
+ "Description": "For MLDE instances without sensitive data, ensure that file downloads are monitored and logged.",
+ "Attributes": [
+ {
+ "FamilyName": "Data Protection",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "",
+ "SubSection": "CCC.MLDE.CN02 Disable File Downloads on MLDE Instances",
+ "SubSectionObjective": "Prevent unauthorized file downloads from MLDE instances to protect sensitive data from being exfiltrated.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green",
+ "tlp-clear"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH02",
+ "CCC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-5"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSI-05",
+ "DSI-07"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.2.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-7",
+ "SC-8"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudtrail_s3_dataevents_read_enabled",
+ "cloudtrail_s3_dataevents_write_enabled",
+ "cloudtrail_kms_encryption_enabled",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN05.AR01",
+ "Description": "Verify that only approved VM and container images can be selected when creating MLDE instances.",
+ "Attributes": [
+ {
+ "FamilyName": "Configuration Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "",
+ "SubSection": "CCC.MLDE.CN05 Restrict Environment Options on MLDE Instances",
+ "SubSectionObjective": "Limit the virtual machine and container image options available when creating\nnew MLDE instances to approved and secure configurations.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.IP-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "TVM-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.12.5.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "CM-2"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "bedrock_guardrail_prompt_attack_filter_enabled",
+ "bedrock_guardrail_sensitive_information_filter_enabled",
+ "bedrock_model_invocation_logging_enabled",
+ "bedrock_model_invocation_logs_encryption_enabled",
+ "bedrock_agent_guardrail_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN05.AR02",
+ "Description": "Attempt to create an MLDE instance with an unapproved image and confirm that it is denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Configuration Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "",
+ "SubSection": "CCC.MLDE.CN05 Restrict Environment Options on MLDE Instances",
+ "SubSectionObjective": "Limit the virtual machine and container image options available when creating\nnew MLDE instances to approved and secure configurations.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.IP-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "TVM-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.12.5.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "CM-2"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.MLDE.CN06.AR01",
+ "Description": "Verify that automatic scheduled upgrades are enabled on user-managed\nMLDE instances containing sensitive data.",
+ "Attributes": [
+ {
+ "FamilyName": "Vulnerability Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "",
+ "SubSection": "CCC.MLDE.CN06 Require Automatic Scheduled Upgrades on User-Managed MLDE Instances",
+ "SubSectionObjective": "Ensure that MLDE instances are kept up-to-date with the\nlatest security patches by enforcing automatic scheduled upgrades.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH04",
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.IP-12"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "TVM-01",
+ "TVM-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.12.6.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SI-2"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "dms_instance_minor_version_upgrade_enabled",
+ "elasticache_redis_cluster_auto_minor_version_upgrades",
+ "memorydb_cluster_auto_minor_version_upgrades",
+ "mq_broker_auto_minor_version_upgrades",
+ "redshift_cluster_automatic_upgrades",
+ "rds_cluster_minor_version_upgrade_enabled",
+ "rds_instance_minor_version_upgrade_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN06.AR02",
+ "Description": "Ensure that the upgrade schedule is appropriately configured and\ndoes not interfere with critical operations.",
+ "Attributes": [
+ {
+ "FamilyName": "Vulnerability Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "",
+ "SubSection": "CCC.MLDE.CN06 Require Automatic Scheduled Upgrades on User-Managed MLDE Instances",
+ "SubSectionObjective": "Ensure that MLDE instances are kept up-to-date with the\nlatest security patches by enforcing automatic scheduled upgrades.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green",
+ "tlp-clear"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH04",
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.IP-12"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "TVM-01",
+ "TVM-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.12.6.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SI-2"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.MLDE.CN07.AR01",
+ "Description": "Verify that MLDE instances containing sensitive data cannot be accessed via public IP addresses.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "",
+ "SubSection": "CCC.MLDE.CN07 Restrict Public IP Access on MLDE Instances",
+ "SubSectionObjective": "Prevent public IP access to MLDE instances to reduce exposure to the internet and enhance security.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH02",
+ "CCC.VPC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "SEF-05"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "ec2_instance_public_ip",
+ "ec2_securitygroup_allow_ingress_from_internet_to_all_ports"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN07.AR02",
+ "Description": "For MLDE instances without sensitive data requiring public access,\nensure that appropriate security controls are in place and access is approved.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN07 Restrict Public IP Access on MLDE Instances",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent public IP access to MLDE instances to reduce exposure to the internet and enhance security.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green",
+ "tlp-clear"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH02",
+ "CCC.VPC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "SEF-05"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "ec2_instance_public_ip",
+ "ec2_instance_internet_facing_with_instance_profile",
+ "ec2_securitygroup_allow_ingress_from_internet_to_all_ports",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_3389",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_postgres_5432",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_mysql_3306",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_oracle_1521_2483",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_ftp_20_21",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_memcached_11211",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_redis_6379",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_elasticsearch_kibana_9200_9300_5601",
+ "ec2_networkacl_allow_ingress_tcp_port_22",
+ "ec2_networkacl_allow_ingress_tcp_port_3389",
+ "ec2_networkacl_allow_ingress_any_port"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN08.AR01",
+ "Description": "Verify that MLDE instances containing sensitive data can only be deployed in\napproved virtual networks with appropriate security controls.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN08 Restrict Virtual Networks for MLDE Instances",
+ "SubSection": "",
+ "SubSectionObjective": "Limit the virtual networks that can be used when creating new MLDE instances to\nensure they are deployed within approved and secure network environments.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH01",
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.1.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "vpc_subnet_no_public_ip_by_default",
+ "vpc_subnet_different_az",
+ "vpc_flow_logs_enabled",
+ "vpc_endpoint_connections_trust_boundaries",
+ "vpc_peering_routing_tables_with_least_privilege"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN08.AR02",
+ "Description": "Ensure that MLDE instances without sensitive data are deployed in\nnetworks that meet organizational security standards.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN08 Restrict Virtual Networks for MLDE Instances",
+ "SubSection": "",
+ "SubSectionObjective": "Limit the virtual networks that can be used when creating new MLDE instances to\nensure they are deployed within approved and secure network environments.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green",
+ "tlp-clear"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH01",
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.1.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "sagemaker_notebook_instance_without_direct_internet_access_configured",
+ "sagemaker_training_jobs_network_isolation_enabled",
+ "sagemaker_models_network_isolation_enabled",
+ "sagemaker_training_jobs_vpc_settings_configured",
+ "sagemaker_notebook_instance_vpc_settings_configured",
+ "sagemaker_notebook_instance_encryption_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Message.CN01.AR01",
+ "Description": "Attempt to publish a message without using a customer-managed encryption key\nand verify that the message is rejected or not stored.",
+ "Attributes": [
+ {
+ "FamilyName": "Encryption",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.Message.CN01 Use Customer-Managed Encryption Keys (CMEK) for Messages",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that messages are encrypted using customer-managed encryption keys (CMEK)\nto provide enhanced control over encryption processes and keys, meeting compliance and security requirements.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12",
+ "SC-13"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "firehose_stream_encrypted_at_rest",
+ "kinesis_stream_encrypted_at_rest"
+ ]
+ },
+ {
+ "Id": "CCC.Monitor.CN01.AR01",
+ "Description": "When an External Monitoring system exceeds the anticipated rate of monitoring checks then\nRate Limiting MUST be applied and an Audit Alert MUST be generated.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "Controls that collect, alert, and retain events from other monitoring services.",
+ "Section": "CCC.Monitor.CN01 Rate Limiting on External Monitoring",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent DoS attacks using External Monitoring tools.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Monitor.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.IR-01",
+ "DE.CM-01"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-5",
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudtrail_threat_detection_enumeration",
+ "cloudtrail_threat_detection_llm_jacking",
+ "cloudtrail_threat_detection_privilege_escalation",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled",
+ "cloudwatch_alarm_actions_alarm_state_configured",
+ "cloudtrail_multi_region_enabled_logging_management_events"
+ ]
+ },
+ {
+ "Id": "CCC.Monitor.CN02.AR01",
+ "Description": "When an Custom or User-Defined Metric starts to flood a collector, then a rate limit MUST be applied\nto reduce the network impact of traffic and an alert must triggered.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "Controls that collect, alert, and retain events from other monitoring services.",
+ "Section": "CCC.Monitor.CN02 Rate Limiting on Metric Generation",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent Malicious Actor or misconfiguration from flooding services with metric data.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Monitor.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-01"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-5(2)",
+ "CA-7",
+ "SI-4"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled",
+ "cloudwatch_changes_to_network_acls_alarm_configured",
+ "cloudwatch_changes_to_network_gateways_alarm_configured",
+ "cloudwatch_changes_to_network_route_tables_alarm_configured",
+ "cloudwatch_changes_to_vpcs_alarm_configured",
+ "cloudwatch_alarm_actions_enabled",
+ "cloudwatch_alarm_actions_alarm_state_configured",
+ "cloudwatch_log_metric_filter_authentication_failures",
+ "cloudwatch_log_metric_filter_unauthorized_api_calls",
+ "cloudwatch_log_metric_filter_policy_changes",
+ "cloudwatch_log_metric_filter_for_s3_bucket_policy_changes",
+ "cloudwatch_log_metric_filter_security_group_changes"
+ ]
+ },
+ {
+ "Id": "CCC.Monitor.CN03.AR01",
+ "Description": "When external systems have approved access to internal systems not normally available for public access\nthen they MUST be secured to prevent unauthorised access jumping through to the internal systems and\nonly allow access to specific internal services.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls designed to prevent unauthorised access to monitoring features.",
+ "Section": "CCC.Monitor.CN03 Access External Monitoring",
+ "SubSection": "",
+ "SubSectionObjective": "Control access to Synthetic monitoring solutions using API keys or Certificate based authentication to\nensure they don't become an attack path, preventing monitoring systems from forging network requests to\ngain access to internal systems.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Monitor.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-06",
+ "PR.IR-01",
+ "PR.AA-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "awslambda_function_url_public",
+ "apigateway_restapi_public",
+ "apigateway_restapi_authorizers_enabled",
+ "apigateway_restapi_public_with_authorizer",
+ "apigateway_restapi_client_certificate_enabled",
+ "apigatewayv2_api_authorizers_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Monitor.CN04.AR01",
+ "Description": "When monitoring dashboards display degraded services which may become potential targets then the\ndashboard MUST be protected from unauthorised access.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls designed to prevent unauthorised access to monitoring features.",
+ "Section": "CCC.Monitor.CN04 Restrict access to Monitoring Dashboards",
+ "SubSection": "",
+ "SubSectionObjective": "Control access to Monitoring Dashboards and reports to ensure they don't highlight an attack path.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Monitor.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-09",
+ "DE.AE-03"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SI-4",
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudwatch_log_group_not_publicly_accessible",
+ "cloudwatch_log_group_kms_encryption_enabled",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "cloudtrail_cloudwatch_logging_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Monitor.CN05.AR01",
+ "Description": "When monitoring services have generated an alert, the service MUST ensure only authorised\nresponders silence or acknowledge the alert.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls designed to prevent unauthorised access to monitoring features.",
+ "Section": "CCC.Monitor.CN05 Restrict access to silence or acknowledge an alert",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure only a subset of users can silence or acknowledge alerts to prevent attackers hiding their activity.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH10"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.IR-01",
+ "PR.AA-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_administrator_access_with_mfa",
+ "iam_root_mfa_enabled",
+ "iam_group_administrator_access_policy",
+ "iam_policy_attached_only_to_group_or_roles",
+ "iam_inline_policy_allows_privilege_escalation",
+ "iam_inline_policy_no_full_access_to_cloudtrail"
+ ]
+ },
+ {
+ "Id": "CCC.Monitor.CN06.AR01",
+ "Description": "When systems push metrics or traces they MUST be authenticated for that particular type of metric or trace",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls designed to prevent unauthorised access to monitoring features.",
+ "Section": "CCC.Monitor.CN06 Metrics pushed for authorised services only",
+ "SubSection": "",
+ "SubSectionObjective": "Use IAM to control which types of metrics or traces can be pushed by different system to avoid a compromised\nsystem pushing fabricated metrics about a different service",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Monitor.TH05"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AA-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-5"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "awslambda_function_url_public",
+ "awslambda_function_not_publicly_accessible",
+ "apigateway_restapi_authorizers_enabled",
+ "apigatewayv2_api_authorizers_enabled",
+ "apigateway_restapi_public_with_authorizer",
+ "apigateway_restapi_public",
+ "cloudwatch_log_group_not_publicly_accessible"
+ ]
+ },
+ {
+ "Id": "CCC.SecMgmt.CN01.AR01",
+ "Description": "Attempt to use an outdated version of a secret after its rotation period\nhas passed and verify that access is denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Data Protection",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.SecMgmt.CN01 Enforce Automatic Secret Rotation",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that secrets are automatically rotated on a defined schedule to\nreduce the risk of secret compromise and unauthorized access.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01",
+ "CCC.TH14"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-6"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12",
+ "SC-28"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.SecMgmt.CN02.AR01",
+ "Description": "Attempt to retrieve a secret from an unauthorized region and verify that access is denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Data Protection",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.SecMgmt.CN02 Enforce Secret Replication Policies",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that secrets are replicated only to authorized locations as per\norganizational data residency and compliance requirements.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH03",
+ "CCC.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-5"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.SvlsComp.CN01.AR01",
+ "Description": "Attempt to access the serverless function over the public internet and verify that access is denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.SvlsComp.CN01 Enforce Use of Private Endpoints for Serverless Function",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that the serverless function is accessible only through a private endpoint,\nallowing it to communicate securely within a virtual private network and preventing\nunauthorized external access.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-5"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-7",
+ "SC-8"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "awslambda_function_url_public",
+ "awslambda_function_not_publicly_accessible",
+ "awslambda_function_inside_vpc"
+ ]
+ },
+ {
+ "Id": "CCC.SvlsComp.CN02.AR01",
+ "Description": "Send requests to invoke the function up to the allowed threshold and confirm they\nare successful; then send additional requests exceeding the threshold from the same\nentity and verify that they are denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Availability",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.SvlsComp.CN02 Implement Function Invocation Rate Limits",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that function invocation is limited to a specified threshold from any single entity,\npreventing resource exhaustion and denial of service attacks.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH12"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-5"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.VPC.CN01.AR01",
+ "Description": "When a subscription is created, the subscription MUST NOT\ncontain default network resources.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.VPC.CN01 Restrict Default Network Creation",
+ "SubSection": "",
+ "SubSectionObjective": "Restrict the automatic creation of default virtual networks and related\nresources during subscription initialization to avoid insecure default\nconfigurations and enforce custom network policies.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.VPC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-5"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "TVM-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.12.3.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "ec2_securitygroup_default_restrict_traffic",
+ "ec2_securitygroup_allow_ingress_from_internet_to_all_ports",
+ "ec2_securitygroup_allow_ingress_from_internet_to_any_port"
+ ]
+ },
+ {
+ "Id": "CCC.VPC.CN02.AR01",
+ "Description": "When a resource is created in a public subnet, that resource\nMUST NOT be assigned an external IP address by default.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.VPC.CN02 Limit Resource Creation in Public Subnet",
+ "SubSection": "",
+ "SubSectionObjective": "Restrict the creation of resources in the public subnet with\ndirect access to the internet to minimize attack surfaces.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.VPC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "SEF-05"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-4"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "vpc_subnet_no_public_ip_by_default",
+ "ec2_launch_template_no_public_ip",
+ "autoscaling_group_launch_configuration_no_public_ip"
+ ]
+ },
+ {
+ "Id": "CCC.VPC.CN03.AR01",
+ "Description": "When a VPC peering connection is requested, the service MUST\nprevent connections from VPCs that are not explicitly\nallowed.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.VPC.CN03 Restrict VPC Peering to Authorized Accounts",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure VPC peering connections are only established with explicitly\nauthorized destinations to limit network exposure and enforce boundary\ncontrols.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.VPC.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IVS-01"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.3"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-4"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "vpc_peering_routing_tables_with_least_privilege"
+ ]
+ },
+ {
+ "Id": "CCC.VPC.CN04.AR01",
+ "Description": "When any network traffic goes to or from an interface in the VPC,\nthe service MUST capture and log all relevant information.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.VPC.CN04 Enforce VPC Flow Logs on VPCs",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure VPCs are configured with flow logs enabled to capture traffic\ninformation.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.VPC.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PT-1"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.12.4.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-2"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IVS-06"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "vpc_flow_logs_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Vector.CN01.AR01",
+ "Description": "When a vector embedding is submitted for indexing, the system MUST validate that it\nmatches expected schema, dimension, and format profiles.",
+ "Attributes": [
+ {
+ "FamilyName": "Vector Indexing",
+ "FamilyDescription": "Controls specific to the management and protection of vector embedding and index operations.",
+ "Section": "CCC.Vector.CN01 Validate Embeddings Before Indexing",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure all incoming embeddings are structurally and statistically validated\nbefore indexing to prevent poisoning or corruption.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Vector.TH02",
+ "CCC.Vector.TH05",
+ "CCC.TH12"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-002"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Vector.CN02.AR01",
+ "Description": "When an index lifecycle event is triggered, the service MUST\nverify that the actor has explicit permissions for the operation type.",
+ "Attributes": [
+ {
+ "FamilyName": "Vector Indexing",
+ "FamilyDescription": "Controls specific to the management and protection of vector embedding and index operations.",
+ "Section": "CCC.Vector.CN02 Enforce Role-Based Index Lifecycle Management",
+ "SubSection": "",
+ "SubSectionObjective": "Restrict index lifecycle operations (create, delete, rollback) to privileged\nidentities using fine-grained access controls.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Vector.TH02",
+ "CCC.Vector.TH04",
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-012"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_group_administrator_access_policy",
+ "iam_user_administrator_access_policy",
+ "iam_role_administratoraccess_policy",
+ "iam_administrator_access_with_mfa",
+ "iam_inline_policy_allows_privilege_escalation",
+ "iam_inline_policy_no_full_access_to_cloudtrail",
+ "iam_inline_policy_no_full_access_to_kms",
+ "iam_policy_attached_only_to_group_or_roles",
+ "iam_customer_attached_policy_no_administrative_privileges",
+ "iam_customer_unattached_policy_no_administrative_privileges",
+ "iam_no_custom_policy_permissive_role_assumption"
+ ]
+ },
+ {
+ "Id": "CCC.Vector.CN03.AR01",
+ "Description": "When a metadata filter is applied to a query, the service MUST\nverify the requester is authorized to access that field.",
+ "Attributes": [
+ {
+ "FamilyName": "Vector Indexing",
+ "FamilyDescription": "Controls specific to the management and protection of vector embedding and index operations.",
+ "Section": "CCC.Vector.CN03 Enforce Metadata-Level Access Controls",
+ "SubSection": "",
+ "SubSectionObjective": "Apply access control policies to metadata fields used in filtering to\nprevent unauthorized exposure or inference.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Vector.TH03",
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-DET-001",
+ "AIR-PREV-012",
+ "AIR-DET-016"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Vector.CN04.AR01",
+ "Description": "When ingestion exceeds pre-defined thresholds, the service MUST\nthrottle or reject excess vector write operations.",
+ "Attributes": [
+ {
+ "FamilyName": "Vector Indexing",
+ "FamilyDescription": "Controls specific to the management and protection of vector embedding and index operations.",
+ "Section": "CCC.Vector.CN04 Enforce Ingestion Quotas and Throttling",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent ingestion-based DoS or index pollution by\nrate-limiting vector submissions and enforcing quotas.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Vector.TH02",
+ "CCC.TH12"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-008"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Vector.CN05.AR01",
+ "Description": "When a rollback is attempted, the system MUST log\nthe action and verify rollback authorization.",
+ "Attributes": [
+ {
+ "FamilyName": "Vector Indexing",
+ "FamilyDescription": "Controls specific to the management and protection of vector embedding and index operations.",
+ "Section": "CCC.Vector.CN05 Enforce Index Versioning with Rollback Protection",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure vector indexes are versioned and that rollback\noperations are authorized and auditable.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Vector.TH04",
+ "CCC.TH09",
+ "CCC.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "AIR-DET-004",
+ "Identifiers": [
+ "AIR-PREV-008"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Vector.CN06.AR01",
+ "Description": "When an embedding is submitted, the service MUST validate\nthat its format and dimensionality match allowed profiles.",
+ "Attributes": [
+ {
+ "FamilyName": "Vector Indexing",
+ "FamilyDescription": "Controls specific to the management and protection of vector embedding and index operations.",
+ "Section": "CCC.Vector.CN06 Enforce Dimensional and Format Constraints",
+ "SubSection": "",
+ "SubSectionObjective": "Reject embeddings that do not conform to expected model\nspecifications (dimensions, format, etc).",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Vector.TH05",
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-002"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Vector.CN07.AR01",
+ "Description": "When a search request is issued, clients MUST be allowed\nto declare their requirement for exact vs approximate results.",
+ "Attributes": [
+ {
+ "FamilyName": "Vector Indexing",
+ "FamilyDescription": "Controls specific to the management and protection of vector embedding and index operations.",
+ "Section": "CCC.Vector.CN07 Support Explicit ANN vs. Exact Search Configuration",
+ "SubSection": "",
+ "SubSectionObjective": "Provide clients with the option to enforce exact-match\n(non-ANN) search where search fidelity is critical.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Vector.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": []
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Core.CN01.AR01",
+ "Description": "When a port is exposed for non-SSH network traffic, all traffic\nMUST include a TLS handshake AND be encrypted using TLS 1.3 or\nhigher.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN01 Encrypt Data for Transmission",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all communications are encrypted in transit to protect\ndata integrity and confidentiality.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Most cloud services enable TLS 1.3 by default. Where it is not\nalready set, ensure that your services are configured or updated\naccordingly.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-03",
+ "CEK-04",
+ "IVS-03",
+ "IVS-07"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-8",
+ "SC-13"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudfront_distributions_origin_traffic_encrypted",
+ "cloudfront_distributions_https_enabled",
+ "cloudfront_distributions_https_sni_enabled",
+ "s3_bucket_secure_transport_policy",
+ "dms_endpoint_redis_in_transit_encryption_enabled",
+ "kafka_cluster_in_transit_encryption_enabled",
+ "transfer_server_in_transit_encryption_enabled",
+ "redshift_cluster_in_transit_encryption_enabled",
+ "rds_instance_transport_encrypted"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN01.AR02",
+ "Description": "When a port is exposed for SSH network traffic, all traffic MUST\ninclude a SSH handshake AND be encrypted using SSHv2 or higher.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN01 Encrypt Data for Transmission",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all communications are encrypted in transit to protect\ndata integrity and confidentiality.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Any time port 22 is exposed, ensure that it has a properly\nimplemented SSH server with SSHv2 enabled and configured with\nstrong ciphers.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-03",
+ "CEK-04",
+ "IVS-03",
+ "IVS-07"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-8",
+ "SC-13"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "ec2_instance_port_ssh_exposed_to_internet",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22",
+ "ec2_securitygroup_allow_ingress_from_internet_to_all_ports",
+ "ec2_networkacl_allow_ingress_tcp_port_22"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN01.AR03",
+ "Description": "When the service receives unencrypted traffic, \nthen it MUST either block the request or automatically\nredirect it to the secure equivalent.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN01 Encrypt Data for Transmission",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all communications are encrypted in transit to protect\ndata integrity and confidentiality.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Review firewall, load balancer, and application configurations to\nensure insecure protocols such as HTTP, FTP, and Telnet are not\nexposed. Where possible, implement automatic redirection to secure\nprotocols such as HTTPS, SFTP, SSH, and regularly scan for\nprotocol drift.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-03",
+ "CEK-04",
+ "IVS-03",
+ "IVS-07"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-8",
+ "SC-13"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudfront_distributions_https_enabled",
+ "cloudfront_distributions_https_sni_enabled",
+ "cloudfront_distributions_origin_traffic_encrypted",
+ "opensearch_service_domains_https_communications_enforced",
+ "transfer_server_in_transit_encryption_enabled",
+ "s3_bucket_secure_transport_policy",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_ftp_20_21",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_telnet_23"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN01.AR07",
+ "Description": "When a port is exposed, the service MUST ensure that the protocol\nand service officially assigned to that port number by the IANA\nService Name and Transport Protocol Port Number Registry, and no\nother, is run on that port.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN01 Encrypt Data for Transmission",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all communications are encrypted in transit to protect\ndata integrity and confidentiality.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Reference the IANA Service Name and Transport Protocol Port Number\nRegistry for more information about correct protocol-to-port\nassignments. Avoid running non-standard services on well-known\nports.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-03",
+ "CEK-04",
+ "IVS-03",
+ "IVS-07"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-8",
+ "SC-13"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudfront_distributions_origin_traffic_encrypted",
+ "rds_instance_transport_encrypted",
+ "redshift_cluster_in_transit_encryption_enabled",
+ "kafka_cluster_in_transit_encryption_enabled",
+ "transfer_server_in_transit_encryption_enabled",
+ "dms_endpoint_redis_in_transit_encryption_enabled",
+ "dms_endpoint_ssl_enabled",
+ "s3_bucket_secure_transport_policy"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN01.AR08",
+ "Description": "When a service transmits data using TLS, mutual TLS (mTLS) MUST be\nimplemented to require both client and server certificate\nauthentication for all connections.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN01 Encrypt Data for Transmission",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all communications are encrypted in transit to protect\ndata integrity and confidentiality.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Configure mTLS for all endpoints that process or transmit\nsensitive data. Ensure both client and server certificates are\nvalidated and managed securely. Regularly review certificate\nauthorities and automate certificate rotation where possible.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-03",
+ "CEK-04",
+ "IVS-03",
+ "IVS-07"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-8",
+ "SC-13"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "apigateway_restapi_client_certificate_enabled",
+ "cloudfront_distributions_custom_ssl_certificate",
+ "cloudfront_distributions_https_sni_enabled",
+ "cloudfront_distributions_origin_traffic_encrypted",
+ "acm_certificates_expiration_check",
+ "acm_certificates_with_secure_key_algorithms",
+ "acm_certificates_transparency_logs_enabled",
+ "s3_bucket_secure_transport_policy",
+ "dms_endpoint_ssl_enabled",
+ "dms_endpoint_redis_in_transit_encryption_enabled",
+ "transfer_server_in_transit_encryption_enabled",
+ "kafka_cluster_in_transit_encryption_enabled",
+ "kafka_cluster_mutual_tls_authentication_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN13.AR01",
+ "Description": "When a port is exposed that uses certificate-based encryption,\nthe service MUST only use valid, unexpired certificates issued by\na trusted certificate authority.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN13 Minimize Lifetime of Encryption and Authentication Certificates",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that encryption and authentication certificates have a limited\nlifetime to reduce the risk of compromise and ensure the use of\nup-to-date security practices.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Track certificate expiration dates and automate certificate\nrenewal where possible. Use certificate management tools to ensure\nonly certificates from trusted authorities are deployed.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH18"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": []
+ }
+ ],
+ "Checks": [
+ "acm_certificates_expiration_check",
+ "acm_certificates_transparency_logs_enabled",
+ "acm_certificates_with_secure_key_algorithms"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN13.AR02",
+ "Description": "When a port is exposed that uses certificate-based encryption,\nthe service MUST rotate active certificates within 180 days of\nissuance.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN13 Minimize Lifetime of Encryption and Authentication Certificates",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that encryption and authentication certificates have a limited\nlifetime to reduce the risk of compromise and ensure the use of\nup-to-date security practices.",
+ "Applicability": [
+ "tlp-amber"
+ ],
+ "Recommendation": "Track certificate expiration dates and automate certificate\nrenewal where possible. Use certificate management tools to ensure\nonly certificates from trusted authorities are deployed.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH18"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": []
+ }
+ ],
+ "Checks": [
+ "acm_certificates_expiration_check"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN13.AR03",
+ "Description": "When a port is exposed that uses certificate-based encryption,\nthe service MUST rotate active certificates within 90 days of\nissuance.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN13 Minimize Lifetime of Encryption and Authentication Certificates",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that encryption and authentication certificates have a limited\nlifetime to reduce the risk of compromise and ensure the use of\nup-to-date security practices.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "Track certificate expiration dates and automate certificate\nrenewal where possible. Use certificate management tools to ensure\nonly certificates from trusted authorities are deployed.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH18"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": []
+ }
+ ],
+ "Checks": [
+ "acm_certificates_expiration_check"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN06.AR01",
+ "Description": "When the service is running, its region and availability zone MUST\nbe included in a list of explicitly trusted or approved locations\nwithin the trust perimeter.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN06 Restrict Deployments to Trust Perimeter",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that the service and its child resources are only deployed on\ninfrastructure in locations that are explicitly included within a\ndefined trust perimeter.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Maintain an up-to-date list of trusted and approved regions based\non organizational policies. Validate the service's deployment\nlocation is included in this list.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-19"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.11.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "organizations_scp_check_deny_regions",
+ "vpc_endpoint_connections_trust_boundaries",
+ "vpc_endpoint_services_allowed_principals_trust_boundaries"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN06.AR02",
+ "Description": "When a child resource is deployed, its region and availability\nzone MUST be included in a list of explicitly trusted or approved\nlocations within the trust perimeter.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN06 Restrict Deployments to Trust Perimeter",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that the service and its child resources are only deployed on\ninfrastructure in locations that are explicitly included within a\ndefined trust perimeter.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Maintain an up-to-date list of trusted and approved regions based\non organizational policies. Validate that child resources can only\nbe deployed to locations included in this list.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-19"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.11.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "organizations_scp_check_deny_regions",
+ "vpc_endpoint_services_allowed_principals_trust_boundaries",
+ "vpc_endpoint_connections_trust_boundaries"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN08.AR01",
+ "Description": "When data is created or modified, the data MUST have a complete\nand recoverable duplicate that is stored in a physically separate\ndata center.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN08 Replicate Data to Multiple Locations",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that data is replicated across multiple physical locations to\nprotect against data loss due to hardware failures, natural disasters,\nor other catastrophic events.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Implement automated data replication processes to ensure that\ndata is consistently duplicated in another region or availability\nzone. Regularly test data recovery from the replicated location to\nensure integrity and availability.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PT-5"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "BCR-08",
+ "BCR-10",
+ "BCR-11"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "CP-2",
+ "CP-10"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "s3_bucket_cross_region_replication",
+ "cloudtrail_multi_region_enabled",
+ "backup_plans_exist",
+ "backup_vaults_exist",
+ "backup_vaults_encrypted",
+ "dynamodb_table_protected_by_backup_plan",
+ "rds_cluster_protected_by_backup_plan",
+ "rds_instance_protected_by_backup_plan"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN08.AR02",
+ "Description": "When data is replicated into a second location, the service MUST\nbe able to accurately represent the replication locations,\nreplication status, and data synchronization status.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN08 Replicate Data to Multiple Locations",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that data is replicated across multiple physical locations to\nprotect against data loss due to hardware failures, natural disasters,\nor other catastrophic events.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PT-5"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "BCR-08",
+ "BCR-10",
+ "BCR-11"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "CP-2",
+ "CP-10"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "s3_bucket_cross_region_replication"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN09.AR01",
+ "Description": "When the service is operational, its logs and any child resource\nlogs MUST NOT be accessible from the resource they record access\nto.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN09 Ensure Integrity of Access Logs",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that access logs are always recorded to an external location\nthat cannot be manipulated from the context of the service(s) it\ncontains logs for.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07",
+ "CCC.TH09",
+ "CCC.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-6"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "LOG-02",
+ "LOG-04",
+ "LOG-09"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudtrail_bucket_requires_mfa_delete",
+ "cloudtrail_log_file_validation_enabled",
+ "cloudtrail_kms_encryption_enabled",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_multi_region_enabled",
+ "cloudtrail_s3_dataevents_read_enabled",
+ "cloudtrail_s3_dataevents_write_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN09.AR02",
+ "Description": "When the service is operational, disabling the logs for the service\nor its child resources MUST NOT be possible without also disabling\nthe corresponding resource.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN09 Ensure Integrity of Access Logs",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that access logs are always recorded to an external location\nthat cannot be manipulated from the context of the service(s) it\ncontains logs for.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "No normal business operations should disable\nlogs, as this could indicate an attempt to cover up unauthorized\naccess. Ensure that logging mechanisms are tightly integrated with\nservice operations, so that logging cannot be disabled without\nstopping the service itself.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07",
+ "CCC.TH09",
+ "CCC.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-6"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "LOG-02",
+ "LOG-04",
+ "LOG-09"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudtrail_kms_encryption_enabled",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "cloudtrail_logs_s3_bucket_access_logging_enabled",
+ "cloudtrail_s3_dataevents_read_enabled",
+ "cloudtrail_s3_dataevents_write_enabled",
+ "cloudtrail_log_file_validation_enabled",
+ "vpc_flow_logs_enabled",
+ "apigateway_restapi_logging_enabled",
+ "apigatewayv2_api_access_logging_enabled",
+ "cloudwatch_log_group_not_publicly_accessible",
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN09.AR03",
+ "Description": "When the service is operational, any attempt to redirect logs for\nthe service or its child resources MUST NOT be possible without\nhalting operation of the corresponding resource and publishing\ncorresponding events to monitored channels.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN09 Ensure Integrity of Access Logs",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that access logs are always recorded to an external location\nthat cannot be manipulated from the context of the service(s) it\ncontains logs for.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "No normal business operations should result in the redirection of\nlogs, as this could indicate an attempt to cover up unauthorized\naccess. Ensure that logging configurations are immutable during\nservice operation so that any changes require stopping the service\nand publishing corresponding events to monitored channels.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07",
+ "CCC.TH09",
+ "CCC.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-6"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "LOG-02",
+ "LOG-04",
+ "LOG-09"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudtrail_insights_exist",
+ "cloudtrail_logs_s3_bucket_access_logging_enabled",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_s3_dataevents_read_enabled",
+ "cloudtrail_s3_dataevents_write_enabled",
+ "cloudtrail_kms_encryption_enabled",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "cloudtrail_log_file_validation_enabled",
+ "cloudwatch_log_group_kms_encryption_enabled",
+ "cloudwatch_log_group_not_publicly_accessible",
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled",
+ "cloudwatch_changes_to_network_acls_alarm_configured",
+ "cloudwatch_changes_to_network_gateways_alarm_configured",
+ "cloudwatch_changes_to_network_route_tables_alarm_configured",
+ "cloudwatch_changes_to_vpcs_alarm_configured",
+ "s3_bucket_server_access_logging_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN10.AR01",
+ "Description": "When data is replicated, the service MUST ensure that replication\nonly occurs to destinations that are explicitly included within\nthe defined trust perimeter.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN10 Restrict Data Replication to Trust Perimeter",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that data is only replicated on infrastructure in locations\nthat are explicitly included within a defined trust perimeter.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-5"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-10",
+ "DSP-19"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-4"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "vpc_endpoint_services_allowed_principals_trust_boundaries",
+ "vpc_endpoint_connections_trust_boundaries",
+ "s3_bucket_cross_account_access"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN02.AR01",
+ "Description": "When data is stored, it MUST be encrypted using the latest\nindustry-standard encryption methods.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN02 Encrypt Data for Storage",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all data stored is encrypted at rest using strong\nencryption algorithms.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-03",
+ "CEK-04",
+ "UEM-08",
+ "DSP-17"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-13",
+ "SC-28"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "s3_bucket_default_encryption",
+ "s3_bucket_kms_encryption",
+ "firehose_stream_encrypted_at_rest",
+ "backup_vaults_encrypted",
+ "backup_recovery_point_encrypted",
+ "cloudtrail_kms_encryption_enabled",
+ "cloudwatch_log_group_kms_encryption_enabled",
+ "opensearch_service_domains_encryption_at_rest_enabled",
+ "opensearch_service_domains_node_to_node_encryption_enabled",
+ "kafka_cluster_encryption_at_rest_uses_cmk",
+ "kinesis_stream_encrypted_at_rest",
+ "dynamodb_tables_kms_cmk_encryption_enabled",
+ "dynamodb_accelerator_cluster_encryption_enabled",
+ "ec2_ebs_default_encryption",
+ "ec2_ebs_volume_encryption",
+ "storagegateway_fileshare_encryption_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN11.AR01",
+ "Description": "When encryption keys are used, the service MUST verify that\nall encryption keys use the latest industry-standard cryptographic\nalgorithms.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN11 Protect Encryption Keys",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that encryption keys are managed securely by enforcing\nthe use of approved algorithms, regular key rotation, and\ncustomer-managed encryption keys (CMEKs).",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH16"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-08",
+ "CEK-10",
+ "CEK-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12",
+ "SC-17"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "kms_cmk_rotation_enabled",
+ "kms_cmk_not_deleted_unintentionally",
+ "kms_cmk_not_multi_region",
+ "kms_cmk_are_used"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN11.AR02",
+ "Description": "When encryption keys are used, the service MUST rotate active keys\nwithin 180 days of issuance.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN11 Protect Encryption Keys",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that encryption keys are managed securely by enforcing\nthe use of approved algorithms, regular key rotation, and\ncustomer-managed encryption keys (CMEKs).",
+ "Applicability": [
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH16"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-08",
+ "CEK-10",
+ "CEK-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12",
+ "SC-17"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "kms_cmk_rotation_enabled",
+ "kms_cmk_not_deleted_unintentionally",
+ "kms_cmk_not_multi_region",
+ "kms_cmk_are_used"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN11.AR03",
+ "Description": "When encrypting data, the service MUST verify that\ncustomer-managed encryption keys (CMEKs) are used.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "",
+ "SubSection": "CCC.Core.CN11 Protect Encryption Keys",
+ "SubSectionObjective": "Ensure that encryption keys are managed securely by enforcing\nthe use of approved algorithms, regular key rotation, and\ncustomer-managed encryption keys (CMEKs).",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH16"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-08",
+ "CEK-10",
+ "CEK-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12",
+ "SC-17"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "kms_cmk_not_deleted_unintentionally",
+ "kms_cmk_rotation_enabled",
+ "kms_cmk_not_multi_region",
+ "kms_cmk_are_used"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN11.AR04",
+ "Description": "When encryption keys are accessed, the service MUST verify that\naccess to encryption keys is restricted to authorized personnel\nand services, following the principle of least privilege.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN11 Protect Encryption Keys",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that encryption keys are managed securely by enforcing\nthe use of approved algorithms, regular key rotation, and\ncustomer-managed encryption keys (CMEKs).",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH16"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-08",
+ "CEK-10",
+ "CEK-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12",
+ "SC-17"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "kms_cmk_rotation_enabled",
+ "kms_cmk_not_deleted_unintentionally",
+ "kms_cmk_not_multi_region",
+ "kms_cmk_are_used"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN11.AR05",
+ "Description": "When encryption keys are used, the service MUST rotate active keys\nwithin 365 days of issuance.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN11 Protect Encryption Keys",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that encryption keys are managed securely by enforcing\nthe use of approved algorithms, regular key rotation, and\ncustomer-managed encryption keys (CMEKs).",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH16"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-08",
+ "CEK-10",
+ "CEK-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12",
+ "SC-17"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "kms_cmk_rotation_enabled",
+ "kms_cmk_not_multi_region"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN11.AR06",
+ "Description": "When encryption keys are used, the service MUST rotate active keys\nwithin 90 days of issuance.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN11 Protect Encryption Keys",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that encryption keys are managed securely by enforcing\nthe use of approved algorithms, regular key rotation, and\ncustomer-managed encryption keys (CMEKs).",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH16"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-08",
+ "CEK-10",
+ "CEK-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12",
+ "SC-17"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "kms_cmk_rotation_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN14.AR01",
+ "Description": "When backups are created for disaster recovery purposes, the\nstorage mechanism MUST NOT allow modification or deletion\nwithin 30 days of creation.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN14 Maintain Recent Backups",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all backups used for disaster recovery are recent and\nsubject to a retention policy that limits deletion.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Use immutable storage solutions where possible. Implement backup\nretention policies that enforce a minimum retention period of 30\ndays.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": []
+ }
+ ],
+ "Checks": [
+ "neptune_cluster_backup_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN14.AR02",
+ "Description": "When backups are created for disaster recovery purposes, the\nmost recent backup MUST have a creation date within the past\n30 days.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN14 Maintain Recent Backups",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all backups used for disaster recovery are recent and\nsubject to a retention policy that limits deletion.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber"
+ ],
+ "Recommendation": "Implement automated backup processes to ensure that backups are\ncreated regularly. Monitor backup schedules and verify that the\nmost recent backup creation date is within the last 30 days.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": []
+ }
+ ],
+ "Checks": [
+ "backup_vaults_exist",
+ "backup_plans_exist",
+ "backup_reportplans_exist",
+ "backup_vaults_encrypted",
+ "backup_recovery_point_encrypted",
+ "neptune_cluster_backup_enabled",
+ "rds_instance_backup_enabled",
+ "rds_instance_protected_by_backup_plan",
+ "rds_cluster_protected_by_backup_plan",
+ "dynamodb_table_protected_by_backup_plan"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN14.AR02",
+ "Description": "When backups are created for disaster recovery purposes, the\nmost recent backup MUST have a creation date within the past\n14 days.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN14 Maintain Recent Backups",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all backups used for disaster recovery are recent and\nsubject to a retention policy that limits deletion.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "Implement automated backup processes to ensure that backups are\ncreated regularly. Monitor backup schedules and verify that the\nmost recent backup creation date is within the last 14 days.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": []
+ }
+ ],
+ "Checks": [
+ "backup_vaults_exist",
+ "backup_vaults_encrypted",
+ "backup_plans_exist",
+ "backup_reportplans_exist",
+ "backup_recovery_point_encrypted",
+ "neptune_cluster_backup_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN03.AR01",
+ "Description": "When an entity attempts to modify the service through a user\ninterface, the authentication process MUST require multiple\nidentifying factors for authentication.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN03 Implement Multi-factor Authentication (MFA) for Access",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all sensitive activities require two or more identity\nfactors during authentication to prevent unauthorized access.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-14"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-7"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-03",
+ "IAM-08"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.4.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "IA-2"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_root_mfa_enabled",
+ "iam_root_hardware_mfa_enabled",
+ "iam_user_mfa_enabled_console_access",
+ "iam_administrator_access_with_mfa",
+ "cognito_user_pool_mfa_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN03.AR02",
+ "Description": "When an entity attempts to modify the service through an API\nendpoint, the authentication process MUST require a credential\nsuch as an API key or token AND originate from within the trust\nperimeter.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN03 Implement Multi-factor Authentication (MFA) for Access",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all sensitive activities require two or more identity\nfactors during authentication to prevent unauthorized access.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-14"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-7"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-03",
+ "IAM-08"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.4.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "IA-2"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_root_mfa_enabled",
+ "iam_root_hardware_mfa_enabled",
+ "iam_user_mfa_enabled_console_access",
+ "iam_administrator_access_with_mfa",
+ "cognito_user_pool_mfa_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN03.AR03",
+ "Description": "When an entity attempts to view information on the service through\na user interface, the authentication process MUST require multiple\nidentifying factors from the user.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN03 Implement Multi-factor Authentication (MFA) for Access",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all sensitive activities require two or more identity\nfactors during authentication to prevent unauthorized access.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-14"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-7"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-03",
+ "IAM-08"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.4.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "IA-2"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cognito_user_pool_mfa_enabled",
+ "iam_root_mfa_enabled",
+ "iam_root_hardware_mfa_enabled",
+ "iam_user_mfa_enabled_console_access",
+ "iam_user_hardware_mfa_enabled",
+ "iam_administrator_access_with_mfa"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN03.AR04",
+ "Description": "When an entity attempts to view information on the service through\nan API endpoint, the authentication process MUST require a\ncredential such as an API key or token AND originate from within\nthe trust perimeter.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN03 Implement Multi-factor Authentication (MFA) for Access",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all sensitive activities require two or more identity\nfactors during authentication to prevent unauthorized access.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-14"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-7"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-03",
+ "IAM-08"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.4.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "IA-2"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_user_mfa_enabled_console_access",
+ "iam_root_mfa_enabled",
+ "iam_root_hardware_mfa_enabled",
+ "iam_user_hardware_mfa_enabled",
+ "iam_administrator_access_with_mfa",
+ "apigateway_restapi_authorizers_enabled",
+ "apigateway_restapi_public_with_authorizer"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN05.AR01",
+ "Description": "When an attempt is made to modify data on the service or a child\nresource, the service MUST block requests from unauthorized\nentities.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN05 Prevent Access from Untrusted Entities",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that secure access controls enforce the principle of least\nprivilege to restrict access to authorized entities from explicitly\ntrusted sources only.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-01",
+ "DSP-07",
+ "DSP-08",
+ "DSP-10",
+ "DSP-17"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.3"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "apigateway_restapi_authorizers_enabled",
+ "apigateway_restapi_public",
+ "apigateway_restapi_public_with_authorizer",
+ "apigatewayv2_api_authorizers_enabled",
+ "awslambda_function_url_public",
+ "awslambda_function_not_publicly_accessible",
+ "ec2_securitygroup_allow_ingress_from_internet_to_all_ports",
+ "s3_bucket_public_access",
+ "s3_bucket_public_list_acl",
+ "s3_bucket_public_write_acl",
+ "s3_bucket_cross_account_access",
+ "s3_account_level_public_access_blocks",
+ "iam_policy_no_full_access_to_cloudtrail",
+ "iam_policy_no_full_access_to_kms",
+ "iam_inline_policy_no_full_access_to_cloudtrail",
+ "iam_inline_policy_no_full_access_to_kms",
+ "iam_role_administratoraccess_policy",
+ "iam_group_administrator_access_policy",
+ "iam_user_administrator_access_policy",
+ "iam_policy_attached_only_to_group_or_roles",
+ "iam_role_cross_account_readonlyaccess_policy",
+ "iam_role_cross_service_confused_deputy_prevention"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN05.AR02",
+ "Description": "When administrative access or configuration change is attempted on\nthe service or a child resource, the service MUST refuse requests\nfrom unauthorized entities.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN05 Prevent Access from Untrusted Entities",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that secure access controls enforce the principle of least\nprivilege to restrict access to authorized entities from explicitly\ntrusted sources only.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-01",
+ "DSP-07",
+ "DSP-08",
+ "DSP-10",
+ "DSP-17"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.3"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_root_mfa_enabled",
+ "iam_root_hardware_mfa_enabled",
+ "iam_avoid_root_usage",
+ "iam_user_mfa_enabled_console_access",
+ "iam_administrator_access_with_mfa",
+ "iam_group_administrator_access_policy",
+ "iam_role_administratoraccess_policy",
+ "iam_inline_policy_no_full_access_to_cloudtrail",
+ "iam_inline_policy_no_full_access_to_kms",
+ "iam_policy_no_full_access_to_cloudtrail",
+ "iam_policy_no_full_access_to_kms",
+ "iam_policy_allows_privilege_escalation",
+ "iam_inline_policy_allows_privilege_escalation",
+ "iam_customer_attached_policy_no_administrative_privileges",
+ "iam_customer_unattached_policy_no_administrative_privileges",
+ "iam_aws_attached_policy_no_administrative_privileges",
+ "iam_password_policy_minimum_length_14",
+ "iam_password_policy_uppercase",
+ "iam_password_policy_lowercase",
+ "iam_password_policy_symbol",
+ "iam_password_policy_number",
+ "iam_password_policy_expires_passwords_within_90_days_or_less",
+ "iam_password_policy_reuse_24",
+ "iam_check_saml_providers_sts",
+ "iam_policy_attached_only_to_group_or_roles"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN05.AR03",
+ "Description": "When administrative access or configuration change is attempted on\nthe service or a child resource in a multi-tenant environment, the\nservice MUST refuse requests across tenant boundaries unless the\norigin is explicitly included in a pre-approved allowlist.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN05 Prevent Access from Untrusted Entities",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that secure access controls enforce the principle of least\nprivilege to restrict access to authorized entities from explicitly\ntrusted sources only.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-01",
+ "DSP-07",
+ "DSP-08",
+ "DSP-10",
+ "DSP-17"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.3"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "vpc_endpoint_services_allowed_principals_trust_boundaries",
+ "vpc_endpoint_connections_trust_boundaries",
+ "iam_role_cross_service_confused_deputy_prevention",
+ "iam_role_cross_account_readonlyaccess_policy",
+ "s3_bucket_cross_account_access",
+ "eventbridge_bus_cross_account_access",
+ "eventbridge_schema_registry_cross_account_access"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN05.AR04",
+ "Description": "When data is requested from outside the trust perimeter, the\nservice MUST refuse requests from unauthorized entities.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "",
+ "SubSection": "CCC.Core.CN05 Prevent Access from Untrusted Entities",
+ "SubSectionObjective": "Ensure that secure access controls enforce the principle of least\nprivilege to restrict access to authorized entities from explicitly\ntrusted sources only.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-01",
+ "DSP-07",
+ "DSP-08",
+ "DSP-10",
+ "DSP-17"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.3"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "accessanalyzer_enabled",
+ "accessanalyzer_enabled_without_findings",
+ "vpc_endpoint_connections_trust_boundaries",
+ "vpc_endpoint_services_allowed_principals_trust_boundaries",
+ "s3_bucket_cross_account_access",
+ "s3_bucket_public_access",
+ "iam_administrator_access_with_mfa",
+ "iam_group_administrator_access_policy",
+ "iam_user_administrator_access_policy",
+ "iam_inline_policy_allows_privilege_escalation",
+ "iam_inline_policy_no_full_access_to_kms",
+ "iam_inline_policy_no_full_access_to_cloudtrail",
+ "iam_policy_no_full_access_to_kms",
+ "iam_policy_no_full_access_to_cloudtrail",
+ "iam_policy_attached_only_to_group_or_roles",
+ "iam_user_mfa_enabled_console_access"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN05.AR05",
+ "Description": "When any request is made from outside the trust perimeter,\nthe service MUST NOT provide any response that may indicate the\nservice exists.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN05 Prevent Access from Untrusted Entities",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that secure access controls enforce the principle of least\nprivilege to restrict access to authorized entities from explicitly\ntrusted sources only.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-01",
+ "DSP-07",
+ "DSP-08",
+ "DSP-10",
+ "DSP-17"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.3"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "awslambda_function_url_public",
+ "apigateway_restapi_public",
+ "apigateway_restapi_public_with_authorizer",
+ "s3_bucket_public_list_acl",
+ "s3_bucket_public_write_acl",
+ "s3_bucket_public_access",
+ "s3_bucket_policy_public_write_access",
+ "sns_topics_not_publicly_accessible",
+ "ec2_securitygroup_allow_ingress_from_internet_to_all_ports",
+ "ec2_networkacl_allow_ingress_any_port",
+ "ec2_networkacl_allow_ingress_tcp_port_22",
+ "ec2_networkacl_allow_ingress_tcp_port_3389",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22",
+ "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_3389",
+ "ec2_securitygroup_default_restrict_traffic",
+ "vpc_endpoint_services_allowed_principals_trust_boundaries",
+ "vpc_endpoint_connections_trust_boundaries",
+ "vpc_endpoint_for_ec2_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN05.AR06",
+ "Description": "When any request is made to the service or a child resource, the\nservice MUST refuse requests from unauthorized entities.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN05 Prevent Access from Untrusted Entities",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that secure access controls enforce the principle of least\nprivilege to restrict access to authorized entities from explicitly\ntrusted sources only.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-01",
+ "DSP-07",
+ "DSP-08",
+ "DSP-10",
+ "DSP-17"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.3"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "vpc_endpoint_connections_trust_boundaries",
+ "vpc_endpoint_services_allowed_principals_trust_boundaries",
+ "iam_role_cross_service_confused_deputy_prevention",
+ "iam_role_cross_account_readonlyaccess_policy",
+ "iam_policy_attached_only_to_group_or_roles",
+ "iam_group_administrator_access_policy",
+ "iam_user_mfa_enabled_console_access",
+ "iam_root_mfa_enabled",
+ "iam_root_hardware_mfa_enabled",
+ "iam_no_root_access_key",
+ "iam_administrator_access_with_mfa",
+ "iam_root_credentials_management_enabled",
+ "iam_check_saml_providers_sts",
+ "iam_user_hardware_mfa_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN04.AR01",
+ "Description": "When administrative access or configuration change is attempted on\nthe service or a child resource, the service MUST log the client\nidentity, time, and result of the attempt.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "The Logging & Monitoring control family ensures that access,\nchanges, and security-relevant events are captured, monitored,\nand alerted on in order to provide visibility, support\nincident response, and meet compliance requirements.\n",
+ "Section": "CCC.Core.CN04 Log All Access and Changes",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all access attempts are logged to maintain a detailed\naudit trail for security and compliance purposes.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.AE-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "LOG-08"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-2",
+ "AU-3",
+ "AU-12"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudtrail_multi_region_enabled",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_log_file_validation_enabled",
+ "awslambda_function_invoke_api_operations_cloudtrail_logging_enabled",
+ "cloudwatch_log_metric_filter_authentication_failures",
+ "cloudwatch_log_metric_filter_unauthorized_api_calls",
+ "cloudwatch_log_metric_filter_root_usage",
+ "cloudwatch_log_metric_filter_sign_in_without_mfa",
+ "cloudwatch_log_metric_filter_for_s3_bucket_policy_changes",
+ "cloudwatch_log_metric_filter_policy_changes",
+ "cloudwatch_log_metric_filter_security_group_changes",
+ "cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk",
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled",
+ "cloudwatch_changes_to_network_acls_alarm_configured",
+ "cloudwatch_changes_to_network_gateways_alarm_configured",
+ "cloudwatch_changes_to_network_route_tables_alarm_configured",
+ "cloudwatch_changes_to_vpcs_alarm_configured",
+ "vpc_flow_logs_enabled",
+ "apigateway_restapi_logging_enabled",
+ "apigatewayv2_api_access_logging_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN04.AR02",
+ "Description": "When any attempt is made to modify data on the service or a child\nresource, the service MUST log the client identity, time, and\nresult of the attempt.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "The Logging & Monitoring control family ensures that access,\nchanges, and security-relevant events are captured, monitored,\nand alerted on in order to provide visibility, support\nincident response, and meet compliance requirements.\n",
+ "Section": "CCC.Core.CN04 Log All Access and Changes",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all access attempts are logged to maintain a detailed\naudit trail for security and compliance purposes.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.AE-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "LOG-08"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-2",
+ "AU-3",
+ "AU-12"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudtrail_s3_dataevents_read_enabled",
+ "cloudtrail_s3_dataevents_write_enabled",
+ "awslambda_function_invoke_api_operations_cloudtrail_logging_enabled",
+ "cloudtrail_multi_region_enabled_logging_management_events",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "vpc_flow_logs_enabled",
+ "apigateway_restapi_logging_enabled",
+ "apigatewayv2_api_access_logging_enabled",
+ "cloudtrail_threat_detection_enumeration",
+ "cloudtrail_threat_detection_privilege_escalation",
+ "cloudtrail_threat_detection_llm_jacking"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN04.AR03",
+ "Description": "When any attempt is made to read data on the service or a child\nresource, the service MUST log the client identity, time, and\nresult of the attempt.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "The Logging & Monitoring control family ensures that access,\nchanges, and security-relevant events are captured, monitored,\nand alerted on in order to provide visibility, support\nincident response, and meet compliance requirements.\n",
+ "Section": "CCC.Core.CN04 Log All Access and Changes",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all access attempts are logged to maintain a detailed\naudit trail for security and compliance purposes.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.AE-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "LOG-08"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-2",
+ "AU-3",
+ "AU-12"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudtrail_insights_exist",
+ "cloudtrail_multi_region_enabled",
+ "cloudtrail_cloudwatch_logging_enabled",
+ "cloudtrail_kms_encryption_enabled",
+ "cloudtrail_log_file_validation_enabled",
+ "cloudtrail_logs_s3_bucket_is_not_publicly_accessible",
+ "cloudtrail_s3_dataevents_read_enabled",
+ "cloudtrail_s3_dataevents_write_enabled",
+ "cloudwatch_log_group_kms_encryption_enabled",
+ "cloudwatch_log_group_not_publicly_accessible",
+ "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled",
+ "cloudwatch_log_metric_filter_authentication_failures",
+ "apigateway_restapi_logging_enabled",
+ "apigatewayv2_api_access_logging_enabled",
+ "vpc_flow_logs_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN07.AR01",
+ "Description": "When enumeration activities are detected, the service MUST publish\nan event to a monitored channel which includes the client\nidentity, time, and nature of the activity.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "The Logging & Monitoring control family ensures that access,\nchanges, and security-relevant events are captured, monitored,\nand alerted on in order to provide visibility, support\nincident response, and meet compliance requirements.\n",
+ "Section": "CCC.Core.CN07 Alert on Unusual Enumeration Activity",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that logs and associated alerts are generated when\nunusual enumeration activity is detected that may indicate\nreconnaissance activities.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Implement event publication mechanisms and alerts for patterns\nindicative of enumeration activities, such as repeated access\nattempts, requests, or liveness probes. Configure alerts to notify\nsecurity teams of any activities that merit further investigation.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH15"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.AE-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "LOG-05",
+ "SEF-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudtrail_threat_detection_enumeration"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN07.AR02",
+ "Description": "When enumeration activities are detected, the service MUST log the\nclient identity, time, and nature of the activity.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "The Logging & Monitoring control family ensures that access,\nchanges, and security-relevant events are captured, monitored,\nand alerted on in order to provide visibility, support\nincident response, and meet compliance requirements.\n",
+ "Section": "CCC.Core.CN07 Alert on Unusual Enumeration Activity",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that logs and associated alerts are generated when\nunusual enumeration activity is detected that may indicate\nreconnaissance activities.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Implement logging mechanisms to capture details of enumeration\nactivities, including client identity, timestamps, and activity\nnature. Retain logs according to organizational policies, and\noccasionally review them for patterns that may indicate\nreconnaissance activities.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH15"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.AE-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "LOG-05",
+ "SEF-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudtrail_threat_detection_enumeration"
+ ]
+ }
+ ]
+}
diff --git a/prowler/compliance/aws/mitre_attack_aws.json b/prowler/compliance/aws/mitre_attack_aws.json
index 1a9018376f..e6bcad5870 100644
--- a/prowler/compliance/aws/mitre_attack_aws.json
+++ b/prowler/compliance/aws/mitre_attack_aws.json
@@ -469,7 +469,32 @@
"Description": "Adversaries may establish persistence and/or elevate privileges using system mechanisms that trigger execution based on specific events. Various operating systems have means to monitor and subscribe to events such as logons or other user activity such as running specific applications/binaries. Cloud environments may also support various functions and services that monitor and can be invoked in response to specific cloud events.",
"TechniqueURL": "https://attack.mitre.org/techniques/T1546/",
"Checks": [],
- "Attributes": []
+ "Attributes": [
+ {
+ "AWSService": "AWS CloudTrail",
+ "Category": "Detect",
+ "Value": "Significant",
+ "Comment": "AWS CloudTrail can detect attempts to establish event-triggered execution mechanisms by monitoring API calls related to EventBridge rules, Lambda function triggers, and CloudWatch Events. CloudTrail logs API calls such as PutRule, PutTargets, and CreateFunction that could indicate adversaries setting up persistence mechanisms. This provides significant detection capability for identifying suspicious event-driven execution patterns."
+ },
+ {
+ "AWSService": "Amazon GuardDuty",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Amazon GuardDuty can detect suspicious patterns related to event-triggered execution through findings like 'Stealth:IAMUser/CloudTrailLoggingDisabled' which may indicate attempts to hide event-driven persistence mechanisms. GuardDuty also monitors for unusual Lambda invocation patterns and suspicious EventBridge rule modifications. The coverage is partial as it focuses on known malicious patterns rather than all possible event-triggered execution methods."
+ },
+ {
+ "AWSService": "Amazon EventBridge",
+ "Category": "Protect",
+ "Value": "Minimal",
+ "Comment": "Amazon EventBridge can be configured with resource-based policies to restrict who can create rules and targets, providing some protection against unauthorized event-triggered execution mechanisms. However, this is scored as Minimal because EventBridge itself is a common target for adversaries to establish persistence, and protection relies heavily on proper IAM configuration."
+ },
+ {
+ "AWSService": "AWS Lambda",
+ "Category": "Protect",
+ "Value": "Minimal",
+ "Comment": "AWS Lambda can be protected through resource-based policies and execution role restrictions to limit unauthorized function invocations and trigger associations. However, the protection is Minimal as adversaries with sufficient IAM permissions can still establish event-triggered Lambda executions for persistence. Proper IAM and least privilege principles are critical but not always enforced."
+ }
+ ]
},
{
"Name": "Cloud Administration Command",
@@ -486,7 +511,32 @@
"Description": "Adversaries may abuse cloud management services to execute commands within virtual machines or hybrid-joined devices. Resources such as AWS Systems Manager, Azure RunCommand, and Runbooks allow users to remotely run scripts in virtual machines by leveraging installed virtual machine agents. Similarly, in Azure AD environments, Microsoft Endpoint Manager allows Global or Intune Administrators to run scripts as SYSTEM on on-premises devices joined to the Azure AD.",
"TechniqueURL": "https://attack.mitre.org/techniques/T1651/",
"Checks": [],
- "Attributes": []
+ "Attributes": [
+ {
+ "AWSService": "AWS Systems Manager",
+ "Category": "Protect",
+ "Value": "Partial",
+ "Comment": "AWS Systems Manager provides Session Manager and Run Command capabilities that can be protected through IAM policies and Session Manager logging. Organizations can restrict who can execute commands on EC2 instances and require session logging to S3 and CloudWatch. However, protection is Partial because authorized administrators with legitimate SSM access could potentially abuse these capabilities for malicious command execution."
+ },
+ {
+ "AWSService": "AWS CloudTrail",
+ "Category": "Detect",
+ "Value": "Significant",
+ "Comment": "AWS CloudTrail logs all Systems Manager API calls including SendCommand, StartSession, and other remote execution commands. These logs provide detailed information about who executed commands, on which instances, and when. This enables significant detection capability for identifying suspicious or unauthorized remote command execution attempts through Systems Manager services."
+ },
+ {
+ "AWSService": "Amazon GuardDuty",
+ "Category": "Detect",
+ "Value": "Minimal",
+ "Comment": "Amazon GuardDuty provides limited direct detection for Systems Manager command abuse. While it can detect unusual API call patterns and compromised credentials that might be used to execute remote commands, it doesn't specifically focus on Systems Manager Run Command or Session Manager abuse patterns. Coverage is Minimal and relies more on detecting underlying credential compromise."
+ },
+ {
+ "AWSService": "AWS Config",
+ "Category": "Protect",
+ "Value": "Minimal",
+ "Comment": "AWS Config can monitor Systems Manager configuration settings and ensure that Session Manager logging is enabled through custom Config rules. However, it provides only Minimal protection against command execution abuse since it focuses on configuration compliance rather than preventing unauthorized command execution in real-time."
+ }
+ ]
},
{
"Name": "Implant Internal Image",
@@ -651,7 +701,32 @@
"Checks": [
"organizations_scp_check_deny_regions"
],
- "Attributes": []
+ "Attributes": [
+ {
+ "AWSService": "AWS Organizations",
+ "Category": "Protect",
+ "Value": "Significant",
+ "Comment": "AWS Organizations Service Control Policies (SCPs) can effectively prevent resource creation in unused or unsupported regions by explicitly denying API calls to specific regions. This provides Significant protection as SCPs are enforced at the organizational level and cannot be bypassed by individual account permissions. The 'organizations_scp_check_deny_regions' check verifies this protection is in place."
+ },
+ {
+ "AWSService": "AWS CloudTrail",
+ "Category": "Detect",
+ "Value": "Significant",
+ "Comment": "AWS CloudTrail can be configured to log events across all regions, including unused ones, providing visibility into any resource creation or API activity in unexpected geographic regions. This enables Significant detection capability as CloudTrail captures the region information for all API calls, making it easy to identify and alert on activity in regions that should not be used."
+ },
+ {
+ "AWSService": "Amazon GuardDuty",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Amazon GuardDuty can detect unusual API call patterns and resource creation in unexpected regions when enabled across all regions. GuardDuty's threat intelligence and machine learning models can identify anomalous behavior in regions where activity is not typical for the organization. Coverage is Partial as it requires GuardDuty to be enabled in all regions and depends on baseline behavior patterns."
+ },
+ {
+ "AWSService": "AWS Config",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "AWS Config can be used to detect resources created in unused regions by aggregating configuration data from all regions and creating rules to alert on resources in unexpected locations. However, this is reactive detection after resources are already created, providing only Partial coverage. Config must be enabled in all regions to be effective for this technique."
+ }
+ ]
},
{
"Name": "Use Alternate Authentication Material",
@@ -843,7 +918,32 @@
"Description": "Adversaries may attempt to bypass multi-factor authentication (MFA) mechanisms and gain access to accounts by generating MFA requests sent to users.",
"TechniqueURL": "https://attack.mitre.org/techniques/T1621/",
"Checks": [],
- "Attributes": []
+ "Attributes": [
+ {
+ "AWSService": "AWS CloudTrail",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "AWS CloudTrail logs authentication events including MFA challenges and responses, which can be analyzed to detect MFA fatigue attacks or unusual patterns of repeated MFA requests. CloudTrail captures events like ConsoleLogin with MFA details, but detection requires correlation and analysis of authentication patterns over time. Coverage is Partial as it provides raw data but requires additional tooling to identify MFA bombing attempts."
+ },
+ {
+ "AWSService": "AWS IAM",
+ "Category": "Protect",
+ "Value": "Minimal",
+ "Comment": "AWS IAM supports MFA enforcement for users and roles, but provides Minimal direct protection against MFA fatigue attacks. While IAM can require MFA for authentication, it cannot inherently prevent adversaries from generating repeated MFA requests if they have valid credentials. Protection depends heavily on user awareness and proper MFA device configuration."
+ },
+ {
+ "AWSService": "Amazon GuardDuty",
+ "Category": "Detect",
+ "Value": "Minimal",
+ "Comment": "Amazon GuardDuty provides Minimal specific detection for MFA request generation attacks. While GuardDuty can detect credential compromise and unusual authentication patterns, it does not specifically identify MFA fatigue or bombing attacks where adversaries generate excessive MFA requests to tire users into approving them."
+ },
+ {
+ "AWSService": "AWS Security Hub",
+ "Category": "Detect",
+ "Value": "Minimal",
+ "Comment": "AWS Security Hub can aggregate findings related to authentication anomalies from various sources, but provides only Minimal direct detection of MFA request generation attacks. Security Hub relies on integrated services to detect authentication issues and does not natively analyze MFA request patterns or frequency to identify potential MFA fatigue attacks."
+ }
+ ]
},
{
"Name": "Network Sniffing",
@@ -1237,7 +1337,32 @@
"Description": "Adversaries may leverage information repositories to mine valuable information. Information repositories are tools that allow for storage of information, typically to facilitate collaboration or information sharing between users, and can store a wide variety of data that may aid adversaries in further objectives, or direct access to the target information. Adversaries may also abuse external sharing features to share sensitive documents with recipients outside of the organization.",
"TechniqueURL": "https://attack.mitre.org/techniques/T1213/",
"Checks": [],
- "Attributes": []
+ "Attributes": [
+ {
+ "AWSService": "AWS CloudTrail",
+ "Category": "Detect",
+ "Value": "Significant",
+ "Comment": "AWS CloudTrail logs all API calls to information repository services like S3 (GetObject, ListBucket), DynamoDB (Scan, Query), and other data services. This provides Significant detection capability for identifying unusual data access patterns, bulk downloads, or unauthorized access to sensitive information repositories. CloudTrail captures who accessed what data and when, enabling forensic analysis and anomaly detection."
+ },
+ {
+ "AWSService": "Amazon S3",
+ "Category": "Protect",
+ "Value": "Partial",
+ "Comment": "Amazon S3 provides bucket policies, access control lists (ACLs), and S3 Block Public Access to restrict unauthorized access to stored data. S3 also supports server-side encryption and versioning to protect data integrity. However, protection is Partial because properly configured access controls depend on correct implementation, and authorized users with legitimate access could still exfiltrate data."
+ },
+ {
+ "AWSService": "Amazon Macie",
+ "Category": "Detect",
+ "Value": "Significant",
+ "Comment": "Amazon Macie uses machine learning to automatically discover, classify, and protect sensitive data in S3 buckets. Macie can detect unusual data access patterns, identify sensitive data exposure, and alert on potential data mining activities. This provides Significant detection capability specifically designed for protecting information repositories against unauthorized access and data collection."
+ },
+ {
+ "AWSService": "Amazon GuardDuty",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Amazon GuardDuty can detect anomalous data access patterns through findings like 'Exfiltration:S3/AnomalousBehavior' and 'UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration'. GuardDuty monitors for unusual API call patterns that may indicate data collection from information repositories. Coverage is Partial as it focuses on known attack patterns and may not catch all forms of authorized but malicious data mining."
+ }
+ ]
},
{
"Name": "Data from Cloud Storage",
@@ -1257,7 +1382,32 @@
"Description": "Adversaries may stage collected data in a central location or directory prior to Exfiltration. Data may be kept in separate files or combined into one file through techniques such as Archive Collected Data. Interactive command shells may be used, and common functionality within cmd and bash may be used to copy data into a staging location.",
"TechniqueURL": "https://attack.mitre.org/techniques/T1074/",
"Checks": [],
- "Attributes": []
+ "Attributes": [
+ {
+ "AWSService": "Amazon S3",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Amazon S3 can be used to detect data staging activities through S3 Access Logs and CloudTrail data events. Monitoring for unusual patterns of PutObject, CopyObject, or bulk upload operations to S3 buckets can reveal data staging behavior. However, detection is Partial because adversaries may use legitimate S3 operations that are difficult to distinguish from normal business activities without additional context."
+ },
+ {
+ "AWSService": "AWS CloudTrail",
+ "Category": "Detect",
+ "Value": "Significant",
+ "Comment": "AWS CloudTrail provides Significant detection capability for data staging activities by logging all S3 API calls, EBS snapshot creation, and other data movement operations. CloudTrail captures details about data being copied, archived, or staged in AWS services. Analysis of CloudTrail logs can reveal suspicious patterns of data collection and staging, such as unusual volumes of data being copied to staging locations."
+ },
+ {
+ "AWSService": "Amazon GuardDuty",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Amazon GuardDuty can detect data staging activities through findings related to unusual data access patterns and suspicious S3 bucket activity. GuardDuty's 'Exfiltration:S3/AnomalousBehavior' finding can identify unusual data transfer patterns that may indicate staging. Coverage is Partial as GuardDuty focuses on known malicious patterns and may not detect all forms of data staging, especially if performed gradually."
+ },
+ {
+ "AWSService": "Amazon Macie",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Amazon Macie can help detect data staging by monitoring S3 for unusual data movement patterns and identifying when sensitive data is being aggregated in unexpected locations. Macie's data classification and anomaly detection can reveal when large amounts of sensitive data are being staged. However, coverage is Partial as Macie is S3-specific and may not detect staging in other AWS services or on EC2 instances."
+ }
+ ]
},
{
"Name": "Data Destruction",
@@ -2005,7 +2155,32 @@
"Description": "Adversaries may attempt to get a listing of network connections to or from the compromised system they are currently accessing or from remote systems by querying for information over the network.",
"TechniqueURL": "https://attack.mitre.org/techniques/T1049/",
"Checks": [],
- "Attributes": []
+ "Attributes": [
+ {
+ "AWSService": "AWS CloudTrail",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "AWS CloudTrail can detect API calls related to network discovery such as DescribeNetworkInterfaces, DescribeVpcs, DescribeSubnets, and DescribeSecurityGroups. These API calls may indicate adversaries attempting to map network topology. However, detection is Partial because CloudTrail logs API-level activities but cannot monitor commands executed within EC2 instances (like netstat, ss, or lsof) without additional agents."
+ },
+ {
+ "AWSService": "Amazon VPC Flow Logs",
+ "Category": "Detect",
+ "Value": "Minimal",
+ "Comment": "Amazon VPC Flow Logs capture information about IP traffic going to and from network interfaces in a VPC. While this can reveal network connection patterns, it provides only Minimal detection for network discovery activities as Flow Logs show actual network traffic rather than reconnaissance activities. Flow Logs are more useful for post-discovery analysis than detecting the discovery process itself."
+ },
+ {
+ "AWSService": "AWS Systems Manager",
+ "Category": "Detect",
+ "Value": "Minimal",
+ "Comment": "AWS Systems Manager Session Manager and Run Command can log commands executed on EC2 instances, potentially capturing network discovery commands like netstat or ss. However, this provides only Minimal detection as it requires proper configuration of session logging, and adversaries may use alternative methods to query network connections that bypass Systems Manager monitoring."
+ },
+ {
+ "AWSService": "Amazon GuardDuty",
+ "Category": "Detect",
+ "Value": "Minimal",
+ "Comment": "Amazon GuardDuty provides Minimal direct detection for network connection discovery activities. While GuardDuty can detect unusual API call patterns related to network enumeration, it focuses more on network-based threats and malicious traffic patterns rather than reconnaissance activities. Detection of network discovery requires correlation with other indicators of compromise."
+ }
+ ]
},
{
"Name": "System Location Discovery",
@@ -2023,7 +2198,32 @@
"Description": "Adversaries may gather information in an attempt to calculate the geographical location of a victim host. Adversaries may use the information from System Location Discovery during automated discovery to shape follow-on behaviors, including whether or not the adversary fully infects the target and/or attempts specific actions.",
"TechniqueURL": "https://attack.mitre.org/techniques/T1614/",
"Checks": [],
- "Attributes": []
+ "Attributes": [
+ {
+ "AWSService": "AWS CloudTrail",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "AWS CloudTrail logs API calls that reveal location information, such as DescribeRegions, DescribeAvailabilityZones, and EC2 metadata service queries. These API calls can indicate adversaries attempting to determine the geographic location of AWS resources. However, detection is Partial because CloudTrail cannot monitor instance-level commands that query location information (like curl to EC2 metadata service) without additional logging mechanisms."
+ },
+ {
+ "AWSService": "AWS Systems Manager",
+ "Category": "Detect",
+ "Value": "Minimal",
+ "Comment": "AWS Systems Manager can detect system location discovery if Session Manager logging is enabled and commands are executed through Systems Manager. Commands querying region, availability zone, or geolocation information can be logged. However, this provides Minimal detection as it requires proper configuration and adversaries often use direct methods like EC2 metadata service that bypass Systems Manager."
+ },
+ {
+ "AWSService": "Amazon GuardDuty",
+ "Category": "Detect",
+ "Value": "Minimal",
+ "Comment": "Amazon GuardDuty provides Minimal direct detection for system location discovery activities. GuardDuty focuses on detecting malicious network activity and compromised instances rather than reconnaissance queries about geographic location. Detection of location discovery would be indirect, potentially through identifying compromised instances that may be performing reconnaissance activities."
+ },
+ {
+ "AWSService": "Amazon VPC",
+ "Category": "Protect",
+ "Value": "Minimal",
+ "Comment": "Amazon VPC provides Minimal protection against system location discovery. While VPC configurations can restrict network access and limit exposure of metadata services through IMDSv2 requirements, adversaries with instance access can still query location information through AWS APIs and metadata services. VPC controls focus on network isolation rather than preventing location discovery."
+ }
+ ]
},
{
"Name": "System Information Discovery",
@@ -2042,7 +2242,32 @@
"Description": "An adversary may attempt to get detailed information about the operating system and hardware, including version, patches, hotfixes, service packs, and architecture. Adversaries may use the information from System Information Discovery during automated discovery to shape follow-on behaviors, including whether or not the adversary fully infects the target and/or attempts specific actions.",
"TechniqueURL": "https://attack.mitre.org/techniques/T1082/",
"Checks": [],
- "Attributes": []
+ "Attributes": [
+ {
+ "AWSService": "AWS CloudTrail",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "AWS CloudTrail logs API calls related to system information discovery such as DescribeInstances, DescribeInstanceTypes, DescribeImages, and DescribeInstanceAttribute. These API calls can reveal adversaries gathering information about EC2 instances, their configurations, and capabilities. However, detection is Partial as CloudTrail cannot monitor commands executed within instances (like uname, systeminfo, or hostnamectl) without additional logging agents."
+ },
+ {
+ "AWSService": "AWS Systems Manager",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "AWS Systems Manager Inventory and Session Manager can detect system information discovery when properly configured. Systems Manager Inventory automatically collects metadata about instances including OS version, installed applications, and configurations. Session Manager logging can capture reconnaissance commands. However, coverage is Partial as it requires Systems Manager Agent installation and adversaries may use alternative discovery methods."
+ },
+ {
+ "AWSService": "Amazon Inspector",
+ "Category": "Protect",
+ "Value": "Minimal",
+ "Comment": "Amazon Inspector assesses EC2 instances and container images for software vulnerabilities and network exposure, providing visibility into system configurations. While Inspector maintains an inventory of system information, it provides only Minimal protection against adversary discovery activities as Inspector focuses on vulnerability assessment rather than preventing reconnaissance. Inspector data could help defenders understand what information adversaries might discover."
+ },
+ {
+ "AWSService": "Amazon GuardDuty",
+ "Category": "Detect",
+ "Value": "Minimal",
+ "Comment": "Amazon GuardDuty provides Minimal direct detection for system information discovery activities. GuardDuty focuses on detecting malicious activities and compromised instances rather than reconnaissance commands. Detection would be indirect through identifying compromised instances that may be performing system enumeration as part of broader attack patterns."
+ }
+ ]
},
{
"Name": "Software Discovery",
@@ -2066,7 +2291,32 @@
"Description": "Adversaries may attempt to get a listing of software and software versions that are installed on a system or in a cloud environment. Adversaries may use the information from Software Discovery during automated discovery to shape follow-on behaviors, including whether or not the adversary fully infects the target and/or attempts specific actions.",
"TechniqueURL": "https://attack.mitre.org/techniques/T1518/",
"Checks": [],
- "Attributes": []
+ "Attributes": [
+ {
+ "AWSService": "AWS Systems Manager",
+ "Category": "Detect",
+ "Value": "Significant",
+ "Comment": "AWS Systems Manager Inventory provides Significant detection capability for software discovery activities by automatically collecting detailed information about installed applications, AWS components, and patches on managed instances. Systems Manager maintains a comprehensive inventory of software across EC2 instances and on-premises systems, making it possible to detect when adversaries query or enumerate installed software. Session Manager logging can also capture software enumeration commands."
+ },
+ {
+ "AWSService": "AWS CloudTrail",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "AWS CloudTrail logs API calls related to software and service discovery such as ListImages, DescribeImages, and GetInventory. These API calls can indicate adversaries attempting to enumerate software and configurations in the cloud environment. However, detection is Partial because CloudTrail cannot monitor instance-level software enumeration commands (like rpm, dpkg, or wmic) without additional agents or logging mechanisms."
+ },
+ {
+ "AWSService": "Amazon Inspector",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Amazon Inspector maintains an inventory of software packages and their versions as part of its vulnerability assessment process. This inventory can reveal what software adversaries might discover on systems. However, Inspector provides only Partial detection as it focuses on vulnerability scanning rather than detecting active software enumeration by adversaries. Inspector data is useful for understanding the software attack surface."
+ },
+ {
+ "AWSService": "Amazon GuardDuty",
+ "Category": "Detect",
+ "Value": "Minimal",
+ "Comment": "Amazon GuardDuty provides Minimal direct detection for software discovery activities. GuardDuty focuses on detecting malicious behavior and compromised resources rather than reconnaissance activities like software enumeration. Detection would be indirect, potentially identifying compromised instances that may be performing software discovery as part of broader attack patterns."
+ }
+ ]
},
{
"Name": "Permission Groups Discovery",
@@ -2091,7 +2341,32 @@
"Description": "Adversaries may attempt to discover group and permission settings. This information can help adversaries determine which user accounts and groups are available, the membership of users in particular groups, and which users and groups have elevated permissions.",
"TechniqueURL": "https://attack.mitre.org/techniques/T1069/",
"Checks": [],
- "Attributes": []
+ "Attributes": [
+ {
+ "AWSService": "AWS CloudTrail",
+ "Category": "Detect",
+ "Value": "Significant",
+ "Comment": "AWS CloudTrail provides Significant detection capability for permission and group discovery activities by logging all IAM API calls such as ListUsers, ListGroups, GetUser, GetGroup, ListGroupsForUser, GetPolicy, GetRolePolicy, and SimulatePrincipalPolicy. These API calls directly indicate adversaries enumerating users, groups, roles, and their permissions. CloudTrail captures comprehensive details about who performed the enumeration and when, enabling effective detection of reconnaissance activities."
+ },
+ {
+ "AWSService": "AWS IAM Access Analyzer",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "AWS IAM Access Analyzer can help detect unusual permission configurations and external access to resources, providing visibility into permissions that adversaries might discover. However, Access Analyzer provides only Partial detection for group discovery activities as it focuses on analyzing resource policies and external access rather than actively monitoring enumeration attempts. It's more useful for understanding what adversaries would find rather than detecting their discovery actions."
+ },
+ {
+ "AWSService": "Amazon GuardDuty",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Amazon GuardDuty can detect anomalous patterns of IAM enumeration through findings related to reconnaissance activities. GuardDuty identifies unusual API call patterns that may indicate permission and group discovery, particularly when performed by compromised credentials or from unusual locations. Coverage is Partial as GuardDuty focuses on anomalous behavior rather than all permission enumeration activities, which may be legitimate in many contexts."
+ },
+ {
+ "AWSService": "AWS IAM",
+ "Category": "Protect",
+ "Value": "Minimal",
+ "Comment": "AWS IAM provides Minimal protection against permission group discovery through permission boundaries and service control policies that can restrict enumeration capabilities. However, most users and roles require some level of permission to discover groups and permissions for legitimate operational purposes, making it difficult to prevent discovery without impacting normal operations. IAM focuses more on access control than preventing reconnaissance."
+ }
+ ]
}
]
}
diff --git a/prowler/compliance/azure/ccc_azure.json b/prowler/compliance/azure/ccc_azure.json
new file mode 100644
index 0000000000..efc2188406
--- /dev/null
+++ b/prowler/compliance/azure/ccc_azure.json
@@ -0,0 +1,8144 @@
+{
+ "Framework": "CCC",
+ "Version": "",
+ "Provider": "Azure",
+ "Name": "Common Cloud Controls Catalog (CCC)",
+ "Description": "Common Cloud Controls Catalog (CCC) for Azure",
+ "Requirements": [
+ {
+ "Id": "CCC.AuditLog.C01.TR01",
+ "Description": "When the signature validation process is performed, then it MUST detect any modification of data.",
+ "Attributes": [
+ {
+ "FamilyName": "Integrity",
+ "FamilyDescription": "Controls designed to protected the integrity of Audit Log data.",
+ "Section": "CCC.AuditLog.C01 Implement Digital Signatures With Hash Chaining",
+ "SubSection": "",
+ "SubSectionObjective": "Digital signatures allows for external verification of log data tampering and\nhash chaining allows for deleted log files to be detected.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "Ensure hash of data is included in digital signature.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06",
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-01"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.AuditLog.C01.TR02",
+ "Description": "When the signature validation process is performed, then it MUST detect any missing (deleted) log file.",
+ "Attributes": [
+ {
+ "FamilyName": "Integrity",
+ "FamilyDescription": "Controls designed to protected the integrity of Audit Log data.",
+ "Section": "CCC.AuditLog.C01 Implement Digital Signatures With Hash Chaining",
+ "SubSection": "",
+ "SubSectionObjective": "Digital signatures allows for external verification of log data tampering and\nhash chaining allows for deleted log files to be detected.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "Ensure verification process includes a chained hash function.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06",
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-01"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.AuditLog.C02.TR01",
+ "Description": "When a manual action is performed to generate each audit log type,\nthen the corresponding audit log type MUST be generated and recorded.",
+ "Attributes": [
+ {
+ "FamilyName": "Integrity",
+ "FamilyDescription": "Controls designed to protected the integrity of Audit Log data.",
+ "Section": "CCC.AuditLog.C02 Enable And Validate All Audit Log Types",
+ "SubSection": "",
+ "SubSectionObjective": "Review audit log configuration and ensure that all audit log types\nare being generated and replicated to configured sinks",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Review audit log configuration",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-2",
+ "AU-3",
+ "AU-12"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "monitor_diagnostic_settings_exists",
+ "monitor_diagnostic_setting_with_appropriate_categories",
+ "monitor_storage_account_with_activity_logs_is_private",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C03.TR01",
+ "Description": "When an attempt is made to disable a log source, then an alert MUST be generated.",
+ "Attributes": [
+ {
+ "FamilyName": "Integrity",
+ "FamilyDescription": "Controls designed to protected the integrity of Audit Log data.",
+ "Section": "CCC.AuditLog.C03 Alert On Audit Log Changes And Access",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that specific alerts have been configured to detect changes in\naudit log configuration such as disabling exporting of logs.\nAlerts MUST also be created to detect changes in retention/object lock policies\nfor exported data log sources/buckets.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Ensure alerting is correctly configured\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-5",
+ "AU-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "monitor_diagnostic_settings_exists",
+ "keyvault_logging_enabled",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted",
+ "monitor_storage_account_with_activity_logs_is_private"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C03.TR02",
+ "Description": "When an attempt is made to alter the retention or object lock status\nof an external data log source or bucket, then an alert MUST be generated.",
+ "Attributes": [
+ {
+ "FamilyName": "Integrity",
+ "FamilyDescription": "Controls designed to protected the integrity of Audit Log data.",
+ "Section": "CCC.AuditLog.C03 Alert On Audit Log Changes And Access",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that specific alerts have been configured to detect changes in\naudit log configuration such as disabling exporting of logs.\nAlerts MUST also be created to detect changes in retention/object lock policies\nfor exported data log sources/buckets.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Ensure alerting is correctly configured\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-5",
+ "AU-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "monitor_diagnostic_settings_exists",
+ "monitor_diagnostic_setting_with_appropriate_categories",
+ "monitor_storage_account_with_activity_logs_is_private",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted",
+ "monitor_alert_service_health_exists",
+ "monitor_alert_create_update_sqlserver_fr",
+ "monitor_alert_delete_nsg",
+ "monitor_alert_delete_public_ip_address_rule",
+ "monitor_alert_delete_security_solution",
+ "monitor_alert_create_update_nsg",
+ "monitor_alert_create_update_public_ip_address_rule",
+ "monitor_alert_create_update_security_solution",
+ "monitor_alert_create_policy_assignment",
+ "monitor_alert_delete_policy_assignment"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C04.TR01",
+ "Description": "When audit log buckets are created then verify that server access\nlogging MUST be enabled for the audit log bucket,\nwith logs delivered to a separate, secure logging bucket.",
+ "Attributes": [
+ {
+ "FamilyName": "Integrity",
+ "FamilyDescription": "Controls designed to protected the integrity of Audit Log data.",
+ "Section": "CCC.AuditLog.C04 Ensure Access Logging Is Enabled on the Audit Log Bucket",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that access logging is enabled for the audit log storage bucket to\ncapture all requests made to the bucket, providing an audit trail of data access.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Configure the audit log bucket to enable server access logging.\nEnsure the target logging bucket is configured for appropriate security,\nincluding restricted access and immutability.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01",
+ "CCC.TH09"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-2",
+ "AU-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "monitor_diagnostic_settings_exists",
+ "monitor_diagnostic_setting_with_appropriate_categories",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted",
+ "monitor_storage_account_with_activity_logs_is_private",
+ "storage_blob_public_access_level_is_disabled"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C05.TR01",
+ "Description": "When audit logs are exported, then audit logs MUST be present in the configured data location.",
+ "Attributes": [
+ {
+ "FamilyName": "Availability",
+ "FamilyDescription": "Controls designed to protected the availability of Audit Log data.",
+ "Section": "CCC.AuditLog.C05 Export Audit Logs To Bucket",
+ "SubSection": "",
+ "SubSectionObjective": "Configure audit logs to be sent to a external bucket where they can be globally replicated\nand can be subject to greater access control and data retention polices.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Configure audit log exporting.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9",
+ "AU-11",
+ "AU-4"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "monitor_diagnostic_settings_exists",
+ "monitor_diagnostic_setting_with_appropriate_categories",
+ "monitor_storage_account_with_activity_logs_is_private",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C06.TR01",
+ "Description": "When the retention policy is applied, then data MUST\nbe automatically deleted after the configured number of days.",
+ "Attributes": [
+ {
+ "FamilyName": "Availability",
+ "FamilyDescription": "Controls designed to protected the availability of Audit Log data.",
+ "Section": "CCC.AuditLog.C06 Enforce Retention Policy on Audit Log Bucket",
+ "SubSection": "",
+ "SubSectionObjective": "Configure a custom retention policy on the designated audit log bucket to ensure that logs are\nretained for the correct number of days as defined by your organization's policy.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green"
+ ],
+ "Recommendation": "Configure the audit log bucket's lifecycle rules or object retention settings to enforce\nthe required data retention period.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06",
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9",
+ "AU-11"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "storage_ensure_soft_delete_is_enabled",
+ "monitor_diagnostic_settings_exists"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C07.TR01",
+ "Description": "When a standard file deletion is attempted on an object within\nthe audit log bucket, then it MUST be prevented unless MFA is provided.",
+ "Attributes": [
+ {
+ "FamilyName": "Availability",
+ "FamilyDescription": "Controls designed to protected the availability of Audit Log data.",
+ "Section": "CCC.AuditLog.C07 Enforce MFA Delete on Audit Log Bucket",
+ "SubSection": "",
+ "SubSectionObjective": "Enable Multi-Factor Authentication (MFA) delete on the audit log bucket to\nprovide greater protection against accidental or malicious deletion of audit data.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green"
+ ],
+ "Recommendation": "Enable MFA Delete (or equivalent multi-factor authentication for delete operations)\non the audit log bucket.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06",
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9",
+ "AU-11"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.AuditLog.C08.TR01",
+ "Description": "When an attempt is made to delete data before the object\nlock period expires, then the deletion MUST be denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Availability",
+ "FamilyDescription": "Controls designed to protected the availability of Audit Log data.",
+ "Section": "CCC.AuditLog.C08 Enable Object Lock On Audit Log Bucket",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that object log is enabled globally on all objects with the bucket.\nThe lock time MUST be configured to meet your organization, legal and compliance goals.\nDeletion attempts before the lock period MUST be denied.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Configure object lock policy.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9",
+ "AU-11"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "storage_ensure_soft_delete_is_enabled",
+ "monitor_diagnostic_settings_exists",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted",
+ "monitor_storage_account_with_activity_logs_is_private"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C09.TR01",
+ "Description": "When restricted fields are accessed by unauthorized users, then those fields MUST remain masked.",
+ "Attributes": [
+ {
+ "FamilyName": "Confidentiality",
+ "FamilyDescription": "Controls designed to protected the confidentiality of Audit Log data.",
+ "Section": "CCC.AuditLog.C09 Restrict Field And Log Type Access",
+ "SubSection": "",
+ "SubSectionObjective": "Configure access to audit logs to follow the principle of least privilege in particular where technically\npossible limit the log fields users have access to to prevent accidental exposure to sensitive\ninformation such as PII.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Review field level access controls on audit data.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6",
+ "AU-9",
+ "AC-3",
+ "PT-2",
+ "PT-3",
+ "PT-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "monitor_storage_account_with_activity_logs_cmk_encrypted",
+ "monitor_storage_account_with_activity_logs_is_private",
+ "monitor_diagnostic_settings_exists"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C10.TR01",
+ "Description": "When audit log storage bucket's are created then, bucket's access control settings MUST explicitly deny\npublic read and write access.",
+ "Attributes": [
+ {
+ "FamilyName": "Confidentiality",
+ "FamilyDescription": "Controls designed to protected the confidentiality of Audit Log data.",
+ "Section": "CCC.AuditLog.C10 Ensure Audit Bucket is Not Publicly Accessible",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that audit log storage buckets are not publicly accessible to prevent\nunauthorized exposure of sensitive log data.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green"
+ ],
+ "Recommendation": "Configure bucket policies and access control lists (ACLs) to restrict public access.\nRegularly review bucket permissions to ensure no public access has been inadvertently granted.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AA-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "storage_blob_public_access_level_is_disabled",
+ "monitor_storage_account_with_activity_logs_is_private",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted",
+ "storage_ensure_private_endpoints_in_storage_accounts"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C10.TR02",
+ "Description": "When the URL of a audit log storage bucket's object is accessed publicly then,\nit should be denied by bucket policy.",
+ "Attributes": [
+ {
+ "FamilyName": "Confidentiality",
+ "FamilyDescription": "Controls designed to protected the confidentiality of Audit Log data.",
+ "Section": "CCC.AuditLog.C10 Ensure Audit Bucket is Not Publicly Accessible",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that audit log storage buckets are not publicly accessible to prevent\nunauthorized exposure of sensitive log data.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green"
+ ],
+ "Recommendation": "Configure bucket policies and access control lists (ACLs) to restrict public access.\nRegularly review bucket permissions to ensure no public access has been inadvertently granted.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AA-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "storage_blob_public_access_level_is_disabled",
+ "storage_default_network_access_rule_is_denied",
+ "storage_ensure_private_endpoints_in_storage_accounts",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted",
+ "monitor_storage_account_with_activity_logs_is_private"
+ ]
+ },
+ {
+ "Id": "CCC.Build.C01.TR01",
+ "Description": "Attempt to initiate a build using an unauthorized build agent and verify that the build is rejected.",
+ "Attributes": [
+ {
+ "FamilyName": "Access Control",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.Build.C01 Restrict Allowed Build Agents",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that builds are executed only on authorized build agents to maintain\ncontrol over the build environment and prevent unauthorized code execution.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Build.C02.TR01",
+ "Description": "Attempt to trigger a build from an unauthorized external service or\nrepository and verify that the build does not start.",
+ "Attributes": [
+ {
+ "FamilyName": "Access Control",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.Build.C02 Restrict Allowed External Services for Build Triggers",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that builds can only be triggered by authorized external services or\nrepositories to prevent unauthorized code execution or tampering.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Build.C03.TR01",
+ "Description": "Attempt to access the build environment from an external network and verify that access is denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.Build.C03 Deny External Network Access for Build Environments",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that build environments do not have external network access to\nprevent unauthorized external access and data exfiltration.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH02",
+ "CCC.TH05"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-5"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-7",
+ "SC-5"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "aks_clusters_public_access_disabled",
+ "containerregistry_not_publicly_accessible",
+ "containerregistry_uses_private_link",
+ "app_function_not_publicly_accessible",
+ "network_http_internet_access_restricted",
+ "network_rdp_internet_access_restricted",
+ "network_ssh_internet_access_restricted",
+ "network_udp_internet_access_restricted"
+ ]
+ },
+ {
+ "Id": "CCC.CntrReg.C01.TR01",
+ "Description": "Attempt to push an artifact with known vulnerabilities to the registry\nand observe if it is flagged or rejected by the vulnerability scanning process.",
+ "Attributes": [
+ {
+ "FamilyName": "Risk Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.CntrReg.C01 Implement Vulnerability Scanning for Artifacts",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that container images and artifacts stored in the container registry are scanned for\nvulnerabilities to identify and remediate security issues before deployment.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.CntrReg.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "ID.RA-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "RA-5",
+ "SI-5"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "defender_container_images_scan_enabled",
+ "defender_container_images_resolved_vulnerabilities"
+ ]
+ },
+ {
+ "Id": "CCC.CntrReg.C02.TR01",
+ "Description": "Confirm that artifacts older than the specified retention period are automatically\ndeleted from the registry.",
+ "Attributes": [
+ {
+ "FamilyName": "Data Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.CntrReg.C02 Implement Cleanup Policies for Artifacts",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that unused or outdated artifacts are cleaned up according to defined policies to\nmanage storage effectively and reduce security risks associated with outdated versions.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH14"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.IP-6"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SI-12"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "containerregistry_not_publicly_accessible",
+ "containerregistry_uses_private_link",
+ "containerregistry_admin_user_disabled"
+ ]
+ },
+ {
+ "Id": "CCC.DataWar.C01.TR01",
+ "Description": "Attempt to access underlying database tables directly without\nusing managed views and verify that access is denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.DataWar.C01 Enforce Use of Managed Views for Data Access",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that data access is provided through managed views, restricting users\nfrom accessing underlying tables directly and enforcing consistent security policies.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.DataWar.C02.TR01",
+ "Description": "Attempt to query sensitive columns without the necessary permissions and\nverify that access is denied or data is masked.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.DataWar.C02 Enforce Column-Level Security Policies",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that access to sensitive data columns is restricted based on user roles,\npreventing unauthorized access to sensitive information.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.DataWar.C03.TR01",
+ "Description": "Attempt to query data rows that the user should not have access to and verify\nthat access is denied or data is not returned.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.DataWar.C03 Enforce Row-Level Security Policies",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that access to data rows is restricted based on user roles or attributes,\npreventing unauthorized access to specific subsets of data.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cosmosdb_account_use_aad_and_rbac",
+ "cosmosdb_account_firewall_use_selected_networks",
+ "cosmosdb_account_use_private_endpoints",
+ "sqlserver_unrestricted_inbound_access",
+ "postgresql_flexible_server_allow_access_services_disabled"
+ ]
+ },
+ {
+ "Id": "CCC.GenAI.C01.TR01",
+ "Description": "Untrusted input such as user queries, RAG data or tool output\nMUST be validated before it is passed to a GenAI model.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C01 Model Input Filtering and Sanitisation",
+ "SubSection": "",
+ "SubSectionObjective": "Inspect and validate input before it is passed to a GenAI\nmodel in order to filter or sanitise adversarial queries\nand prevent sensitive data leakage.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH01",
+ "CCC.GenAI.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-003",
+ "AIR-PREV-017",
+ "AIR-PREV-002",
+ "AIR-DET-001"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Input Validation and Sanitization"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0020",
+ "AML.M0021",
+ "AML.M0015"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.GenAI.C01.TR02",
+ "Description": "If malicious patterns such as prompt injection or sensitive\ndata are detected during input validation, the input MUST\nbe blocked or sanitised.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C01 Model Input Filtering and Sanitisation",
+ "SubSection": "",
+ "SubSectionObjective": "Inspect and validate input before it is passed to a GenAI\nmodel in order to filter or sanitise adversarial queries\nand prevent sensitive data leakage.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH01",
+ "CCC.GenAI.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-003",
+ "AIR-PREV-017",
+ "AIR-PREV-002",
+ "AIR-DET-001"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Input Validation and Sanitization"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0020",
+ "AML.M0021",
+ "AML.M0015"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.GenAI.C02.TR01",
+ "Description": "GenAI model output MUST be validated for format conformance,\nmalicious patterns, sensitive data and inapropriate content\nbefore being passed to users, application or plugins.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C02 Model Output Filtering and Sanitisation",
+ "SubSection": "",
+ "SubSectionObjective": "Inspect and validate GenAI model output before passing it to\nusers, applications or plugins in order to filter or sanitise\ninsecure or unreliable output and prevent sensitive data leakage.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH01",
+ "CCC.GenAI.TH03",
+ "CCC.GenAI.TH04",
+ "CCC.GenAI.TH05",
+ "CCC.GenAI.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-003",
+ "AIR-PREV-017",
+ "AIR-PREV-002",
+ "AIR-DET-001"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Output Validation and Sanitization"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0020",
+ "AML.M0002"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.GenAI.C02.TR02",
+ "Description": "In the event of policy violations, the AI-generated content MUST\nbe redacted, encoded or rejected.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C02 Model Output Filtering and Sanitisation",
+ "SubSection": "",
+ "SubSectionObjective": "Inspect and validate GenAI model output before passing it to\nusers, applications or plugins in order to filter or sanitise\ninsecure or unreliable output and prevent sensitive data leakage.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH01",
+ "CCC.GenAI.TH03",
+ "CCC.GenAI.TH04",
+ "CCC.GenAI.TH05",
+ "CCC.GenAI.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-003",
+ "AIR-PREV-017",
+ "AIR-PREV-002",
+ "AIR-DET-001"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Output Validation and Sanitization"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0020",
+ "AML.M0002"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "apim_threat_detection_llm_jacking"
+ ]
+ },
+ {
+ "Id": "CCC.GenAI.C03.TR01",
+ "Description": "When data is designated for model training or RAG ingestion, then its\nsource MUST be explicitly approved and its provenance documented.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C03 Data Provenance and Source Vetting",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all data for training, fine-tuning or RAG comes\nfrom trusted, approved sources and is authorised for the\nintended purposes in order to prevent the initial introduction\nof malicious content or leaked sensitive data.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH02",
+ "CCC.GenAI.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-006"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Training Data Management"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0025"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.GenAI.C03.TR02",
+ "Description": "Data from unvetted sources MUST NOT be used in production systems.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C03 Data Provenance and Source Vetting",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all data for training, fine-tuning or RAG comes\nfrom trusted, approved sources and is authorised for the\nintended purposes in order to prevent the initial introduction\nof malicious content or leaked sensitive data.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH02",
+ "CCC.GenAI.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-006"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Training Data Management"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0025"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.GenAI.C04.TR01",
+ "Description": "When data is ingested for training, fine-tuning or conversion\nto vector embeddings, it MUST be validated for sensitive\ninformation or malicious content.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C04 Sanitisation of Ingested Data",
+ "SubSection": "",
+ "SubSectionObjective": "Validate and sanitise all data ingested by GenAI systems\nfrom extenal sources or internal knowledge bases, whether\nfor training, conversion to vector embeddings, or real-time\nretireval, in order to remove or redact poisoned or sensitive\ndata before further processing.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH02",
+ "CCC.GenAI.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-002"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Training Data Sanitization"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0007"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.GenAI.C04.TR02",
+ "Description": "If sensitive data or malicious content is detected, it must\nbe rejected, redacted or flagged for manual review.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C04 Sanitisation of Ingested Data",
+ "SubSection": "",
+ "SubSectionObjective": "Validate and sanitise all data ingested by GenAI systems\nfrom extenal sources or internal knowledge bases, whether\nfor training, conversion to vector embeddings, or real-time\nretireval, in order to remove or redact poisoned or sensitive\ndata before further processing.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH02",
+ "CCC.GenAI.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-002"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Training Data Sanitization"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0007"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.GenAI.C05.TR01",
+ "Description": "When a RAG-enabled system generates a response containing information\nretrieved from its knowledge base, then the response MUST include a\nverifiable citation that links back to the specific source document.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C05 Citations and Source Traceability",
+ "SubSection": "",
+ "SubSectionObjective": "Require the GenAI system to provide citations or direct links\nback to the source documents used to generate a response, in\nto enhance the transparency, trustworthiness, and verifiability\nof AI-generated content.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH09",
+ "CCC.GenAI.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-DET-013"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "monitor_diagnostic_settings_exists",
+ "monitor_diagnostic_setting_with_appropriate_categories",
+ "keyvault_logging_enabled",
+ "app_http_logs_enabled",
+ "app_function_application_insights_enabled",
+ "appinsights_ensure_is_configured",
+ "monitor_alert_service_health_exists",
+ "sqlserver_auditing_enabled",
+ "sqlserver_auditing_retention_90_days",
+ "mysql_flexible_server_audit_log_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.GenAI.C06.TR01",
+ "Description": "When an LLM invokes an external tool (e.g., an API, a plugin),\nthen the tool MUST operate with the least privileges required\nfor performing its intended functionality.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.GenAI.C06 Least Privilege for Plugins",
+ "SubSection": "",
+ "SubSectionObjective": "Restricts the permissions of any external tools the GenAI system\ncan call to limit the potential damage if an agent is coerced\nto perform unintended actions or vulnerabilities in the tools\nare exploited.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH07",
+ "CCC.GenAI.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Agent Permissions"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_custom_role_has_permissions_to_administer_resource_locks",
+ "iam_subscription_roles_owner_custom_not_created",
+ "iam_role_user_access_admin_restricted",
+ "app_function_identity_without_admin_privileges",
+ "app_function_identity_is_configured",
+ "cosmosdb_account_use_aad_and_rbac"
+ ]
+ },
+ {
+ "Id": "CCC.GenAI.C07.TR01",
+ "Description": "When an application makes an API call to a foundational model in a\nproduction environment, then it MUST specify an explicit version\nidentifier.",
+ "Attributes": [
+ {
+ "FamilyName": "Configuration Management",
+ "FamilyDescription": "The Configuration Management control family involves establishing,\nmaintaining and monitoring the configuration of the service and\nrelated applications and infrastructure to ensure consistency,\nsecure defaults and compliance.\n",
+ "Section": "CCC.GenAI.C07 Model Version Pinning",
+ "SubSection": "",
+ "SubSectionObjective": "Mandate that applications are locked (\"pinned\") to a specific,\ntested version of a foundational model to prevent unexpected\nbehaviour changes introduced by provider-side updates.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH10"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-010"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.GenAI.C08.TR01",
+ "Description": "When a new AI model is considered for production deployment, it\nMUST undergo a formal red teaming and quality assurance review.",
+ "Attributes": [
+ {
+ "FamilyName": "Model Assurance and Evaluation",
+ "FamilyDescription": "The Model Assurance and Evaluation control family encompasses\nthe proactiveand continuous processes of testing and validating\nthe AI model's behavior to ensure it aligns with safety, ethical,\nand quality standards.\n",
+ "Section": "CCC.GenAI.C08 Quality Control and Red Teaming",
+ "SubSection": "",
+ "SubSectionObjective": "Establish a formal program for quality evaluation and adversarial\ntesting (red teaming) to ensure GenAI system meet all business,\nquality, security and compliance requirements before getting deployed\ninto production environments.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH01",
+ "CCC.GenAI.TH02",
+ "CCC.GenAI.TH04",
+ "CCC.GenAI.TH08",
+ "CCC.GenAI.TH10"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-005"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Adversarial Training and Testing",
+ "Red Teaming",
+ "Product Governance"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0008"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "apim_threat_detection_llm_jacking"
+ ]
+ },
+ {
+ "Id": "CCC.GenAI.C08.TR02",
+ "Description": "If model quality review or red teaming identifies an issue that exceeds\nthe organization's risk tolerance, the model MUST NOT be deployed until\nthe issue is remediated.",
+ "Attributes": [
+ {
+ "FamilyName": "Model Assurance and Evaluation",
+ "FamilyDescription": "The Model Assurance and Evaluation control family encompasses\nthe proactiveand continuous processes of testing and validating\nthe AI model's behavior to ensure it aligns with safety, ethical,\nand quality standards.\n",
+ "Section": "CCC.GenAI.C08 Quality Control and Red Teaming",
+ "SubSection": "",
+ "SubSectionObjective": "Establish a formal program for quality evaluation and adversarial\ntesting (red teaming) to ensure GenAI system meet all business,\nquality, security and compliance requirements before getting deployed\ninto production environments.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH01",
+ "CCC.GenAI.TH02",
+ "CCC.GenAI.TH04",
+ "CCC.GenAI.TH08",
+ "CCC.GenAI.TH10"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-005"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Adversarial Training and Testing",
+ "Red Teaming",
+ "Product Governance"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0008"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "apim_threat_detection_llm_jacking"
+ ]
+ },
+ {
+ "Id": "CCC.KeyMgmt.C01.TR01",
+ "Description": "When a key version is scheduled for deletion or disabled, an\nalert MUST be generated within five minutes.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging and Metrics Publication",
+ "FamilyDescription": "Controls that collect, alert, and retain key-management events.",
+ "Section": "CCC.KeyMgmt.C01 Alert on Key-version Changes",
+ "SubSection": "",
+ "SubSectionObjective": "Generate near-real-time alerts when a KMS key version is disabled or scheduled for deletion, enabling rapid investigation and recovery.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Use native event services (e.g., CloudWatch Events, Azure Monitor, Cloud Audit Logs) to route notifications to an incident-response channel.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.KeyMgmt.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "RS.AN-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "IR-5"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "keyvault_logging_enabled",
+ "monitor_diagnostic_settings_exists",
+ "monitor_alert_create_update_nsg",
+ "monitor_alert_create_update_public_ip_address_rule",
+ "monitor_alert_create_update_security_solution",
+ "monitor_alert_create_policy_assignment",
+ "monitor_alert_service_health_exists"
+ ]
+ },
+ {
+ "Id": "CCC.KeyMgmt.C02.TR01",
+ "Description": "When IAM roles and key policies are reviewed, Decrypt permission\nMUST be granted exclusively to documented authorised principals.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls that enforce least-privilege use of KMS operations.",
+ "Section": "CCC.KeyMgmt.C02 Limit Decrypt Permissions",
+ "SubSection": "",
+ "SubSectionObjective": "Restrict the Decrypt operation to authorised principals only, applying the principle of least privilege to protect sensitive data.",
+ "Applicability": [
+ "tlp-green"
+ ],
+ "Recommendation": "Periodically audit policy documents via automated tooling and report any deviations.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.KeyMgmt.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "keyvault_rbac_enabled",
+ "keyvault_rbac_key_expiration_set",
+ "keyvault_rbac_secret_expiration_set",
+ "keyvault_key_expiration_set_in_non_rbac"
+ ]
+ },
+ {
+ "Id": "CCC.KeyMgmt.C03.TR01",
+ "Description": "When rotation settings are examined, rotation MUST be enabled with\nan interval not exceeding 365 days.",
+ "Attributes": [
+ {
+ "FamilyName": "Key Lifecycle Management",
+ "FamilyDescription": "Controls that govern creation, rotation, import, and retirement of cryptographic keys.",
+ "Section": "CCC.KeyMgmt.C03 Enforce Automatic Rotation",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure symmetric keys rotate automatically within policy intervals to reduce exposure of key material.",
+ "Applicability": [
+ "tlp-green"
+ ],
+ "Recommendation": "Use cloud-provider rotation features and verify via configuration scanning.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.KeyMgmt.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "keyvault_key_rotation_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.KeyMgmt.C04.TR01",
+ "Description": "When a key import request is processed, the key MUST use an\napproved algorithm (RSA-2048+, EC-P256+) and originate from a\ncertified HSM.",
+ "Attributes": [
+ {
+ "FamilyName": "Key Lifecycle Management",
+ "FamilyDescription": "Controls that govern creation, rotation, import, and retirement of cryptographic keys.",
+ "Section": "CCC.KeyMgmt.C04 Validate Imported Keys",
+ "SubSection": "",
+ "SubSectionObjective": "Accept only externally generated keys that meet approved cryptographic strength and provenance requirements.",
+ "Applicability": [
+ "tlp-green"
+ ],
+ "Recommendation": "Implement an approval workflow that validates attestation data before import.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.KeyMgmt.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "keyvault_key_rotation_enabled",
+ "keyvault_rbac_enabled",
+ "keyvault_key_expiration_set_in_non_rbac",
+ "keyvault_rbac_key_expiration_set",
+ "keyvault_rbac_secret_expiration_set",
+ "keyvault_private_endpoints",
+ "keyvault_access_only_through_private_endpoints",
+ "keyvault_recoverable",
+ "keyvault_logging_enabled",
+ "keyvault_non_rbac_secret_expiration_set"
+ ]
+ },
+ {
+ "Id": "CCC.LB.C01.TR01",
+ "Description": "When a single client sends more than 2000 requests within any\n5-minute sliding window, the load balancer MUST throttle all\nsubsequent requests from that client for at least 60 seconds.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "Controls that detect anomalous traffic and record load-balancer activity.\n",
+ "Section": "CCC.LB.C01 Enforce and Detect Rate Limiting",
+ "SubSection": "",
+ "SubSectionObjective": "Detect and throttle malicious or excessive requests to prevent downstream resource exhaustion and brute-force activity.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Implement per-IP token-bucket limits with and verify via\nsynthetic traffic tests.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.LB.TH01",
+ "CCC.LB.TH09"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-1",
+ "PR.AC-7",
+ "PR.PT-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-6",
+ "SC-5",
+ "AC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.LB.C01.TR02",
+ "Description": "When throttling is invoked, the load balancer MUST\nrecord the event in the access log within 5 minutes\nfor alerting and trend analysis.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "Controls that detect anomalous traffic and record load-balancer activity.\n",
+ "Section": "CCC.LB.C01 Enforce and Detect Rate Limiting",
+ "SubSection": "",
+ "SubSectionObjective": "Detect and throttle malicious or excessive requests to prevent downstream resource exhaustion and brute-force activity.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Enable access logging and configure metric filters\non HTTP 429 counts to trigger alerts.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.LB.TH01",
+ "CCC.LB.TH09"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-1",
+ "PR.AC-7",
+ "PR.PT-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-6",
+ "SC-5",
+ "AC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "monitor_diagnostic_settings_exists",
+ "monitor_diagnostic_setting_with_appropriate_categories",
+ "network_flow_log_captured_sent",
+ "network_watcher_enabled",
+ "monitor_storage_account_with_activity_logs_is_private",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted"
+ ]
+ },
+ {
+ "Id": "CCC.LB.C06.TR01",
+ "Description": "When more than 10 percent of targets change from healthy to\nunhealthy within five minutes, an alert MUST be issued.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "Controls that detect anomalous traffic and record load-balancer activity.\n",
+ "Section": "CCC.LB.C06 Secure Health-Check Telemetry",
+ "SubSection": "",
+ "SubSectionObjective": "Monitor health-check endpoints for tampering and alert on\nabnormal status changes.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Instrument metrics for health check results and target\nremoval events. Configure monitoring alarms to alert\non abnormal spikes in unhealthy targets.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.LB.TH05"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.AE-2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SI-4"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "monitor_diagnostic_settings_exists",
+ "monitor_diagnostic_setting_with_appropriate_categories",
+ "monitor_alert_service_health_exists",
+ "monitor_alert_create_update_nsg",
+ "monitor_alert_create_update_public_ip_address_rule",
+ "monitor_alert_create_update_security_solution",
+ "monitor_alert_create_policy_assignment",
+ "network_flow_log_captured_sent",
+ "network_watcher_enabled",
+ "vm_scaleset_associated_with_load_balancer"
+ ]
+ },
+ {
+ "Id": "CCC.LB.C04.TR01",
+ "Description": "When routing weights change, the request MUST originate\nfrom an explicitly defined and trusted identity and MUST\nbe logged.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls that restrict who can change or query load-balancer resources.\n",
+ "Section": "CCC.LB.C04 Enforce Distribution Policies",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure traffic-splitting weights and algorithms are modified\nonly by trusted identities.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Define a list of trusted principals allowed to modify\nrouting configurations. Enforce via conditional access\npolicies, and log changes using audit logging.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.LB.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "monitor_diagnostic_settings_exists",
+ "monitor_alert_create_update_public_ip_address_rule",
+ "monitor_alert_create_update_nsg",
+ "monitor_alert_create_policy_assignment",
+ "monitor_alert_create_update_security_solution",
+ "entra_global_admin_in_less_than_five_users",
+ "entra_non_privileged_user_has_mfa",
+ "iam_role_user_access_admin_restricted",
+ "iam_custom_role_has_permissions_to_administer_resource_locks"
+ ]
+ },
+ {
+ "Id": "CCC.LB.C05.TR01",
+ "Description": "When stickiness is enabled, session cookies MUST expire\nwithin 30 minutes of inactivity.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls that restrict who can change or query load-balancer resources.\n",
+ "Section": "CCC.LB.C05 Validate Session Affinity",
+ "SubSection": "",
+ "SubSectionObjective": "Configure session persistence to minimise fixation and hijacking\nrisks.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Audit CCC.LB.F15 parameters via configuration scans.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.LB.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-7"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-23"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_role_user_access_admin_restricted",
+ "iam_subscription_roles_owner_custom_not_created",
+ "iam_custom_role_has_permissions_to_administer_resource_locks"
+ ]
+ },
+ {
+ "Id": "CCC.LB.C09.TR01",
+ "Description": "When an API call originates outside the approved CIDR\nset, the request MUST be denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls that restrict who can change or query load-balancer resources.\n",
+ "Section": "CCC.LB.C09 Restrict Management API Access",
+ "SubSection": "",
+ "SubSectionObjective": "Limit load-balancer API calls to authorised identities and\ntrusted networks.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Combine VPC endpoints with IAM condition-key filters for protected APIs.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.LB.TH08"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-5"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "entra_conditional_access_policy_require_mfa_for_management_api",
+ "entra_global_admin_in_less_than_five_users",
+ "entra_privileged_user_has_mfa",
+ "iam_role_user_access_admin_restricted",
+ "iam_custom_role_has_permissions_to_administer_resource_locks"
+ ]
+ },
+ {
+ "Id": "CCC.LB.C02.TR01",
+ "Description": "When concurrent connections reach 80 percent of capacity, the\nautoscaling group MUST add at least one instance within five\nminutes.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "Controls that preserve availability and confidentiality of\ntraffic processed by the load balancer.\n",
+ "Section": "CCC.LB.C02 Auto-Scale Load Balancer Capacity",
+ "SubSection": "",
+ "SubSectionObjective": "Expand load-balancer capacity to maintain availability during traffic\nspikes.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Enable autoscaling policies.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.LB.TH09"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "ID.BE-5"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "CP-10"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.LB.C07.TR01",
+ "Description": "When responses pass through the load balancer, the\n\"Server\" header MUST be replaced with \"lb\".",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "Controls that preserve availability and confidentiality of\ntraffic processed by the load balancer.\n",
+ "Section": "CCC.LB.C07 Scrub Sensitive Headers",
+ "SubSection": "",
+ "SubSectionObjective": "Remove headers that disclose internal details or software\nversions from HTTP responses.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Configure header-transformation rules.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.TH15"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-13"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.LB.C08.TR01",
+ "Description": "When a certificate is within 30 days of expiry, automated renewal\nMUST complete and deploy a new certificate within 24 hours.",
+ "Attributes": [
+ {
+ "FamilyName": "Encryption",
+ "FamilyDescription": "Controls that ensure trustworthy TLS certificates and ciphers.",
+ "Section": "CCC.LB.C08 Automate Certificate Renewal",
+ "SubSection": "",
+ "SubSectionObjective": "Maintain valid TLS certificates by automating renewal and\ndeployment before expiry.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Use certificate-manager auto-renewal workflows.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.LB.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-6"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-17"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "app_minimum_tls_version_12",
+ "storage_ensure_minimum_tls_version_12"
+ ]
+ },
+ {
+ "Id": "CCC.Logging.C01.TR01",
+ "Description": "When a new cloud account is created, provider-level audit and network flow logging MUST be\nenabled by default and directed to the central sink.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "Controls related to the confidentiality, integrity and availability of log data.\n",
+ "Section": "CCC.Logging.C01 Centralized and Comprehensive Log Aggregation",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure all operational and security logs from across the cloud environment, including\napplications, operating systems, network traffic, and cloud service activity, are captured\nautomatically and streamed to a central, secure log management service.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Logging.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-2",
+ "AU-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "monitor_diagnostic_settings_exists",
+ "monitor_diagnostic_setting_with_appropriate_categories",
+ "network_flow_log_captured_sent",
+ "app_http_logs_enabled",
+ "appinsights_ensure_is_configured"
+ ]
+ },
+ {
+ "Id": "CCC.Logging.C01.TR02",
+ "Description": "When a new cloud compute resource is deployed, it MUST be configured to forward all relevant\nlogs (e.g., OS, application, service logs) to the central log sink.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "Controls related to the confidentiality, integrity and availability of log data.\n",
+ "Section": "CCC.Logging.C01 Centralized and Comprehensive Log Aggregation",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure all operational and security logs from across the cloud environment, including\napplications, operating systems, network traffic, and cloud service activity, are captured\nautomatically and streamed to a central, secure log management service.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Logging.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-2",
+ "AU-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "monitor_diagnostic_settings_exists",
+ "monitor_diagnostic_setting_with_appropriate_categories",
+ "app_http_logs_enabled",
+ "keyvault_logging_enabled",
+ "network_flow_log_captured_sent"
+ ]
+ },
+ {
+ "Id": "CCC.Logging.C02.TR01",
+ "Description": "When a new log bucket or stream is created, its retention policy MUST be configured\nin accordance with organisation's data retention policy.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "Controls related to the confidentiality, integrity and availability of log data.\n",
+ "Section": "CCC.Logging.C02 Enforce Data Retention Policy for Logs",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that the retention period configured for logs aligns with the organization's\ndata retention policy.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Logging.TH05"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "GV.PO-01"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-11"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "network_flow_log_more_than_90_days"
+ ]
+ },
+ {
+ "Id": "CCC.Logging.C02.TR02",
+ "Description": "When a query is performed to retrieve log events older than the number of days defined\nin the organisation's data retention policy, it MUST return an empty result.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "Controls related to the confidentiality, integrity and availability of log data.\n",
+ "Section": "CCC.Logging.C02 Enforce Data Retention Policy for Logs",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that the retention period configured for logs aligns with the organization's\ndata retention policy.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Logging.TH05"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "GV.PO-01"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-11"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "network_flow_log_more_than_90_days",
+ "sqlserver_auditing_retention_90_days",
+ "postgresql_flexible_server_log_retention_days_greater_3"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C08.TR01",
+ "Description": "When an attempt is made to modify or delete data before the object\nlock period expires, then the action MUST be denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "Controls related to the confidentiality, integrity and availability of log data.\n",
+ "Section": "CCC.Logging.C03 Enable Object Lock On Log Bucket",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure log immutability by enabling Write Once, Read Many (WORM) protection\nusing object lock on log storage buckets. This prevents logs from being modified\nor deleted during the defined retention period, supporting compliance and forensic\nintegrity.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Configure object lock policy.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9",
+ "AU-11"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.AuditLog.C04.TR01",
+ "Description": "When restricted fields are accessed by unauthorized users, then those fields MUST remain masked.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls that restrict who can access and modify logs.\n",
+ "Section": "CCC.Logging.C04 Restrict Field And Log Type Access",
+ "SubSection": "",
+ "SubSectionObjective": "Configure access to logs to follow the principle of least privilege in particular where technically\npossible limit the log fields users have access to to prevent accidental exposure to sensitive\ninformation such as PII.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Review field level access controls on log data.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Logging.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6",
+ "AU-9",
+ "AC-3",
+ "PT-2",
+ "PT-3",
+ "PT-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "monitor_diagnostic_settings_exists",
+ "keyvault_logging_enabled",
+ "monitor_storage_account_with_activity_logs_is_private",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted"
+ ]
+ },
+ {
+ "Id": "CCC.Logging.C05.TR01",
+ "Description": "When a log storage bucket is created, the bucket's access control settings MUST\nexplicitly deny public read and write access.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls that restrict who can access and modify logs.\n",
+ "Section": "CCC.Logging.C05 Ensure Log Bucket is Not Publicly Accessible",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that log storage buckets are not publicly accessible to prevent unauthorized\naccess to sensitive log data. In addition, logs should be replicated to another cloud\nregion to enhance availability, durability, and support disaster recovery requirements.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green"
+ ],
+ "Recommendation": "Configure bucket policies and access control lists (ACLs) to restrict public access.\nRegularly review bucket permissions to ensure no public access has been inadvertently granted.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AA-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "monitor_storage_account_with_activity_logs_is_private",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted",
+ "monitor_diagnostic_settings_exists",
+ "storage_blob_public_access_level_is_disabled"
+ ]
+ },
+ {
+ "Id": "CCC.Logging.C05.TR02",
+ "Description": "When the URL of a log storage bucket's object is accessed publicly, the action MUST be denied\nby bucket policy.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls that restrict who can access and modify logs.\n",
+ "Section": "CCC.Logging.C05 Ensure Log Bucket is Not Publicly Accessible",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that log storage buckets are not publicly accessible to prevent unauthorized\naccess to sensitive log data. In addition, logs should be replicated to another cloud\nregion to enhance availability, durability, and support disaster recovery requirements.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green"
+ ],
+ "Recommendation": "Configure bucket policies and access control lists (ACLs) to restrict public access.\nRegularly review bucket permissions to ensure no public access has been inadvertently granted.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AA-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "storage_blob_public_access_level_is_disabled",
+ "monitor_storage_account_with_activity_logs_is_private",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted",
+ "monitor_diagnostic_settings_exists",
+ "storage_geo_redundant_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Logging.C06.TR01",
+ "Description": "When a single principal executes an anomalously high number of log queries,\nan alert MUST be generated.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging and Monitoring",
+ "FamilyDescription": "Controls that collect, alert, and retain logging-related events.\n",
+ "Section": "CCC.Logging.C06 Detect and Alert on Potential Log Exfiltration",
+ "SubSection": "",
+ "SubSectionObjective": "Identify and alert on anomalous data access patterns that may indicate an attempt\nto exfiltrate log data.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Logging.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-03",
+ "DE.CM-09"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SI-4",
+ "CA-7",
+ "AU-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "apim_threat_detection_llm_jacking"
+ ]
+ },
+ {
+ "Id": "CCC.Logging.C07.TR01",
+ "Description": "When an audit log event is recorded that corresponds to a modification of the logging service\nconfiguration such as disabling a log trail, deleting a log sink, or altering a log forwarding rule,\nan alert MUST be generated.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging and Monitoring",
+ "FamilyDescription": "Controls that collect, alert, and retain logging-related events.\n",
+ "Section": "CCC.Logging.C07 Detect and Alert on Log Service Tampering",
+ "SubSection": "",
+ "SubSectionObjective": "Alert when any component of the critical logging infrastructure is disabled, modified,\nor deleted, indicating a defense evasion attempt.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH16"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-03",
+ "DE.CM-09"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SI-4",
+ "CA-7",
+ "AU-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "monitor_diagnostic_settings_exists",
+ "monitor_alert_create_update_nsg",
+ "monitor_alert_delete_nsg",
+ "monitor_alert_create_update_public_ip_address_rule",
+ "monitor_alert_delete_public_ip_address_rule",
+ "monitor_alert_create_update_security_solution",
+ "monitor_alert_delete_security_solution",
+ "monitor_alert_create_policy_assignment",
+ "monitor_alert_delete_policy_assignment",
+ "monitor_alert_service_health_exists",
+ "monitor_alert_create_update_sqlserver_fr",
+ "monitor_alert_delete_sqlserver_fr"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C01.TR01",
+ "Description": "When a request is made to read a protected bucket, the service MUST prevent any request using KMS keys not listed as trusted by the organization.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C01 Prevent Unencrypted Requests",
+ "SubSection": "CCC.ObjStor.C01 Prevent Requests to Buckets or Objects with Untrusted KMS Keys",
+ "SubSectionObjective": "Prevent any requests to object storage buckets or objects using untrusted KMS keys to protect against unauthorized data encryption that can impact data availability and integrity.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01",
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DCS-04",
+ "DCS-06"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "storage_ensure_encryption_with_customer_managed_keys",
+ "databricks_workspace_cmk_encryption_enabled",
+ "vm_ensure_attached_disks_encrypted_with_cmk",
+ "vm_ensure_unattached_disks_encrypted_with_cmk"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C01.TR02",
+ "Description": "When a request is made to read a protected object, the service MUST prevent any request using KMS keys not listed as trusted by the organization.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C01 Prevent Unencrypted Requests",
+ "SubSection": "CCC.ObjStor.C01 Prevent Requests to Buckets or Objects with Untrusted KMS Keys",
+ "SubSectionObjective": "Prevent any requests to object storage buckets or objects using untrusted KMS keys to protect against unauthorized data encryption that can impact data availability and integrity.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01",
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DCS-04",
+ "DCS-06"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "storage_ensure_encryption_with_customer_managed_keys",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted",
+ "keyvault_rbac_enabled",
+ "keyvault_private_endpoints",
+ "keyvault_rbac_key_expiration_set",
+ "keyvault_rbac_secret_expiration_set"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C01.TR03",
+ "Description": "When a request is made to write to a bucket, the service MUST prevent any request using KMS keys not listed as trusted by the organization.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C01 Prevent Unencrypted Requests",
+ "SubSection": "CCC.ObjStor.C01 Prevent Requests to Buckets or Objects with Untrusted KMS Keys",
+ "SubSectionObjective": "Prevent any requests to object storage buckets or objects using untrusted KMS keys to protect against unauthorized data encryption that can impact data availability and integrity.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01",
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DCS-04",
+ "DCS-06"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "storage_ensure_encryption_with_customer_managed_keys",
+ "storage_ensure_private_endpoints_in_storage_accounts",
+ "keyvault_rbac_enabled",
+ "keyvault_private_endpoints",
+ "keyvault_access_only_through_private_endpoints"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C01.TR04",
+ "Description": "When a request is made to write to an object, the service MUST prevent any request using KMS keys not listed as trusted by the organization.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C01 Prevent Unencrypted Requests",
+ "SubSection": "CCC.ObjStor.C01 Prevent Requests to Buckets or Objects with Untrusted KMS Keys",
+ "SubSectionObjective": "Prevent any requests to object storage buckets or objects using untrusted KMS keys to protect against unauthorized data encryption that can impact data availability and integrity.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01",
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DCS-04",
+ "DCS-06"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "storage_ensure_encryption_with_customer_managed_keys",
+ "databricks_workspace_cmk_encryption_enabled",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C03.TR01",
+ "Description": "When an object storage bucket deletion is attempted, the bucket MUST be fully recoverable for a set time-frame after deletion is requested.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C03 Implement Multi-factor Authentication (MFA) for Access",
+ "SubSection": "CCC.ObjStor.C03 Prevent Bucket Deletion Through Irrevocable Bucket Retention Policy",
+ "SubSectionObjective": "Ensure that object storage bucket is not deleted after creation, and that the preventative measure cannot be unset.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-16"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.1.4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28",
+ "CP-10"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "storage_blob_versioning_is_enabled",
+ "storage_ensure_soft_delete_is_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C03.TR02",
+ "Description": "When an attempt is made to modify the retention policy for an object storage bucket, the service MUST prevent the policy from being modified.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C03 Implement Multi-factor Authentication (MFA) for Access",
+ "SubSection": "CCC.ObjStor.C03 Prevent Bucket Deletion Through Irrevocable Bucket Retention Policy",
+ "SubSectionObjective": "Ensure that object storage bucket is not deleted after creation, and that the preventative measure cannot be unset.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-16"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.1.4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28",
+ "CP-10"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.ObjStor.C04.TR01",
+ "Description": "When an object is uploaded to the object storage system, the object MUST automatically receive a default retention policy that prevents premature deletion or modification.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C04 Log All Access and Changes",
+ "SubSection": "CCC.ObjStor.C04 Objects have an Effective Retention Policy by Default",
+ "SubSectionObjective": "Ensure that all objects stored in the object storage system have a retention policy applied by default, preventing premature deletion or modification of objects and ensuring compliance with data retention regulations.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-16"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.1.4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28",
+ "CP-10"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "storage_blob_versioning_is_enabled",
+ "storage_ensure_soft_delete_is_enabled",
+ "storage_ensure_file_shares_soft_delete_is_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C04.TR02",
+ "Description": "When an attempt is made to delete or modify an object that is subject to an active retention policy, the service MUST prevent the action from being completed.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C04 Log All Access and Changes",
+ "SubSection": "CCC.ObjStor.C04 Objects have an Effective Retention Policy by Default",
+ "SubSectionObjective": "Ensure that all objects stored in the object storage system have a retention policy applied by default, preventing premature deletion or modification of objects and ensuring compliance with data retention regulations.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-16"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.1.4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28",
+ "CP-10"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "storage_ensure_soft_delete_is_enabled",
+ "storage_ensure_file_shares_soft_delete_is_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C05.TR01",
+ "Description": "When an object is uploaded to the object storage bucket, the object MUST be stored with a unique identifier.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C05 Prevent Access from Untrusted Entities",
+ "SubSection": "CCC.ObjStor.C05 Versioning is Enabled for All Objects in the Bucket",
+ "SubSectionObjective": "Ensure that versioning is enabled for all objects stored in the object storage bucket to enable recovery of previous versions of objects in case of loss or corruption.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.1.4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28",
+ "CP-10"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-16"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "storage_blob_versioning_is_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C05.TR02",
+ "Description": "When an object is modified, the service MUST assign a new unique identifier to the modified object to differentiate it from the previous version.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C05 Prevent Access from Untrusted Entities",
+ "SubSection": "CCC.ObjStor.C05 Versioning is Enabled for All Objects in the Bucket",
+ "SubSectionObjective": "Ensure that versioning is enabled for all objects stored in the object storage bucket to enable recovery of previous versions of objects in case of loss or corruption.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.1.4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28",
+ "CP-10"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-16"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "storage_blob_versioning_is_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C05.TR03",
+ "Description": "When an object is modified, the service MUST allow for recovery of previous versions of the object.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C05 Prevent Access from Untrusted Entities",
+ "SubSection": "CCC.ObjStor.C05 Versioning is Enabled for All Objects in the Bucket",
+ "SubSectionObjective": "Ensure that versioning is enabled for all objects stored in the object storage bucket to enable recovery of previous versions of objects in case of loss or corruption.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.1.4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28",
+ "CP-10"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-16"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "storage_blob_versioning_is_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C05.TR04",
+ "Description": "When an object is deleted, the service MUST retain other versions of the object to allow for recovery of previous versions.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C05 Prevent Access from Untrusted Entities",
+ "SubSection": "CCC.ObjStor.C05 Versioning is Enabled for All Objects in the Bucket",
+ "SubSectionObjective": "Ensure that versioning is enabled for all objects stored in the object storage bucket to enable recovery of previous versions of objects in case of loss or corruption.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.1.4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28",
+ "CP-10"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-16"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "storage_blob_versioning_is_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C06.TR01",
+ "Description": "When an object storage bucket is accessed, the service MUST store access logs in a separate data store.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C06 Prevent Deployment in Restricted Regions",
+ "SubSection": "CCC.ObjStor.C06 Access Logs are Stored in a Separate Data Store",
+ "SubSectionObjective": "Ensure that access logs for object storage buckets are stored in a separate data store to protect against unauthorized access, tampering, or deletion of logs (Logbuckets are exempt from this requirement, but must be tlp-red).",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07",
+ "CCC.TH09"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-6"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-07",
+ "DSP-17"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.15.0"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9",
+ "SC-28"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "monitor_diagnostic_settings_exists",
+ "monitor_diagnostic_setting_with_appropriate_categories",
+ "monitor_storage_account_with_activity_logs_is_private",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C02.TR01",
+ "Description": "When a permission set is allowed for an object in a bucket, the service MUST allow the same permission set to access all objects in the same bucket.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C02 Ensure Data Encryption at Rest for All Stored Data",
+ "SubSection": "CCC.ObjStor.C02 Enforce Uniform Bucket-level Access to Prevent Inconsistent Permissions",
+ "SubSectionObjective": "Ensure that uniform bucket-level access is enforced across all object storage buckets. This prevents the use of ad-hoc or inconsistent object-level permissions, ensuring centralized, consistent, and secure access management in accordance with the principle of least privilege.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.4.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "AC-6"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DCS-09"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "storage_blob_public_access_level_is_disabled",
+ "storage_default_network_access_rule_is_denied",
+ "storage_ensure_private_endpoints_in_storage_accounts"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C02.TR02",
+ "Description": "When a permission set is denied for an object in a bucket, the service MUST deny the same permission set to access all objects in the same bucket.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C02 Ensure Data Encryption at Rest for All Stored Data",
+ "SubSection": "CCC.ObjStor.C02 Enforce Uniform Bucket-level Access to Prevent Inconsistent Permissions",
+ "SubSectionObjective": "Ensure that uniform bucket-level access is enforced across all object storage buckets. This prevents the use of ad-hoc or inconsistent object-level permissions, ensuring centralized, consistent, and secure access management in accordance with the principle of least privilege.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.4.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "AC-6"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DCS-09"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "storage_blob_public_access_level_is_disabled",
+ "storage_account_key_access_disabled",
+ "storage_default_to_entra_authorization_enabled",
+ "storage_ensure_private_endpoints_in_storage_accounts"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN01.AR01",
+ "Description": "Verify that only authorized users can access MLDE resources,\nand that access modes are properly defined and enforced.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN01 Define Access Mode for ML Development Environments",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that access to Machine Learning Development Environment (MLDE)\nresources is strictly defined and controlled.\nOnly authorized users with appropriate permissions can access these environments,\nmitigating the risk of unauthorized access, data leakage, or service disruption.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green",
+ "tlp-clear"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH01",
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.1.1",
+ "2013 A.9.2.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-2",
+ "AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-01",
+ "IAM-02"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "aks_cluster_rbac_enabled",
+ "aks_clusters_public_access_disabled",
+ "aks_network_policy_enabled",
+ "app_ensure_auth_is_set_up",
+ "app_register_with_identity",
+ "app_function_identity_is_configured",
+ "app_function_identity_without_admin_privileges",
+ "app_function_not_publicly_accessible",
+ "app_function_access_keys_configured",
+ "keyvault_rbac_enabled",
+ "keyvault_private_endpoints",
+ "keyvault_access_only_through_private_endpoints",
+ "iam_custom_role_has_permissions_to_administer_resource_locks",
+ "iam_role_user_access_admin_restricted",
+ "iam_subscription_roles_owner_custom_not_created",
+ "entra_policy_user_consent_for_verified_apps",
+ "entra_security_defaults_enabled",
+ "entra_trusted_named_locations_exists",
+ "entra_global_admin_in_less_than_five_users",
+ "entra_non_privileged_user_has_mfa",
+ "entra_privileged_user_has_mfa",
+ "entra_policy_default_users_cannot_create_security_groups",
+ "entra_policy_ensure_default_user_cannot_create_apps",
+ "entra_users_cannot_create_microsoft_365_groups"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN03.AR01",
+ "Description": "Verify that root access is disabled on MLDE instances containing sensitive data.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN03 Disable Root Access on MLDE Instances",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent users from obtaining root access on MLDE instances to reduce the\nrisk of unauthorized system modifications and potential security breaches.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-08",
+ "IAM-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.2.3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "aks_clusters_created_with_private_nodes",
+ "aks_clusters_public_access_disabled",
+ "aks_network_policy_enabled",
+ "app_function_not_publicly_accessible",
+ "app_function_identity_without_admin_privileges",
+ "iam_role_user_access_admin_restricted",
+ "vm_jit_access_enabled",
+ "vm_linux_enforce_ssh_authentication",
+ "app_function_identity_is_configured"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN03.AR02",
+ "Description": "For MLDE instances without sensitive data, ensure that root access is only\nenabled when necessary and properly authorized.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN03 Disable Root Access on MLDE Instances",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent users from obtaining root access on MLDE instances to reduce the\nrisk of unauthorized system modifications and potential security breaches.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green",
+ "tlp-clear"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-08",
+ "IAM-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.2.3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "vm_jit_access_enabled",
+ "vm_linux_enforce_ssh_authentication",
+ "app_function_identity_without_admin_privileges",
+ "app_function_identity_is_configured",
+ "iam_role_user_access_admin_restricted",
+ "iam_subscription_roles_owner_custom_not_created",
+ "entra_global_admin_in_less_than_five_users",
+ "entra_privileged_user_has_mfa",
+ "entra_conditional_access_policy_require_mfa_for_management_api"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN04.AR01",
+ "Description": "Verify that terminal access is disabled on MLDE instances containing sensitive data.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN04 Disable Terminal Access on MLDE Instances",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent users from accessing the terminal on MLDE instances to limit the risk of\nunauthorized commands and potential system compromise.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-08"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.2.3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "vm_jit_access_enabled",
+ "vm_linux_enforce_ssh_authentication"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN04.AR02",
+ "Description": "For MLDE instances without sensitive data, ensure that terminal access is only\nenabled when necessary and properly authorized.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN04 Disable Terminal Access on MLDE Instances",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent users from accessing the terminal on MLDE instances to limit the risk of\nunauthorized commands and potential system compromise.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green",
+ "tlp-clear"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-08"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.2.3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "vm_jit_access_enabled",
+ "vm_linux_enforce_ssh_authentication"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN02.AR01",
+ "Description": "Confirm that file download functionality is disabled on MLDE instances containing sensitive data.",
+ "Attributes": [
+ {
+ "FamilyName": "Data Protection",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN02 Disable File Downloads on MLDE Instances",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent unauthorized file downloads from MLDE instances to protect sensitive data from being exfiltrated.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH02",
+ "CCC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-5"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSI-05",
+ "DSI-07"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.2.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-7",
+ "SC-8"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.MLDE.CN02.AR02",
+ "Description": "For MLDE instances without sensitive data, ensure that file downloads are monitored and logged.",
+ "Attributes": [
+ {
+ "FamilyName": "Data Protection",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "",
+ "SubSection": "CCC.MLDE.CN02 Disable File Downloads on MLDE Instances",
+ "SubSectionObjective": "Prevent unauthorized file downloads from MLDE instances to protect sensitive data from being exfiltrated.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green",
+ "tlp-clear"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH02",
+ "CCC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-5"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSI-05",
+ "DSI-07"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.2.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-7",
+ "SC-8"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "monitor_diagnostic_settings_exists",
+ "monitor_diagnostic_setting_with_appropriate_categories"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN05.AR01",
+ "Description": "Verify that only approved VM and container images can be selected when creating MLDE instances.",
+ "Attributes": [
+ {
+ "FamilyName": "Configuration Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "",
+ "SubSection": "CCC.MLDE.CN05 Restrict Environment Options on MLDE Instances",
+ "SubSectionObjective": "Limit the virtual machine and container image options available when creating\nnew MLDE instances to approved and secure configurations.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.IP-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "TVM-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.12.5.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "CM-2"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "vm_ensure_using_approved_images",
+ "vm_desired_sku_size",
+ "containerregistry_not_publicly_accessible",
+ "containerregistry_uses_private_link"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN05.AR02",
+ "Description": "Attempt to create an MLDE instance with an unapproved image and confirm that it is denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Configuration Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "",
+ "SubSection": "CCC.MLDE.CN05 Restrict Environment Options on MLDE Instances",
+ "SubSectionObjective": "Limit the virtual machine and container image options available when creating\nnew MLDE instances to approved and secure configurations.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.IP-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "TVM-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.12.5.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "CM-2"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "vm_ensure_using_approved_images"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN06.AR01",
+ "Description": "Verify that automatic scheduled upgrades are enabled on user-managed\nMLDE instances containing sensitive data.",
+ "Attributes": [
+ {
+ "FamilyName": "Vulnerability Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "",
+ "SubSection": "CCC.MLDE.CN06 Require Automatic Scheduled Upgrades on User-Managed MLDE Instances",
+ "SubSectionObjective": "Ensure that MLDE instances are kept up-to-date with the\nlatest security patches by enforcing automatic scheduled upgrades.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH04",
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.IP-12"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "TVM-01",
+ "TVM-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.12.6.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SI-2"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "defender_ensure_system_updates_are_applied"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN06.AR02",
+ "Description": "Ensure that the upgrade schedule is appropriately configured and\ndoes not interfere with critical operations.",
+ "Attributes": [
+ {
+ "FamilyName": "Vulnerability Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "",
+ "SubSection": "CCC.MLDE.CN06 Require Automatic Scheduled Upgrades on User-Managed MLDE Instances",
+ "SubSectionObjective": "Ensure that MLDE instances are kept up-to-date with the\nlatest security patches by enforcing automatic scheduled upgrades.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green",
+ "tlp-clear"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH04",
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.IP-12"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "TVM-01",
+ "TVM-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.12.6.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SI-2"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.MLDE.CN07.AR01",
+ "Description": "Verify that MLDE instances containing sensitive data cannot be accessed via public IP addresses.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "",
+ "SubSection": "CCC.MLDE.CN07 Restrict Public IP Access on MLDE Instances",
+ "SubSectionObjective": "Prevent public IP access to MLDE instances to reduce exposure to the internet and enhance security.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH02",
+ "CCC.VPC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "SEF-05"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "aks_clusters_created_with_private_nodes",
+ "aks_clusters_public_access_disabled",
+ "containerregistry_not_publicly_accessible",
+ "containerregistry_uses_private_link",
+ "keyvault_private_endpoints",
+ "keyvault_access_only_through_private_endpoints",
+ "storage_blob_public_access_level_is_disabled",
+ "storage_ensure_private_endpoints_in_storage_accounts",
+ "storage_default_network_access_rule_is_denied",
+ "network_http_internet_access_restricted",
+ "network_rdp_internet_access_restricted",
+ "network_ssh_internet_access_restricted",
+ "network_udp_internet_access_restricted",
+ "network_public_ip_shodan"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN07.AR02",
+ "Description": "For MLDE instances without sensitive data requiring public access,\nensure that appropriate security controls are in place and access is approved.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN07 Restrict Public IP Access on MLDE Instances",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent public IP access to MLDE instances to reduce exposure to the internet and enhance security.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green",
+ "tlp-clear"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH02",
+ "CCC.VPC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "SEF-05"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "aks_clusters_created_with_private_nodes",
+ "aks_clusters_public_access_disabled",
+ "containerregistry_not_publicly_accessible",
+ "containerregistry_uses_private_link",
+ "keyvault_private_endpoints",
+ "keyvault_access_only_through_private_endpoints",
+ "storage_ensure_private_endpoints_in_storage_accounts",
+ "storage_default_network_access_rule_is_denied",
+ "network_http_internet_access_restricted",
+ "network_rdp_internet_access_restricted",
+ "network_ssh_internet_access_restricted",
+ "network_udp_internet_access_restricted"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN08.AR01",
+ "Description": "Verify that MLDE instances containing sensitive data can only be deployed in\napproved virtual networks with appropriate security controls.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN08 Restrict Virtual Networks for MLDE Instances",
+ "SubSection": "",
+ "SubSectionObjective": "Limit the virtual networks that can be used when creating new MLDE instances to\nensure they are deployed within approved and secure network environments.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH01",
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.1.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "aks_clusters_created_with_private_nodes",
+ "aks_clusters_public_access_disabled",
+ "aks_network_policy_enabled",
+ "app_function_vnet_integration_enabled",
+ "app_function_not_publicly_accessible",
+ "containerregistry_not_publicly_accessible",
+ "containerregistry_uses_private_link",
+ "keyvault_private_endpoints",
+ "keyvault_access_only_through_private_endpoints",
+ "storage_ensure_private_endpoints_in_storage_accounts",
+ "storage_default_network_access_rule_is_denied",
+ "network_http_internet_access_restricted",
+ "network_rdp_internet_access_restricted",
+ "network_ssh_internet_access_restricted",
+ "network_udp_internet_access_restricted"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN08.AR02",
+ "Description": "Ensure that MLDE instances without sensitive data are deployed in\nnetworks that meet organizational security standards.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN08 Restrict Virtual Networks for MLDE Instances",
+ "SubSection": "",
+ "SubSectionObjective": "Limit the virtual networks that can be used when creating new MLDE instances to\nensure they are deployed within approved and secure network environments.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green",
+ "tlp-clear"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH01",
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.1.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "aks_clusters_created_with_private_nodes",
+ "aks_clusters_public_access_disabled",
+ "aks_network_policy_enabled",
+ "app_function_vnet_integration_enabled",
+ "containerregistry_not_publicly_accessible",
+ "containerregistry_uses_private_link",
+ "keyvault_private_endpoints",
+ "keyvault_access_only_through_private_endpoints",
+ "storage_ensure_private_endpoints_in_storage_accounts",
+ "storage_default_network_access_rule_is_denied",
+ "storage_ensure_azure_services_are_trusted_to_access_is_enabled",
+ "network_http_internet_access_restricted",
+ "network_rdp_internet_access_restricted",
+ "network_ssh_internet_access_restricted",
+ "network_udp_internet_access_restricted"
+ ]
+ },
+ {
+ "Id": "CCC.Message.CN01.AR01",
+ "Description": "Attempt to publish a message without using a customer-managed encryption key\nand verify that the message is rejected or not stored.",
+ "Attributes": [
+ {
+ "FamilyName": "Encryption",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.Message.CN01 Use Customer-Managed Encryption Keys (CMEK) for Messages",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that messages are encrypted using customer-managed encryption keys (CMEK)\nto provide enhanced control over encryption processes and keys, meeting compliance and security requirements.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12",
+ "SC-13"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "storage_ensure_encryption_with_customer_managed_keys",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted"
+ ]
+ },
+ {
+ "Id": "CCC.Monitor.CN01.AR01",
+ "Description": "When an External Monitoring system exceeds the anticipated rate of monitoring checks then\nRate Limiting MUST be applied and an Audit Alert MUST be generated.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "Controls that collect, alert, and retain events from other monitoring services.",
+ "Section": "CCC.Monitor.CN01 Rate Limiting on External Monitoring",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent DoS attacks using External Monitoring tools.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Monitor.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.IR-01",
+ "DE.CM-01"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-5",
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "monitor_alert_create_update_sqlserver_fr",
+ "monitor_alert_delete_nsg",
+ "monitor_alert_delete_public_ip_address_rule",
+ "monitor_alert_delete_security_solution",
+ "monitor_alert_create_policy_assignment",
+ "monitor_alert_create_update_public_ip_address_rule",
+ "monitor_alert_create_update_security_solution",
+ "monitor_alert_create_update_nsg",
+ "monitor_alert_service_health_exists",
+ "monitor_diagnostic_settings_exists"
+ ]
+ },
+ {
+ "Id": "CCC.Monitor.CN02.AR01",
+ "Description": "When an Custom or User-Defined Metric starts to flood a collector, then a rate limit MUST be applied\nto reduce the network impact of traffic and an alert must triggered.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "Controls that collect, alert, and retain events from other monitoring services.",
+ "Section": "CCC.Monitor.CN02 Rate Limiting on Metric Generation",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent Malicious Actor or misconfiguration from flooding services with metric data.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Monitor.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-01"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-5(2)",
+ "CA-7",
+ "SI-4"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "apim_threat_detection_llm_jacking"
+ ]
+ },
+ {
+ "Id": "CCC.Monitor.CN03.AR01",
+ "Description": "When external systems have approved access to internal systems not normally available for public access\nthen they MUST be secured to prevent unauthorised access jumping through to the internal systems and\nonly allow access to specific internal services.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls designed to prevent unauthorised access to monitoring features.",
+ "Section": "CCC.Monitor.CN03 Access External Monitoring",
+ "SubSection": "",
+ "SubSectionObjective": "Control access to Synthetic monitoring solutions using API keys or Certificate based authentication to\nensure they don't become an attack path, preventing monitoring systems from forging network requests to\ngain access to internal systems.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Monitor.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-06",
+ "PR.IR-01",
+ "PR.AA-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "monitor_storage_account_with_activity_logs_is_private",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted"
+ ]
+ },
+ {
+ "Id": "CCC.Monitor.CN04.AR01",
+ "Description": "When monitoring dashboards display degraded services which may become potential targets then the\ndashboard MUST be protected from unauthorised access.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls designed to prevent unauthorised access to monitoring features.",
+ "Section": "CCC.Monitor.CN04 Restrict access to Monitoring Dashboards",
+ "SubSection": "",
+ "SubSectionObjective": "Control access to Monitoring Dashboards and reports to ensure they don't highlight an attack path.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Monitor.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-09",
+ "DE.AE-03"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SI-4",
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Monitor.CN05.AR01",
+ "Description": "When monitoring services have generated an alert, the service MUST ensure only authorised\nresponders silence or acknowledge the alert.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls designed to prevent unauthorised access to monitoring features.",
+ "Section": "CCC.Monitor.CN05 Restrict access to silence or acknowledge an alert",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure only a subset of users can silence or acknowledge alerts to prevent attackers hiding their activity.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH10"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.IR-01",
+ "PR.AA-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Monitor.CN06.AR01",
+ "Description": "When systems push metrics or traces they MUST be authenticated for that particular type of metric or trace",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls designed to prevent unauthorised access to monitoring features.",
+ "Section": "CCC.Monitor.CN06 Metrics pushed for authorised services only",
+ "SubSection": "",
+ "SubSectionObjective": "Use IAM to control which types of metrics or traces can be pushed by different system to avoid a compromised\nsystem pushing fabricated metrics about a different service",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Monitor.TH05"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AA-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-5"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "app_function_identity_is_configured",
+ "app_function_identity_without_admin_privileges",
+ "app_function_access_keys_configured",
+ "app_function_not_publicly_accessible",
+ "app_register_with_identity",
+ "app_ensure_auth_is_set_up"
+ ]
+ },
+ {
+ "Id": "CCC.SecMgmt.CN01.AR01",
+ "Description": "Attempt to use an outdated version of a secret after its rotation period\nhas passed and verify that access is denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Data Protection",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.SecMgmt.CN01 Enforce Automatic Secret Rotation",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that secrets are automatically rotated on a defined schedule to\nreduce the risk of secret compromise and unauthorized access.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01",
+ "CCC.TH14"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-6"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12",
+ "SC-28"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "keyvault_key_rotation_enabled",
+ "storage_key_rotation_90_days"
+ ]
+ },
+ {
+ "Id": "CCC.SecMgmt.CN02.AR01",
+ "Description": "Attempt to retrieve a secret from an unauthorized region and verify that access is denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Data Protection",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.SecMgmt.CN02 Enforce Secret Replication Policies",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that secrets are replicated only to authorized locations as per\norganizational data residency and compliance requirements.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH03",
+ "CCC.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-5"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "keyvault_private_endpoints",
+ "keyvault_access_only_through_private_endpoints",
+ "keyvault_rbac_enabled",
+ "keyvault_logging_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.SvlsComp.CN01.AR01",
+ "Description": "Attempt to access the serverless function over the public internet and verify that access is denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.SvlsComp.CN01 Enforce Use of Private Endpoints for Serverless Function",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that the serverless function is accessible only through a private endpoint,\nallowing it to communicate securely within a virtual private network and preventing\nunauthorized external access.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-5"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-7",
+ "SC-8"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "app_function_not_publicly_accessible",
+ "app_function_vnet_integration_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.SvlsComp.CN02.AR01",
+ "Description": "Send requests to invoke the function up to the allowed threshold and confirm they\nare successful; then send additional requests exceeding the threshold from the same\nentity and verify that they are denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Availability",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.SvlsComp.CN02 Implement Function Invocation Rate Limits",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that function invocation is limited to a specified threshold from any single entity,\npreventing resource exhaustion and denial of service attacks.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH12"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-5"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "app_function_access_keys_configured",
+ "app_function_not_publicly_accessible",
+ "app_function_vnet_integration_enabled",
+ "app_function_identity_is_configured"
+ ]
+ },
+ {
+ "Id": "CCC.VPC.CN01.AR01",
+ "Description": "When a subscription is created, the subscription MUST NOT\ncontain default network resources.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.VPC.CN01 Restrict Default Network Creation",
+ "SubSection": "",
+ "SubSectionObjective": "Restrict the automatic creation of default virtual networks and related\nresources during subscription initialization to avoid insecure default\nconfigurations and enforce custom network policies.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.VPC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-5"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "TVM-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.12.3.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.VPC.CN02.AR01",
+ "Description": "When a resource is created in a public subnet, that resource\nMUST NOT be assigned an external IP address by default.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.VPC.CN02 Limit Resource Creation in Public Subnet",
+ "SubSection": "",
+ "SubSectionObjective": "Restrict the creation of resources in the public subnet with\ndirect access to the internet to minimize attack surfaces.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.VPC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "SEF-05"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-4"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "aks_clusters_public_access_disabled",
+ "aks_clusters_created_with_private_nodes",
+ "network_http_internet_access_restricted",
+ "network_rdp_internet_access_restricted",
+ "network_ssh_internet_access_restricted",
+ "network_udp_internet_access_restricted",
+ "containerregistry_not_publicly_accessible",
+ "containerregistry_uses_private_link",
+ "keyvault_private_endpoints",
+ "keyvault_access_only_through_private_endpoints",
+ "cosmosdb_account_use_private_endpoints",
+ "cosmosdb_account_firewall_use_selected_networks",
+ "storage_ensure_private_endpoints_in_storage_accounts",
+ "storage_default_network_access_rule_is_denied",
+ "storage_blob_public_access_level_is_disabled",
+ "sqlserver_unrestricted_inbound_access",
+ "app_function_not_publicly_accessible"
+ ]
+ },
+ {
+ "Id": "CCC.VPC.CN03.AR01",
+ "Description": "When a VPC peering connection is requested, the service MUST\nprevent connections from VPCs that are not explicitly\nallowed.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.VPC.CN03 Restrict VPC Peering to Authorized Accounts",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure VPC peering connections are only established with explicitly\nauthorized destinations to limit network exposure and enforce boundary\ncontrols.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.VPC.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IVS-01"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.3"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-4"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.VPC.CN04.AR01",
+ "Description": "When any network traffic goes to or from an interface in the VPC,\nthe service MUST capture and log all relevant information.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.VPC.CN04 Enforce VPC Flow Logs on VPCs",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure VPCs are configured with flow logs enabled to capture traffic\ninformation.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.VPC.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PT-1"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.12.4.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-2"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IVS-06"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "network_flow_log_captured_sent",
+ "network_flow_log_more_than_90_days",
+ "network_watcher_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Vector.CN01.AR01",
+ "Description": "When a vector embedding is submitted for indexing, the system MUST validate that it\nmatches expected schema, dimension, and format profiles.",
+ "Attributes": [
+ {
+ "FamilyName": "Vector Indexing",
+ "FamilyDescription": "Controls specific to the management and protection of vector embedding and index operations.",
+ "Section": "CCC.Vector.CN01 Validate Embeddings Before Indexing",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure all incoming embeddings are structurally and statistically validated\nbefore indexing to prevent poisoning or corruption.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Vector.TH02",
+ "CCC.Vector.TH05",
+ "CCC.TH12"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-002"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Vector.CN02.AR01",
+ "Description": "When an index lifecycle event is triggered, the service MUST\nverify that the actor has explicit permissions for the operation type.",
+ "Attributes": [
+ {
+ "FamilyName": "Vector Indexing",
+ "FamilyDescription": "Controls specific to the management and protection of vector embedding and index operations.",
+ "Section": "CCC.Vector.CN02 Enforce Role-Based Index Lifecycle Management",
+ "SubSection": "",
+ "SubSectionObjective": "Restrict index lifecycle operations (create, delete, rollback) to privileged\nidentities using fine-grained access controls.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Vector.TH02",
+ "CCC.Vector.TH04",
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-012"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_role_user_access_admin_restricted",
+ "iam_custom_role_has_permissions_to_administer_resource_locks",
+ "iam_subscription_roles_owner_custom_not_created",
+ "app_function_identity_without_admin_privileges",
+ "app_function_identity_is_configured"
+ ]
+ },
+ {
+ "Id": "CCC.Vector.CN03.AR01",
+ "Description": "When a metadata filter is applied to a query, the service MUST\nverify the requester is authorized to access that field.",
+ "Attributes": [
+ {
+ "FamilyName": "Vector Indexing",
+ "FamilyDescription": "Controls specific to the management and protection of vector embedding and index operations.",
+ "Section": "CCC.Vector.CN03 Enforce Metadata-Level Access Controls",
+ "SubSection": "",
+ "SubSectionObjective": "Apply access control policies to metadata fields used in filtering to\nprevent unauthorized exposure or inference.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Vector.TH03",
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-DET-001",
+ "AIR-PREV-012",
+ "AIR-DET-016"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "app_function_not_publicly_accessible",
+ "app_function_identity_is_configured",
+ "app_function_identity_without_admin_privileges",
+ "app_function_access_keys_configured",
+ "containerregistry_not_publicly_accessible",
+ "containerregistry_uses_private_link",
+ "containerregistry_admin_user_disabled",
+ "cosmosdb_account_firewall_use_selected_networks",
+ "cosmosdb_account_use_private_endpoints",
+ "cosmosdb_account_use_aad_and_rbac",
+ "keyvault_rbac_enabled",
+ "keyvault_private_endpoints",
+ "keyvault_access_only_through_private_endpoints",
+ "keyvault_logging_enabled",
+ "storage_blob_public_access_level_is_disabled",
+ "storage_default_network_access_rule_is_denied",
+ "storage_ensure_private_endpoints_in_storage_accounts",
+ "storage_account_key_access_disabled",
+ "storage_secure_transfer_required_is_enabled",
+ "storage_ensure_encryption_with_customer_managed_keys",
+ "storage_ensure_soft_delete_is_enabled",
+ "storage_ensure_file_shares_soft_delete_is_enabled",
+ "iam_role_user_access_admin_restricted",
+ "iam_custom_role_has_permissions_to_administer_resource_locks",
+ "network_http_internet_access_restricted",
+ "network_rdp_internet_access_restricted",
+ "network_ssh_internet_access_restricted",
+ "network_udp_internet_access_restricted",
+ "aks_clusters_public_access_disabled",
+ "aks_network_policy_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Vector.CN04.AR01",
+ "Description": "When ingestion exceeds pre-defined thresholds, the service MUST\nthrottle or reject excess vector write operations.",
+ "Attributes": [
+ {
+ "FamilyName": "Vector Indexing",
+ "FamilyDescription": "Controls specific to the management and protection of vector embedding and index operations.",
+ "Section": "CCC.Vector.CN04 Enforce Ingestion Quotas and Throttling",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent ingestion-based DoS or index pollution by\nrate-limiting vector submissions and enforcing quotas.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Vector.TH02",
+ "CCC.TH12"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-008"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Vector.CN05.AR01",
+ "Description": "When a rollback is attempted, the system MUST log\nthe action and verify rollback authorization.",
+ "Attributes": [
+ {
+ "FamilyName": "Vector Indexing",
+ "FamilyDescription": "Controls specific to the management and protection of vector embedding and index operations.",
+ "Section": "CCC.Vector.CN05 Enforce Index Versioning with Rollback Protection",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure vector indexes are versioned and that rollback\noperations are authorized and auditable.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Vector.TH04",
+ "CCC.TH09",
+ "CCC.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "AIR-DET-004",
+ "Identifiers": [
+ "AIR-PREV-008"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Vector.CN06.AR01",
+ "Description": "When an embedding is submitted, the service MUST validate\nthat its format and dimensionality match allowed profiles.",
+ "Attributes": [
+ {
+ "FamilyName": "Vector Indexing",
+ "FamilyDescription": "Controls specific to the management and protection of vector embedding and index operations.",
+ "Section": "CCC.Vector.CN06 Enforce Dimensional and Format Constraints",
+ "SubSection": "",
+ "SubSectionObjective": "Reject embeddings that do not conform to expected model\nspecifications (dimensions, format, etc).",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Vector.TH05",
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-002"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Vector.CN07.AR01",
+ "Description": "When a search request is issued, clients MUST be allowed\nto declare their requirement for exact vs approximate results.",
+ "Attributes": [
+ {
+ "FamilyName": "Vector Indexing",
+ "FamilyDescription": "Controls specific to the management and protection of vector embedding and index operations.",
+ "Section": "CCC.Vector.CN07 Support Explicit ANN vs. Exact Search Configuration",
+ "SubSection": "",
+ "SubSectionObjective": "Provide clients with the option to enforce exact-match\n(non-ANN) search where search fidelity is critical.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Vector.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": []
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Core.CN01.AR01",
+ "Description": "When a port is exposed for non-SSH network traffic, all traffic\nMUST include a TLS handshake AND be encrypted using TLS 1.3 or\nhigher.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN01 Encrypt Data for Transmission",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all communications are encrypted in transit to protect\ndata integrity and confidentiality.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Most cloud services enable TLS 1.3 by default. Where it is not\nalready set, ensure that your services are configured or updated\naccordingly.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-03",
+ "CEK-04",
+ "IVS-03",
+ "IVS-07"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-8",
+ "SC-13"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "app_minimum_tls_version_12",
+ "app_ensure_http_is_redirected_to_https",
+ "storage_secure_transfer_required_is_enabled",
+ "storage_ensure_minimum_tls_version_12"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN01.AR02",
+ "Description": "When a port is exposed for SSH network traffic, all traffic MUST\ninclude a SSH handshake AND be encrypted using SSHv2 or higher.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN01 Encrypt Data for Transmission",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all communications are encrypted in transit to protect\ndata integrity and confidentiality.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Any time port 22 is exposed, ensure that it has a properly\nimplemented SSH server with SSHv2 enabled and configured with\nstrong ciphers.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-03",
+ "CEK-04",
+ "IVS-03",
+ "IVS-07"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-8",
+ "SC-13"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "network_ssh_internet_access_restricted",
+ "vm_linux_enforce_ssh_authentication",
+ "app_minimum_tls_version_12",
+ "storage_secure_transfer_required_is_enabled",
+ "storage_ensure_minimum_tls_version_12",
+ "app_ensure_http_is_redirected_to_https"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN01.AR03",
+ "Description": "When the service receives unencrypted traffic, \nthen it MUST either block the request or automatically\nredirect it to the secure equivalent.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN01 Encrypt Data for Transmission",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all communications are encrypted in transit to protect\ndata integrity and confidentiality.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Review firewall, load balancer, and application configurations to\nensure insecure protocols such as HTTP, FTP, and Telnet are not\nexposed. Where possible, implement automatic redirection to secure\nprotocols such as HTTPS, SFTP, SSH, and regularly scan for\nprotocol drift.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-03",
+ "CEK-04",
+ "IVS-03",
+ "IVS-07"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-8",
+ "SC-13"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "app_ensure_http_is_redirected_to_https",
+ "app_minimum_tls_version_12",
+ "storage_secure_transfer_required_is_enabled",
+ "storage_ensure_minimum_tls_version_12",
+ "app_ftp_deployment_disabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN01.AR07",
+ "Description": "When a port is exposed, the service MUST ensure that the protocol\nand service officially assigned to that port number by the IANA\nService Name and Transport Protocol Port Number Registry, and no\nother, is run on that port.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN01 Encrypt Data for Transmission",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all communications are encrypted in transit to protect\ndata integrity and confidentiality.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Reference the IANA Service Name and Transport Protocol Port Number\nRegistry for more information about correct protocol-to-port\nassignments. Avoid running non-standard services on well-known\nports.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-03",
+ "CEK-04",
+ "IVS-03",
+ "IVS-07"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-8",
+ "SC-13"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "app_minimum_tls_version_12",
+ "app_ensure_http_is_redirected_to_https",
+ "app_ensure_using_http20",
+ "storage_smb_channel_encryption_with_secure_algorithm",
+ "storage_secure_transfer_required_is_enabled",
+ "storage_ensure_minimum_tls_version_12",
+ "storage_smb_protocol_version_is_latest"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN01.AR08",
+ "Description": "When a service transmits data using TLS, mutual TLS (mTLS) MUST be\nimplemented to require both client and server certificate\nauthentication for all connections.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN01 Encrypt Data for Transmission",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all communications are encrypted in transit to protect\ndata integrity and confidentiality.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Configure mTLS for all endpoints that process or transmit\nsensitive data. Ensure both client and server certificates are\nvalidated and managed securely. Regularly review certificate\nauthorities and automate certificate rotation where possible.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-03",
+ "CEK-04",
+ "IVS-03",
+ "IVS-07"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-8",
+ "SC-13"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "app_client_certificates_on",
+ "app_minimum_tls_version_12",
+ "app_ensure_http_is_redirected_to_https"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN13.AR01",
+ "Description": "When a port is exposed that uses certificate-based encryption,\nthe service MUST only use valid, unexpired certificates issued by\na trusted certificate authority.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN13 Minimize Lifetime of Encryption and Authentication Certificates",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that encryption and authentication certificates have a limited\nlifetime to reduce the risk of compromise and ensure the use of\nup-to-date security practices.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Track certificate expiration dates and automate certificate\nrenewal where possible. Use certificate management tools to ensure\nonly certificates from trusted authorities are deployed.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH18"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": []
+ }
+ ],
+ "Checks": [
+ "app_client_certificates_on",
+ "app_minimum_tls_version_12",
+ "keyvault_key_expiration_set_in_non_rbac",
+ "keyvault_key_rotation_enabled",
+ "keyvault_rbac_key_expiration_set",
+ "keyvault_rbac_secret_expiration_set",
+ "keyvault_non_rbac_secret_expiration_set"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN13.AR02",
+ "Description": "When a port is exposed that uses certificate-based encryption,\nthe service MUST rotate active certificates within 180 days of\nissuance.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN13 Minimize Lifetime of Encryption and Authentication Certificates",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that encryption and authentication certificates have a limited\nlifetime to reduce the risk of compromise and ensure the use of\nup-to-date security practices.",
+ "Applicability": [
+ "tlp-amber"
+ ],
+ "Recommendation": "Track certificate expiration dates and automate certificate\nrenewal where possible. Use certificate management tools to ensure\nonly certificates from trusted authorities are deployed.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH18"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": []
+ }
+ ],
+ "Checks": [
+ "keyvault_key_rotation_enabled",
+ "keyvault_key_expiration_set_in_non_rbac",
+ "keyvault_rbac_key_expiration_set",
+ "keyvault_non_rbac_secret_expiration_set",
+ "keyvault_rbac_secret_expiration_set",
+ "storage_ensure_encryption_with_customer_managed_keys"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN13.AR03",
+ "Description": "When a port is exposed that uses certificate-based encryption,\nthe service MUST rotate active certificates within 90 days of\nissuance.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN13 Minimize Lifetime of Encryption and Authentication Certificates",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that encryption and authentication certificates have a limited\nlifetime to reduce the risk of compromise and ensure the use of\nup-to-date security practices.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "Track certificate expiration dates and automate certificate\nrenewal where possible. Use certificate management tools to ensure\nonly certificates from trusted authorities are deployed.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH18"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": []
+ }
+ ],
+ "Checks": [
+ "app_client_certificates_on",
+ "app_ensure_http_is_redirected_to_https",
+ "app_minimum_tls_version_12"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN06.AR01",
+ "Description": "When the service is running, its region and availability zone MUST\nbe included in a list of explicitly trusted or approved locations\nwithin the trust perimeter.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN06 Restrict Deployments to Trust Perimeter",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that the service and its child resources are only deployed on\ninfrastructure in locations that are explicitly included within a\ndefined trust perimeter.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Maintain an up-to-date list of trusted and approved regions based\non organizational policies. Validate the service's deployment\nlocation is included in this list.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-19"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.11.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "aks_clusters_public_access_disabled",
+ "aks_clusters_created_with_private_nodes",
+ "containerregistry_not_publicly_accessible",
+ "containerregistry_uses_private_link",
+ "keyvault_private_endpoints",
+ "keyvault_access_only_through_private_endpoints",
+ "storage_ensure_private_endpoints_in_storage_accounts",
+ "network_http_internet_access_restricted",
+ "network_rdp_internet_access_restricted",
+ "network_ssh_internet_access_restricted",
+ "network_udp_internet_access_restricted",
+ "network_watcher_enabled",
+ "entra_trusted_named_locations_exists"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN06.AR02",
+ "Description": "When a child resource is deployed, its region and availability\nzone MUST be included in a list of explicitly trusted or approved\nlocations within the trust perimeter.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN06 Restrict Deployments to Trust Perimeter",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that the service and its child resources are only deployed on\ninfrastructure in locations that are explicitly included within a\ndefined trust perimeter.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Maintain an up-to-date list of trusted and approved regions based\non organizational policies. Validate that child resources can only\nbe deployed to locations included in this list.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-19"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.11.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "entra_trusted_named_locations_exists"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN08.AR01",
+ "Description": "When data is created or modified, the data MUST have a complete\nand recoverable duplicate that is stored in a physically separate\ndata center.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN08 Replicate Data to Multiple Locations",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that data is replicated across multiple physical locations to\nprotect against data loss due to hardware failures, natural disasters,\nor other catastrophic events.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Implement automated data replication processes to ensure that\ndata is consistently duplicated in another region or availability\nzone. Regularly test data recovery from the replicated location to\nensure integrity and availability.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PT-5"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "BCR-08",
+ "BCR-10",
+ "BCR-11"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "CP-2",
+ "CP-10"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "storage_geo_redundant_enabled",
+ "vm_backup_enabled",
+ "vm_sufficient_daily_backup_retention_period"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN08.AR02",
+ "Description": "When data is replicated into a second location, the service MUST\nbe able to accurately represent the replication locations,\nreplication status, and data synchronization status.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN08 Replicate Data to Multiple Locations",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that data is replicated across multiple physical locations to\nprotect against data loss due to hardware failures, natural disasters,\nor other catastrophic events.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PT-5"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "BCR-08",
+ "BCR-10",
+ "BCR-11"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "CP-2",
+ "CP-10"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "storage_geo_redundant_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN09.AR01",
+ "Description": "When the service is operational, its logs and any child resource\nlogs MUST NOT be accessible from the resource they record access\nto.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN09 Ensure Integrity of Access Logs",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that access logs are always recorded to an external location\nthat cannot be manipulated from the context of the service(s) it\ncontains logs for.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07",
+ "CCC.TH09",
+ "CCC.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-6"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "LOG-02",
+ "LOG-04",
+ "LOG-09"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "monitor_diagnostic_settings_exists",
+ "network_flow_log_captured_sent",
+ "monitor_storage_account_with_activity_logs_is_private",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN09.AR02",
+ "Description": "When the service is operational, disabling the logs for the service\nor its child resources MUST NOT be possible without also disabling\nthe corresponding resource.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN09 Ensure Integrity of Access Logs",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that access logs are always recorded to an external location\nthat cannot be manipulated from the context of the service(s) it\ncontains logs for.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "No normal business operations should disable\nlogs, as this could indicate an attempt to cover up unauthorized\naccess. Ensure that logging mechanisms are tightly integrated with\nservice operations, so that logging cannot be disabled without\nstopping the service itself.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07",
+ "CCC.TH09",
+ "CCC.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-6"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "LOG-02",
+ "LOG-04",
+ "LOG-09"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "monitor_diagnostic_settings_exists",
+ "monitor_diagnostic_setting_with_appropriate_categories",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted",
+ "monitor_storage_account_with_activity_logs_is_private",
+ "keyvault_logging_enabled",
+ "app_http_logs_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN09.AR03",
+ "Description": "When the service is operational, any attempt to redirect logs for\nthe service or its child resources MUST NOT be possible without\nhalting operation of the corresponding resource and publishing\ncorresponding events to monitored channels.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN09 Ensure Integrity of Access Logs",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that access logs are always recorded to an external location\nthat cannot be manipulated from the context of the service(s) it\ncontains logs for.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "No normal business operations should result in the redirection of\nlogs, as this could indicate an attempt to cover up unauthorized\naccess. Ensure that logging configurations are immutable during\nservice operation so that any changes require stopping the service\nand publishing corresponding events to monitored channels.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07",
+ "CCC.TH09",
+ "CCC.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-6"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "LOG-02",
+ "LOG-04",
+ "LOG-09"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "monitor_diagnostic_settings_exists",
+ "monitor_diagnostic_setting_with_appropriate_categories",
+ "monitor_storage_account_with_activity_logs_is_private",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted",
+ "network_flow_log_captured_sent",
+ "app_http_logs_enabled",
+ "keyvault_logging_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN10.AR01",
+ "Description": "When data is replicated, the service MUST ensure that replication\nonly occurs to destinations that are explicitly included within\nthe defined trust perimeter.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN10 Restrict Data Replication to Trust Perimeter",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that data is only replicated on infrastructure in locations\nthat are explicitly included within a defined trust perimeter.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-5"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-10",
+ "DSP-19"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-4"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "storage_cross_tenant_replication_disabled",
+ "cosmosdb_account_firewall_use_selected_networks",
+ "cosmosdb_account_use_private_endpoints",
+ "containerregistry_uses_private_link",
+ "keyvault_private_endpoints",
+ "storage_ensure_private_endpoints_in_storage_accounts"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN02.AR01",
+ "Description": "When data is stored, it MUST be encrypted using the latest\nindustry-standard encryption methods.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN02 Encrypt Data for Storage",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all data stored is encrypted at rest using strong\nencryption algorithms.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-03",
+ "CEK-04",
+ "UEM-08",
+ "DSP-17"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-13",
+ "SC-28"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "storage_infrastructure_encryption_is_enabled",
+ "storage_ensure_encryption_with_customer_managed_keys",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted",
+ "vm_ensure_attached_disks_encrypted_with_cmk",
+ "vm_ensure_unattached_disks_encrypted_with_cmk",
+ "sqlserver_tde_encrypted_with_cmk",
+ "sqlserver_tde_encryption_enabled",
+ "databricks_workspace_cmk_encryption_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN11.AR01",
+ "Description": "When encryption keys are used, the service MUST verify that\nall encryption keys use the latest industry-standard cryptographic\nalgorithms.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN11 Protect Encryption Keys",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that encryption keys are managed securely by enforcing\nthe use of approved algorithms, regular key rotation, and\ncustomer-managed encryption keys (CMEKs).",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH16"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-08",
+ "CEK-10",
+ "CEK-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12",
+ "SC-17"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "storage_ensure_encryption_with_customer_managed_keys",
+ "databricks_workspace_cmk_encryption_enabled",
+ "keyvault_key_rotation_enabled",
+ "keyvault_key_expiration_set_in_non_rbac",
+ "keyvault_rbac_key_expiration_set",
+ "keyvault_rbac_secret_expiration_set",
+ "keyvault_non_rbac_secret_expiration_set",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted",
+ "storage_smb_channel_encryption_with_secure_algorithm",
+ "storage_secure_transfer_required_is_enabled",
+ "storage_ensure_minimum_tls_version_12"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN11.AR02",
+ "Description": "When encryption keys are used, the service MUST rotate active keys\nwithin 180 days of issuance.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN11 Protect Encryption Keys",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that encryption keys are managed securely by enforcing\nthe use of approved algorithms, regular key rotation, and\ncustomer-managed encryption keys (CMEKs).",
+ "Applicability": [
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH16"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-08",
+ "CEK-10",
+ "CEK-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12",
+ "SC-17"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "keyvault_key_rotation_enabled",
+ "storage_key_rotation_90_days",
+ "databricks_workspace_cmk_encryption_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN11.AR03",
+ "Description": "When encrypting data, the service MUST verify that\ncustomer-managed encryption keys (CMEKs) are used.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "",
+ "SubSection": "CCC.Core.CN11 Protect Encryption Keys",
+ "SubSectionObjective": "Ensure that encryption keys are managed securely by enforcing\nthe use of approved algorithms, regular key rotation, and\ncustomer-managed encryption keys (CMEKs).",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH16"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-08",
+ "CEK-10",
+ "CEK-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12",
+ "SC-17"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "databricks_workspace_cmk_encryption_enabled",
+ "storage_ensure_encryption_with_customer_managed_keys",
+ "vm_ensure_attached_disks_encrypted_with_cmk",
+ "vm_ensure_unattached_disks_encrypted_with_cmk",
+ "sqlserver_tde_encrypted_with_cmk",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN11.AR04",
+ "Description": "When encryption keys are accessed, the service MUST verify that\naccess to encryption keys is restricted to authorized personnel\nand services, following the principle of least privilege.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN11 Protect Encryption Keys",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that encryption keys are managed securely by enforcing\nthe use of approved algorithms, regular key rotation, and\ncustomer-managed encryption keys (CMEKs).",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH16"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-08",
+ "CEK-10",
+ "CEK-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12",
+ "SC-17"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "databricks_workspace_cmk_encryption_enabled",
+ "keyvault_rbac_enabled",
+ "keyvault_key_rotation_enabled",
+ "keyvault_key_expiration_set_in_non_rbac",
+ "keyvault_rbac_key_expiration_set",
+ "keyvault_access_only_through_private_endpoints",
+ "keyvault_private_endpoints",
+ "keyvault_logging_enabled",
+ "keyvault_recoverable",
+ "storage_ensure_encryption_with_customer_managed_keys"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN11.AR05",
+ "Description": "When encryption keys are used, the service MUST rotate active keys\nwithin 365 days of issuance.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN11 Protect Encryption Keys",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that encryption keys are managed securely by enforcing\nthe use of approved algorithms, regular key rotation, and\ncustomer-managed encryption keys (CMEKs).",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH16"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-08",
+ "CEK-10",
+ "CEK-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12",
+ "SC-17"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "keyvault_key_rotation_enabled",
+ "storage_ensure_encryption_with_customer_managed_keys",
+ "databricks_workspace_cmk_encryption_enabled",
+ "storage_key_rotation_90_days",
+ "keyvault_rbac_key_expiration_set",
+ "keyvault_rbac_secret_expiration_set",
+ "keyvault_key_expiration_set_in_non_rbac"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN11.AR06",
+ "Description": "When encryption keys are used, the service MUST rotate active keys\nwithin 90 days of issuance.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN11 Protect Encryption Keys",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that encryption keys are managed securely by enforcing\nthe use of approved algorithms, regular key rotation, and\ncustomer-managed encryption keys (CMEKs).",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH16"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-08",
+ "CEK-10",
+ "CEK-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12",
+ "SC-17"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "keyvault_key_rotation_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN14.AR01",
+ "Description": "When backups are created for disaster recovery purposes, the\nstorage mechanism MUST NOT allow modification or deletion\nwithin 30 days of creation.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN14 Maintain Recent Backups",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all backups used for disaster recovery are recent and\nsubject to a retention policy that limits deletion.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Use immutable storage solutions where possible. Implement backup\nretention policies that enforce a minimum retention period of 30\ndays.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": []
+ }
+ ],
+ "Checks": [
+ "vm_backup_enabled",
+ "vm_sufficient_daily_backup_retention_period"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN14.AR02",
+ "Description": "When backups are created for disaster recovery purposes, the\nmost recent backup MUST have a creation date within the past\n30 days.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN14 Maintain Recent Backups",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all backups used for disaster recovery are recent and\nsubject to a retention policy that limits deletion.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber"
+ ],
+ "Recommendation": "Implement automated backup processes to ensure that backups are\ncreated regularly. Monitor backup schedules and verify that the\nmost recent backup creation date is within the last 30 days.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": []
+ }
+ ],
+ "Checks": [
+ "vm_backup_enabled",
+ "vm_sufficient_daily_backup_retention_period"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN14.AR02",
+ "Description": "When backups are created for disaster recovery purposes, the\nmost recent backup MUST have a creation date within the past\n14 days.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN14 Maintain Recent Backups",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all backups used for disaster recovery are recent and\nsubject to a retention policy that limits deletion.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "Implement automated backup processes to ensure that backups are\ncreated regularly. Monitor backup schedules and verify that the\nmost recent backup creation date is within the last 14 days.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": []
+ }
+ ],
+ "Checks": [
+ "vm_backup_enabled",
+ "vm_sufficient_daily_backup_retention_period"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN03.AR01",
+ "Description": "When an entity attempts to modify the service through a user\ninterface, the authentication process MUST require multiple\nidentifying factors for authentication.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN03 Implement Multi-factor Authentication (MFA) for Access",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all sensitive activities require two or more identity\nfactors during authentication to prevent unauthorized access.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-14"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-7"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-03",
+ "IAM-08"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.4.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "IA-2"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "entra_non_privileged_user_has_mfa",
+ "entra_privileged_user_has_mfa",
+ "entra_conditional_access_policy_require_mfa_for_management_api",
+ "entra_security_defaults_enabled",
+ "entra_user_with_vm_access_has_mfa"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN03.AR02",
+ "Description": "When an entity attempts to modify the service through an API\nendpoint, the authentication process MUST require a credential\nsuch as an API key or token AND originate from within the trust\nperimeter.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN03 Implement Multi-factor Authentication (MFA) for Access",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all sensitive activities require two or more identity\nfactors during authentication to prevent unauthorized access.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-14"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-7"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-03",
+ "IAM-08"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.4.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "IA-2"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "entra_conditional_access_policy_require_mfa_for_management_api",
+ "entra_non_privileged_user_has_mfa",
+ "entra_privileged_user_has_mfa",
+ "entra_security_defaults_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN03.AR03",
+ "Description": "When an entity attempts to view information on the service through\na user interface, the authentication process MUST require multiple\nidentifying factors from the user.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN03 Implement Multi-factor Authentication (MFA) for Access",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all sensitive activities require two or more identity\nfactors during authentication to prevent unauthorized access.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-14"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-7"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-03",
+ "IAM-08"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.4.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "IA-2"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "entra_conditional_access_policy_require_mfa_for_management_api",
+ "entra_non_privileged_user_has_mfa",
+ "entra_privileged_user_has_mfa",
+ "entra_security_defaults_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN03.AR04",
+ "Description": "When an entity attempts to view information on the service through\nan API endpoint, the authentication process MUST require a\ncredential such as an API key or token AND originate from within\nthe trust perimeter.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN03 Implement Multi-factor Authentication (MFA) for Access",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all sensitive activities require two or more identity\nfactors during authentication to prevent unauthorized access.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-14"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-7"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-03",
+ "IAM-08"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.4.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "IA-2"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "entra_conditional_access_policy_require_mfa_for_management_api",
+ "entra_non_privileged_user_has_mfa",
+ "entra_privileged_user_has_mfa",
+ "entra_user_with_vm_access_has_mfa"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN05.AR01",
+ "Description": "When an attempt is made to modify data on the service or a child\nresource, the service MUST block requests from unauthorized\nentities.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN05 Prevent Access from Untrusted Entities",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that secure access controls enforce the principle of least\nprivilege to restrict access to authorized entities from explicitly\ntrusted sources only.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-01",
+ "DSP-07",
+ "DSP-08",
+ "DSP-10",
+ "DSP-17"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.3"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "aks_cluster_rbac_enabled",
+ "aks_network_policy_enabled",
+ "aks_clusters_public_access_disabled",
+ "app_client_certificates_on",
+ "app_ensure_auth_is_set_up",
+ "app_register_with_identity",
+ "app_function_identity_is_configured",
+ "app_function_identity_without_admin_privileges",
+ "app_function_not_publicly_accessible",
+ "app_function_access_keys_configured",
+ "iam_custom_role_has_permissions_to_administer_resource_locks",
+ "iam_subscription_roles_owner_custom_not_created",
+ "iam_role_user_access_admin_restricted",
+ "keyvault_rbac_enabled",
+ "keyvault_private_endpoints",
+ "keyvault_access_only_through_private_endpoints",
+ "entra_conditional_access_policy_require_mfa_for_management_api",
+ "entra_global_admin_in_less_than_five_users",
+ "entra_non_privileged_user_has_mfa",
+ "entra_security_defaults_enabled",
+ "entra_trusted_named_locations_exists",
+ "entra_user_with_vm_access_has_mfa",
+ "vm_jit_access_enabled",
+ "vm_linux_enforce_ssh_authentication"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN05.AR02",
+ "Description": "When administrative access or configuration change is attempted on\nthe service or a child resource, the service MUST refuse requests\nfrom unauthorized entities.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN05 Prevent Access from Untrusted Entities",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that secure access controls enforce the principle of least\nprivilege to restrict access to authorized entities from explicitly\ntrusted sources only.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-01",
+ "DSP-07",
+ "DSP-08",
+ "DSP-10",
+ "DSP-17"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.3"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "aks_cluster_rbac_enabled",
+ "app_register_with_identity",
+ "app_function_identity_is_configured",
+ "app_function_identity_without_admin_privileges",
+ "iam_custom_role_has_permissions_to_administer_resource_locks",
+ "iam_subscription_roles_owner_custom_not_created",
+ "iam_role_user_access_admin_restricted",
+ "containerregistry_not_publicly_accessible",
+ "containerregistry_uses_private_link",
+ "containerregistry_admin_user_disabled",
+ "cosmosdb_account_use_private_endpoints",
+ "cosmosdb_account_firewall_use_selected_networks",
+ "cosmosdb_account_use_aad_and_rbac",
+ "keyvault_rbac_enabled",
+ "keyvault_private_endpoints",
+ "keyvault_access_only_through_private_endpoints",
+ "storage_account_key_access_disabled",
+ "storage_ensure_private_endpoints_in_storage_accounts",
+ "storage_ensure_azure_services_are_trusted_to_access_is_enabled",
+ "storage_default_to_entra_authorization_enabled",
+ "network_http_internet_access_restricted",
+ "network_rdp_internet_access_restricted",
+ "network_ssh_internet_access_restricted",
+ "network_udp_internet_access_restricted",
+ "aks_clusters_public_access_disabled",
+ "app_function_not_publicly_accessible",
+ "entra_global_admin_in_less_than_five_users",
+ "entra_conditional_access_policy_require_mfa_for_management_api",
+ "entra_non_privileged_user_has_mfa",
+ "entra_privileged_user_has_mfa",
+ "entra_trusted_named_locations_exists",
+ "entra_user_with_vm_access_has_mfa"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN05.AR03",
+ "Description": "When administrative access or configuration change is attempted on\nthe service or a child resource in a multi-tenant environment, the\nservice MUST refuse requests across tenant boundaries unless the\norigin is explicitly included in a pre-approved allowlist.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN05 Prevent Access from Untrusted Entities",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that secure access controls enforce the principle of least\nprivilege to restrict access to authorized entities from explicitly\ntrusted sources only.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-01",
+ "DSP-07",
+ "DSP-08",
+ "DSP-10",
+ "DSP-17"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.3"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "entra_conditional_access_policy_require_mfa_for_management_api",
+ "entra_global_admin_in_less_than_five_users",
+ "entra_non_privileged_user_has_mfa",
+ "iam_role_user_access_admin_restricted",
+ "entra_trusted_named_locations_exists",
+ "keyvault_private_endpoints",
+ "keyvault_access_only_through_private_endpoints",
+ "keyvault_rbac_enabled",
+ "cosmosdb_account_firewall_use_selected_networks",
+ "cosmosdb_account_use_private_endpoints",
+ "containerregistry_not_publicly_accessible",
+ "containerregistry_uses_private_link",
+ "containerregistry_admin_user_disabled",
+ "network_http_internet_access_restricted",
+ "network_rdp_internet_access_restricted",
+ "network_ssh_internet_access_restricted",
+ "network_udp_internet_access_restricted",
+ "app_function_not_publicly_accessible",
+ "storage_default_network_access_rule_is_denied",
+ "storage_ensure_private_endpoints_in_storage_accounts",
+ "storage_blob_public_access_level_is_disabled",
+ "storage_cross_tenant_replication_disabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN05.AR04",
+ "Description": "When data is requested from outside the trust perimeter, the\nservice MUST refuse requests from unauthorized entities.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "",
+ "SubSection": "CCC.Core.CN05 Prevent Access from Untrusted Entities",
+ "SubSectionObjective": "Ensure that secure access controls enforce the principle of least\nprivilege to restrict access to authorized entities from explicitly\ntrusted sources only.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-01",
+ "DSP-07",
+ "DSP-08",
+ "DSP-10",
+ "DSP-17"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.3"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "aks_cluster_rbac_enabled",
+ "aks_network_policy_enabled",
+ "aks_clusters_public_access_disabled",
+ "app_register_with_identity",
+ "app_function_access_keys_configured",
+ "app_function_identity_is_configured",
+ "app_function_identity_without_admin_privileges",
+ "app_ensure_auth_is_set_up",
+ "app_function_not_publicly_accessible",
+ "containerregistry_not_publicly_accessible",
+ "containerregistry_uses_private_link",
+ "containerregistry_admin_user_disabled",
+ "keyvault_private_endpoints",
+ "keyvault_access_only_through_private_endpoints",
+ "keyvault_rbac_enabled",
+ "storage_account_key_access_disabled",
+ "storage_default_to_entra_authorization_enabled",
+ "storage_ensure_azure_services_are_trusted_to_access_is_enabled",
+ "storage_default_network_access_rule_is_denied",
+ "storage_secure_transfer_required_is_enabled",
+ "iam_role_user_access_admin_restricted",
+ "iam_subscription_roles_owner_custom_not_created",
+ "cosmosdb_account_use_aad_and_rbac",
+ "sqlserver_azuread_administrator_enabled",
+ "sqlserver_unrestricted_inbound_access",
+ "network_http_internet_access_restricted",
+ "network_rdp_internet_access_restricted",
+ "network_ssh_internet_access_restricted",
+ "network_udp_internet_access_restricted",
+ "vm_jit_access_enabled",
+ "entra_conditional_access_policy_require_mfa_for_management_api",
+ "entra_global_admin_in_less_than_five_users",
+ "entra_non_privileged_user_has_mfa",
+ "entra_privileged_user_has_mfa",
+ "entra_trusted_named_locations_exists",
+ "entra_user_with_vm_access_has_mfa"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN05.AR05",
+ "Description": "When any request is made from outside the trust perimeter,\nthe service MUST NOT provide any response that may indicate the\nservice exists.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN05 Prevent Access from Untrusted Entities",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that secure access controls enforce the principle of least\nprivilege to restrict access to authorized entities from explicitly\ntrusted sources only.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-01",
+ "DSP-07",
+ "DSP-08",
+ "DSP-10",
+ "DSP-17"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.3"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "aks_clusters_created_with_private_nodes",
+ "aks_clusters_public_access_disabled",
+ "aks_network_policy_enabled",
+ "app_function_not_publicly_accessible",
+ "app_register_with_identity",
+ "app_function_identity_is_configured",
+ "app_function_identity_without_admin_privileges",
+ "app_client_certificates_on",
+ "app_ensure_auth_is_set_up",
+ "containerregistry_not_publicly_accessible",
+ "containerregistry_uses_private_link",
+ "containerregistry_admin_user_disabled",
+ "keyvault_private_endpoints",
+ "keyvault_access_only_through_private_endpoints",
+ "keyvault_rbac_enabled",
+ "keyvault_logging_enabled",
+ "storage_account_key_access_disabled",
+ "storage_default_to_entra_authorization_enabled",
+ "storage_ensure_private_endpoints_in_storage_accounts",
+ "storage_ensure_azure_services_are_trusted_to_access_is_enabled",
+ "iam_custom_role_has_permissions_to_administer_resource_locks",
+ "iam_role_user_access_admin_restricted",
+ "iam_subscription_roles_owner_custom_not_created",
+ "vm_jit_access_enabled",
+ "vm_linux_enforce_ssh_authentication",
+ "network_http_internet_access_restricted",
+ "network_rdp_internet_access_restricted",
+ "network_ssh_internet_access_restricted",
+ "network_udp_internet_access_restricted"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN05.AR06",
+ "Description": "When any request is made to the service or a child resource, the\nservice MUST refuse requests from unauthorized entities.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN05 Prevent Access from Untrusted Entities",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that secure access controls enforce the principle of least\nprivilege to restrict access to authorized entities from explicitly\ntrusted sources only.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-01",
+ "DSP-07",
+ "DSP-08",
+ "DSP-10",
+ "DSP-17"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.3"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "aks_cluster_rbac_enabled",
+ "app_register_with_identity",
+ "app_function_identity_is_configured",
+ "app_function_identity_without_admin_privileges",
+ "app_function_access_keys_configured",
+ "app_function_not_publicly_accessible",
+ "iam_custom_role_has_permissions_to_administer_resource_locks",
+ "iam_role_user_access_admin_restricted",
+ "iam_subscription_roles_owner_custom_not_created",
+ "cosmosdb_account_use_aad_and_rbac",
+ "entra_global_admin_in_less_than_five_users",
+ "entra_non_privileged_user_has_mfa",
+ "entra_privileged_user_has_mfa",
+ "entra_conditional_access_policy_require_mfa_for_management_api",
+ "keyvault_rbac_enabled",
+ "vm_jit_access_enabled",
+ "vm_linux_enforce_ssh_authentication"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN04.AR01",
+ "Description": "When administrative access or configuration change is attempted on\nthe service or a child resource, the service MUST log the client\nidentity, time, and result of the attempt.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "The Logging & Monitoring control family ensures that access,\nchanges, and security-relevant events are captured, monitored,\nand alerted on in order to provide visibility, support\nincident response, and meet compliance requirements.\n",
+ "Section": "CCC.Core.CN04 Log All Access and Changes",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all access attempts are logged to maintain a detailed\naudit trail for security and compliance purposes.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.AE-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "LOG-08"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-2",
+ "AU-3",
+ "AU-12"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "monitor_diagnostic_settings_exists",
+ "monitor_diagnostic_setting_with_appropriate_categories",
+ "keyvault_logging_enabled",
+ "network_flow_log_captured_sent",
+ "monitor_storage_account_with_activity_logs_is_private",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted",
+ "monitor_alert_create_update_sqlserver_fr",
+ "monitor_alert_delete_nsg",
+ "monitor_alert_delete_public_ip_address_rule",
+ "monitor_alert_delete_security_solution",
+ "monitor_alert_create_policy_assignment",
+ "monitor_alert_create_update_public_ip_address_rule",
+ "monitor_alert_create_update_security_solution",
+ "monitor_alert_service_health_exists"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN04.AR02",
+ "Description": "When any attempt is made to modify data on the service or a child\nresource, the service MUST log the client identity, time, and\nresult of the attempt.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "The Logging & Monitoring control family ensures that access,\nchanges, and security-relevant events are captured, monitored,\nand alerted on in order to provide visibility, support\nincident response, and meet compliance requirements.\n",
+ "Section": "CCC.Core.CN04 Log All Access and Changes",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all access attempts are logged to maintain a detailed\naudit trail for security and compliance purposes.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.AE-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "LOG-08"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-2",
+ "AU-3",
+ "AU-12"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "monitor_diagnostic_settings_exists",
+ "monitor_diagnostic_setting_with_appropriate_categories",
+ "keyvault_logging_enabled",
+ "monitor_storage_account_with_activity_logs_is_private",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted",
+ "network_flow_log_captured_sent"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN04.AR03",
+ "Description": "When any attempt is made to read data on the service or a child\nresource, the service MUST log the client identity, time, and\nresult of the attempt.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "The Logging & Monitoring control family ensures that access,\nchanges, and security-relevant events are captured, monitored,\nand alerted on in order to provide visibility, support\nincident response, and meet compliance requirements.\n",
+ "Section": "CCC.Core.CN04 Log All Access and Changes",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all access attempts are logged to maintain a detailed\naudit trail for security and compliance purposes.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.AE-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "LOG-08"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-2",
+ "AU-3",
+ "AU-12"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "monitor_diagnostic_settings_exists",
+ "monitor_diagnostic_setting_with_appropriate_categories",
+ "keyvault_logging_enabled",
+ "app_http_logs_enabled",
+ "network_flow_log_captured_sent",
+ "monitor_storage_account_with_activity_logs_is_private",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN07.AR01",
+ "Description": "When enumeration activities are detected, the service MUST publish\nan event to a monitored channel which includes the client\nidentity, time, and nature of the activity.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "The Logging & Monitoring control family ensures that access,\nchanges, and security-relevant events are captured, monitored,\nand alerted on in order to provide visibility, support\nincident response, and meet compliance requirements.\n",
+ "Section": "CCC.Core.CN07 Alert on Unusual Enumeration Activity",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that logs and associated alerts are generated when\nunusual enumeration activity is detected that may indicate\nreconnaissance activities.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Implement event publication mechanisms and alerts for patterns\nindicative of enumeration activities, such as repeated access\nattempts, requests, or liveness probes. Configure alerts to notify\nsecurity teams of any activities that merit further investigation.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH15"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.AE-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "LOG-05",
+ "SEF-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "apim_threat_detection_llm_jacking"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN07.AR02",
+ "Description": "When enumeration activities are detected, the service MUST log the\nclient identity, time, and nature of the activity.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "The Logging & Monitoring control family ensures that access,\nchanges, and security-relevant events are captured, monitored,\nand alerted on in order to provide visibility, support\nincident response, and meet compliance requirements.\n",
+ "Section": "CCC.Core.CN07 Alert on Unusual Enumeration Activity",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that logs and associated alerts are generated when\nunusual enumeration activity is detected that may indicate\nreconnaissance activities.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Implement logging mechanisms to capture details of enumeration\nactivities, including client identity, timestamps, and activity\nnature. Retain logs according to organizational policies, and\noccasionally review them for patterns that may indicate\nreconnaissance activities.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH15"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.AE-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "LOG-05",
+ "SEF-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "monitor_diagnostic_settings_exists",
+ "monitor_diagnostic_setting_with_appropriate_categories",
+ "monitor_alert_create_update_sqlserver_fr",
+ "monitor_alert_delete_nsg",
+ "monitor_alert_delete_public_ip_address_rule",
+ "monitor_alert_delete_security_solution",
+ "monitor_alert_create_policy_assignment",
+ "monitor_alert_create_update_nsg",
+ "monitor_alert_create_update_public_ip_address_rule",
+ "monitor_alert_create_update_security_solution",
+ "monitor_alert_service_health_exists",
+ "monitor_storage_account_with_activity_logs_cmk_encrypted",
+ "monitor_storage_account_with_activity_logs_is_private"
+ ]
+ }
+ ]
+}
diff --git a/prowler/compliance/azure/mitre_attack_azure.json b/prowler/compliance/azure/mitre_attack_azure.json
index e2b6db4d68..92ddd72713 100644
--- a/prowler/compliance/azure/mitre_attack_azure.json
+++ b/prowler/compliance/azure/mitre_attack_azure.json
@@ -394,7 +394,32 @@
"Description": "Adversaries may abuse serverless computing, integration, and automation services to execute arbitrary code in cloud environments. Many cloud providers offer a variety of serverless resources, including compute engines, application integration services, and web servers.",
"TechniqueURL": "https://attack.mitre.org/techniques/T1648/",
"Checks": [],
- "Attributes": []
+ "Attributes": [
+ {
+ "AzureService": "Azure Activity Log",
+ "Category": "Detect",
+ "Value": "Significant",
+ "Comment": "Azure Activity Log captures all control plane operations including Azure Functions deployment, Logic Apps creation, and Azure Automation runbook execution. This provides Significant detection capability for identifying when serverless resources are created or modified, which could indicate adversaries establishing serverless execution capabilities. Activity Log records who performed the action, when, and from where."
+ },
+ {
+ "AzureService": "Azure Functions",
+ "Category": "Protect",
+ "Value": "Partial",
+ "Comment": "Azure Functions can be protected through authentication requirements, network restrictions (VNet integration), and managed identity configurations. Function-level authorization can restrict who can invoke functions. However, protection is Partial because authorized users with deployment permissions can still create and execute malicious functions, and proper security configurations are not always enforced by default."
+ },
+ {
+ "AzureService": "Microsoft Defender for Cloud",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Microsoft Defender for Cloud can detect suspicious serverless activity through alerts related to unusual function executions, suspicious automation runbook activities, and anomalous Logic Apps behavior. Defender for Cloud also provides security recommendations for serverless configurations. Coverage is Partial as it focuses on known malicious patterns and misconfigurations rather than all possible serverless abuse scenarios."
+ },
+ {
+ "AzureService": "Azure Policy",
+ "Category": "Protect",
+ "Value": "Minimal",
+ "Comment": "Azure Policy can enforce governance requirements on serverless resources, such as requiring specific configurations for Functions, Logic Apps, and Automation accounts. Policies can restrict deployment locations, require encryption, and enforce tagging. However, protection is Minimal against serverless execution abuse as policies focus on configuration compliance rather than preventing malicious code execution within properly configured serverless resources."
+ }
+ ]
},
{
"Name": "User Execution",
@@ -665,7 +690,32 @@
"Description": "Adversaries may abuse cloud management services to execute commands within virtual machines or hybrid-joined devices. Resources such as AWS Systems Manager, Azure RunCommand, and Runbooks allow users to remotely run scripts in virtual machines by leveraging installed virtual machine agents. Similarly, in Azure AD environments, Microsoft Endpoint Manager allows Global or Intune Administrators to run scripts as SYSTEM on on-premises devices joined to the Azure AD.",
"TechniqueURL": "https://attack.mitre.org/techniques/T1651/",
"Checks": [],
- "Attributes": []
+ "Attributes": [
+ {
+ "AzureService": "Azure Activity Log",
+ "Category": "Detect",
+ "Value": "Significant",
+ "Comment": "Azure Activity Log captures all Azure VM RunCommand operations, Azure Automation runbook executions, and Intune script deployments. This provides Significant detection capability for identifying when remote command execution is performed through cloud management services. Activity Log records detailed information about who executed commands, on which resources, and when, enabling effective monitoring of cloud administration command abuse."
+ },
+ {
+ "AzureService": "Azure Automation",
+ "Category": "Protect",
+ "Value": "Partial",
+ "Comment": "Azure Automation runbooks can be protected through role-based access control (RBAC), hybrid worker groups, and managed identities. Organizations can restrict who can create and execute runbooks. However, protection is Partial because authorized administrators with legitimate Automation access could potentially abuse these capabilities for malicious command execution, and runbook activity may be difficult to distinguish from legitimate automation."
+ },
+ {
+ "AzureService": "Microsoft Defender for Cloud",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Microsoft Defender for Cloud can detect suspicious patterns related to VM RunCommand usage and unusual automation activities through security alerts. Defender identifies anomalous command execution patterns and suspicious script deployments. Coverage is Partial as detection relies on known malicious patterns and baseline behavior, and may not catch all forms of cloud administration command abuse, especially when performed by authorized administrators."
+ },
+ {
+ "AzureService": "Microsoft Intune",
+ "Category": "Protect",
+ "Value": "Minimal",
+ "Comment": "Microsoft Intune provides script deployment capabilities that can be protected through administrative role assignments and compliance policies. However, protection is Minimal against command execution abuse as Intune is designed specifically for remote management and script execution. Authorized Intune administrators have legitimate need for these capabilities, making it difficult to prevent malicious use without impacting normal operations."
+ }
+ ]
},
{
"Name": "Implant Internal Image",
@@ -1184,7 +1234,32 @@
"Description": "Adversaries may attempt to bypass multi-factor authentication (MFA) mechanisms and gain access to accounts by generating MFA requests sent to users.",
"TechniqueURL": "https://attack.mitre.org/techniques/T1621/",
"Checks": [],
- "Attributes": []
+ "Attributes": [
+ {
+ "AzureService": "Azure AD Sign-in Logs",
+ "Category": "Detect",
+ "Value": "Significant",
+ "Comment": "Azure AD Sign-in Logs provide Significant detection capability for MFA fatigue attacks by recording all authentication attempts, MFA challenges, and their outcomes. These logs capture detailed information about repeated MFA prompts, failed MFA attempts, and unusual authentication patterns. Analysis of sign-in logs can reveal MFA bombing attempts where adversaries generate excessive MFA requests to fatigue users into approving malicious authentication attempts."
+ },
+ {
+ "AzureService": "Azure AD Conditional Access",
+ "Category": "Protect",
+ "Value": "Partial",
+ "Comment": "Azure AD Conditional Access can enforce MFA requirements and implement number matching or additional authentication context to make MFA fatigue attacks more difficult. Modern authentication methods like passwordless and FIDO2 are more resistant to MFA fatigue. However, protection is Partial because Conditional Access cannot prevent adversaries with valid credentials from generating MFA requests, and user awareness remains a critical factor."
+ },
+ {
+ "AzureService": "Microsoft Defender for Cloud Apps",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Microsoft Defender for Cloud Apps can detect unusual authentication patterns and repeated MFA attempts through anomaly detection policies. Defender for Cloud Apps identifies suspicious sign-in activities that may indicate MFA fatigue attacks. Coverage is Partial as it relies on behavioral analytics and may not detect all forms of MFA request generation, especially when patterns are subtle or gradually escalated."
+ },
+ {
+ "AzureService": "Azure AD Identity Protection",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Azure AD Identity Protection can detect risk associated with unusual authentication patterns and repeated MFA attempts. Identity Protection's risk detections can identify anomalous user behavior that may indicate MFA bombing. However, coverage is Partial as Identity Protection focuses on broader authentication risks and may not specifically identify all MFA fatigue attack patterns, especially those that mimic legitimate behavior."
+ }
+ ]
},
{
"Name": "Network Sniffing",
@@ -2242,7 +2317,32 @@
"Description": "Adversaries may enumerate objects in cloud storage infrastructure. Adversaries may use this information during automated discovery to shape follow-on behaviors, including requesting all or specific objects from cloud storage. Similar to File and Directory Discovery on a local host, after identifying available storage services (i.e. Cloud Infrastructure Discovery) adversaries may access the contents/objects stored in cloud infrastructure.",
"TechniqueURL": "https://attack.mitre.org/techniques/T1619/",
"Checks": [],
- "Attributes": []
+ "Attributes": [
+ {
+ "AzureService": "Azure Storage Analytics Logs",
+ "Category": "Detect",
+ "Value": "Significant",
+ "Comment": "Azure Storage Analytics Logs provide Significant detection capability for cloud storage enumeration by logging all operations against blob containers, file shares, and queues. These logs capture ListBlobs, ListContainers, and other enumeration operations, revealing when adversaries are discovering storage objects. Logs include details about who performed enumeration, from where, and what was accessed, enabling effective detection of storage reconnaissance."
+ },
+ {
+ "AzureService": "Azure Storage",
+ "Category": "Protect",
+ "Value": "Partial",
+ "Comment": "Azure Storage can be protected through shared access signatures (SAS), Azure AD authentication, and private endpoints to restrict access. Storage account firewalls and virtual network service endpoints can limit network access. However, protection is Partial because authorized users with storage access permissions can still enumerate objects, and restricting enumeration capabilities may impact legitimate operational needs."
+ },
+ {
+ "AzureService": "Microsoft Defender for Storage",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Microsoft Defender for Storage can detect unusual access patterns to storage accounts, including suspicious enumeration activities. Defender identifies anomalous blob listing operations and unusual data access patterns that may indicate reconnaissance. Coverage is Partial as it focuses on behavioral anomalies and may not detect all enumeration activities, especially when performed gradually or by authorized accounts."
+ },
+ {
+ "AzureService": "Azure Activity Log",
+ "Category": "Detect",
+ "Value": "Minimal",
+ "Comment": "Azure Activity Log captures control plane operations for storage accounts but provides only Minimal detection for storage object enumeration. Activity Log records storage account management operations like creating containers but does not capture data plane operations like listing individual blobs. For comprehensive enumeration detection, Storage Analytics Logs are required."
+ }
+ ]
},
{
"Name": "Network Service Discovery",
@@ -2381,7 +2481,32 @@
"Description": "Adversaries may gather information in an attempt to calculate the geographical location of a victim host. Adversaries may use the information from System Location Discovery during automated discovery to shape follow-on behaviors, including whether or not the adversary fully infects the target and/or attempts specific actions.",
"TechniqueURL": "https://attack.mitre.org/techniques/T1614/",
"Checks": [],
- "Attributes": []
+ "Attributes": [
+ {
+ "AzureService": "Azure Activity Log",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Azure Activity Log logs API calls that reveal location information such as queries about Azure regions, resource locations, and availability zones. These operations can indicate adversaries attempting to determine the geographic location of Azure resources. However, detection is Partial because Activity Log captures control plane operations but cannot monitor instance-level commands that query Azure Instance Metadata Service without additional logging mechanisms."
+ },
+ {
+ "AzureService": "Azure Monitor",
+ "Category": "Detect",
+ "Value": "Minimal",
+ "Comment": "Azure Monitor can collect logs from virtual machines that may capture location discovery commands if VM extensions and log collection are properly configured. However, this provides only Minimal detection as it requires deployment of monitoring agents and proper log forwarding configuration. Adversaries can also query location through metadata services that may not be captured by standard monitoring."
+ },
+ {
+ "AzureService": "Microsoft Defender for Cloud",
+ "Category": "Detect",
+ "Value": "Minimal",
+ "Comment": "Microsoft Defender for Cloud provides Minimal direct detection for system location discovery activities. Defender focuses on detecting security threats and vulnerabilities rather than reconnaissance queries about geographic location. Detection of location discovery would be indirect, potentially through identifying compromised resources that may be performing reconnaissance activities."
+ },
+ {
+ "AzureService": "Azure Virtual Network",
+ "Category": "Protect",
+ "Value": "Minimal",
+ "Comment": "Azure Virtual Network provides Minimal protection against system location discovery. While network security groups and virtual network configurations can restrict network access, adversaries with VM access can still query location information through Azure APIs and the Azure Instance Metadata Service. Network controls focus on connectivity rather than preventing location enumeration."
+ }
+ ]
},
{
"Name": "System Information Discovery",
diff --git a/prowler/compliance/gcp/ccc_gcp.json b/prowler/compliance/gcp/ccc_gcp.json
new file mode 100644
index 0000000000..5c780dcbee
--- /dev/null
+++ b/prowler/compliance/gcp/ccc_gcp.json
@@ -0,0 +1,8059 @@
+{
+ "Framework": "CCC",
+ "Version": "",
+ "Provider": "GCP",
+ "Name": "Common Cloud Controls Catalog (CCC)",
+ "Description": "Common Cloud Controls Catalog (CCC) for GCP",
+ "Requirements": [
+ {
+ "Id": "CCC.AuditLog.C01.TR01",
+ "Description": "When the signature validation process is performed, then it MUST detect any modification of data.",
+ "Attributes": [
+ {
+ "FamilyName": "Integrity",
+ "FamilyDescription": "Controls designed to protected the integrity of Audit Log data.",
+ "Section": "CCC.AuditLog.C01 Implement Digital Signatures With Hash Chaining",
+ "SubSection": "",
+ "SubSectionObjective": "Digital signatures allows for external verification of log data tampering and\nhash chaining allows for deleted log files to be detected.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "Ensure hash of data is included in digital signature.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06",
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-01"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_audit_logs_enabled",
+ "cloudstorage_bucket_log_retention_policy_lock",
+ "logging_sink_created",
+ "logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C01.TR02",
+ "Description": "When the signature validation process is performed, then it MUST detect any missing (deleted) log file.",
+ "Attributes": [
+ {
+ "FamilyName": "Integrity",
+ "FamilyDescription": "Controls designed to protected the integrity of Audit Log data.",
+ "Section": "CCC.AuditLog.C01 Implement Digital Signatures With Hash Chaining",
+ "SubSection": "",
+ "SubSectionObjective": "Digital signatures allows for external verification of log data tampering and\nhash chaining allows for deleted log files to be detected.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "Ensure verification process includes a chained hash function.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06",
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-01"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_audit_logs_enabled",
+ "logging_sink_created",
+ "logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C02.TR01",
+ "Description": "When a manual action is performed to generate each audit log type,\nthen the corresponding audit log type MUST be generated and recorded.",
+ "Attributes": [
+ {
+ "FamilyName": "Integrity",
+ "FamilyDescription": "Controls designed to protected the integrity of Audit Log data.",
+ "Section": "CCC.AuditLog.C02 Enable And Validate All Audit Log Types",
+ "SubSection": "",
+ "SubSectionObjective": "Review audit log configuration and ensure that all audit log types\nare being generated and replicated to configured sinks",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Review audit log configuration",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-2",
+ "AU-3",
+ "AU-12"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_audit_logs_enabled",
+ "logging_sink_created",
+ "logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_project_ownership_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_bucket_permission_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_custom_role_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_sql_instance_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_firewall_rule_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_route_changes_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C03.TR01",
+ "Description": "When an attempt is made to disable a log source, then an alert MUST be generated.",
+ "Attributes": [
+ {
+ "FamilyName": "Integrity",
+ "FamilyDescription": "Controls designed to protected the integrity of Audit Log data.",
+ "Section": "CCC.AuditLog.C03 Alert On Audit Log Changes And Access",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that specific alerts have been configured to detect changes in\naudit log configuration such as disabling exporting of logs.\nAlerts MUST also be created to detect changes in retention/object lock policies\nfor exported data log sources/buckets.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Ensure alerting is correctly configured\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-5",
+ "AU-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled",
+ "cloudstorage_bucket_log_retention_policy_lock",
+ "logging_sink_created",
+ "logging_log_metric_filter_and_alert_for_bucket_permission_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_custom_role_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_sql_instance_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_firewall_rule_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_route_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_project_ownership_changes_enabled",
+ "iam_audit_logs_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C03.TR02",
+ "Description": "When an attempt is made to alter the retention or object lock status\nof an external data log source or bucket, then an alert MUST be generated.",
+ "Attributes": [
+ {
+ "FamilyName": "Integrity",
+ "FamilyDescription": "Controls designed to protected the integrity of Audit Log data.",
+ "Section": "CCC.AuditLog.C03 Alert On Audit Log Changes And Access",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that specific alerts have been configured to detect changes in\naudit log configuration such as disabling exporting of logs.\nAlerts MUST also be created to detect changes in retention/object lock policies\nfor exported data log sources/buckets.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Ensure alerting is correctly configured\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-5",
+ "AU-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled",
+ "cloudstorage_bucket_log_retention_policy_lock",
+ "logging_sink_created"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C04.TR01",
+ "Description": "When audit log buckets are created then verify that server access\nlogging MUST be enabled for the audit log bucket,\nwith logs delivered to a separate, secure logging bucket.",
+ "Attributes": [
+ {
+ "FamilyName": "Integrity",
+ "FamilyDescription": "Controls designed to protected the integrity of Audit Log data.",
+ "Section": "CCC.AuditLog.C04 Ensure Access Logging Is Enabled on the Audit Log Bucket",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that access logging is enabled for the audit log storage bucket to\ncapture all requests made to the bucket, providing an audit trail of data access.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Configure the audit log bucket to enable server access logging.\nEnsure the target logging bucket is configured for appropriate security,\nincluding restricted access and immutability.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01",
+ "CCC.TH09"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-2",
+ "AU-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudstorage_bucket_log_retention_policy_lock",
+ "cloudstorage_bucket_public_access",
+ "cloudstorage_bucket_uniform_bucket_level_access",
+ "logging_sink_created"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C05.TR01",
+ "Description": "When audit logs are exported, then audit logs MUST be present in the configured data location.",
+ "Attributes": [
+ {
+ "FamilyName": "Availability",
+ "FamilyDescription": "Controls designed to protected the availability of Audit Log data.",
+ "Section": "CCC.AuditLog.C05 Export Audit Logs To Bucket",
+ "SubSection": "",
+ "SubSectionObjective": "Configure audit logs to be sent to a external bucket where they can be globally replicated\nand can be subject to greater access control and data retention polices.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Configure audit log exporting.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9",
+ "AU-11",
+ "AU-4"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "logging_sink_created",
+ "iam_audit_logs_enabled",
+ "cloudstorage_bucket_log_retention_policy_lock",
+ "cloudstorage_bucket_uniform_bucket_level_access",
+ "cloudstorage_bucket_public_access"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C06.TR01",
+ "Description": "When the retention policy is applied, then data MUST\nbe automatically deleted after the configured number of days.",
+ "Attributes": [
+ {
+ "FamilyName": "Availability",
+ "FamilyDescription": "Controls designed to protected the availability of Audit Log data.",
+ "Section": "CCC.AuditLog.C06 Enforce Retention Policy on Audit Log Bucket",
+ "SubSection": "",
+ "SubSectionObjective": "Configure a custom retention policy on the designated audit log bucket to ensure that logs are\nretained for the correct number of days as defined by your organization's policy.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green"
+ ],
+ "Recommendation": "Configure the audit log bucket's lifecycle rules or object retention settings to enforce\nthe required data retention period.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06",
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9",
+ "AU-11"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudstorage_bucket_log_retention_policy_lock",
+ "logging_sink_created"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C07.TR01",
+ "Description": "When a standard file deletion is attempted on an object within\nthe audit log bucket, then it MUST be prevented unless MFA is provided.",
+ "Attributes": [
+ {
+ "FamilyName": "Availability",
+ "FamilyDescription": "Controls designed to protected the availability of Audit Log data.",
+ "Section": "CCC.AuditLog.C07 Enforce MFA Delete on Audit Log Bucket",
+ "SubSection": "",
+ "SubSectionObjective": "Enable Multi-Factor Authentication (MFA) delete on the audit log bucket to\nprovide greater protection against accidental or malicious deletion of audit data.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green"
+ ],
+ "Recommendation": "Enable MFA Delete (or equivalent multi-factor authentication for delete operations)\non the audit log bucket.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06",
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9",
+ "AU-11"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudstorage_bucket_log_retention_policy_lock",
+ "iam_audit_logs_enabled",
+ "logging_sink_created"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C08.TR01",
+ "Description": "When an attempt is made to delete data before the object\nlock period expires, then the deletion MUST be denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Availability",
+ "FamilyDescription": "Controls designed to protected the availability of Audit Log data.",
+ "Section": "CCC.AuditLog.C08 Enable Object Lock On Audit Log Bucket",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that object log is enabled globally on all objects with the bucket.\nThe lock time MUST be configured to meet your organization, legal and compliance goals.\nDeletion attempts before the lock period MUST be denied.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Configure object lock policy.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9",
+ "AU-11"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudstorage_bucket_log_retention_policy_lock"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C09.TR01",
+ "Description": "When restricted fields are accessed by unauthorized users, then those fields MUST remain masked.",
+ "Attributes": [
+ {
+ "FamilyName": "Confidentiality",
+ "FamilyDescription": "Controls designed to protected the confidentiality of Audit Log data.",
+ "Section": "CCC.AuditLog.C09 Restrict Field And Log Type Access",
+ "SubSection": "",
+ "SubSectionObjective": "Configure access to audit logs to follow the principle of least privilege in particular where technically\npossible limit the log fields users have access to to prevent accidental exposure to sensitive\ninformation such as PII.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Review field level access controls on audit data.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6",
+ "AU-9",
+ "AC-3",
+ "PT-2",
+ "PT-3",
+ "PT-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.AuditLog.C10.TR01",
+ "Description": "When audit log storage bucket's are created then, bucket's access control settings MUST explicitly deny\npublic read and write access.",
+ "Attributes": [
+ {
+ "FamilyName": "Confidentiality",
+ "FamilyDescription": "Controls designed to protected the confidentiality of Audit Log data.",
+ "Section": "CCC.AuditLog.C10 Ensure Audit Bucket is Not Publicly Accessible",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that audit log storage buckets are not publicly accessible to prevent\nunauthorized exposure of sensitive log data.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green"
+ ],
+ "Recommendation": "Configure bucket policies and access control lists (ACLs) to restrict public access.\nRegularly review bucket permissions to ensure no public access has been inadvertently granted.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AA-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudstorage_bucket_public_access",
+ "cloudstorage_bucket_uniform_bucket_level_access",
+ "cloudstorage_bucket_log_retention_policy_lock"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C10.TR02",
+ "Description": "When the URL of a audit log storage bucket's object is accessed publicly then,\nit should be denied by bucket policy.",
+ "Attributes": [
+ {
+ "FamilyName": "Confidentiality",
+ "FamilyDescription": "Controls designed to protected the confidentiality of Audit Log data.",
+ "Section": "CCC.AuditLog.C10 Ensure Audit Bucket is Not Publicly Accessible",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that audit log storage buckets are not publicly accessible to prevent\nunauthorized exposure of sensitive log data.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green"
+ ],
+ "Recommendation": "Configure bucket policies and access control lists (ACLs) to restrict public access.\nRegularly review bucket permissions to ensure no public access has been inadvertently granted.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AA-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudstorage_bucket_public_access",
+ "cloudstorage_bucket_uniform_bucket_level_access"
+ ]
+ },
+ {
+ "Id": "CCC.Build.C01.TR01",
+ "Description": "Attempt to initiate a build using an unauthorized build agent and verify that the build is rejected.",
+ "Attributes": [
+ {
+ "FamilyName": "Access Control",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "",
+ "SubSection": "CCC.Build.C01 Restrict Allowed Build Agents",
+ "SubSectionObjective": "Ensure that builds are executed only on authorized build agents to maintain\ncontrol over the build environment and prevent unauthorized code execution.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Build.C02.TR01",
+ "Description": "Attempt to trigger a build from an unauthorized external service or\nrepository and verify that the build does not start.",
+ "Attributes": [
+ {
+ "FamilyName": "Access Control",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "",
+ "SubSection": "CCC.Build.C02 Restrict Allowed External Services for Build Triggers",
+ "SubSectionObjective": "Ensure that builds can only be triggered by authorized external services or\nrepositories to prevent unauthorized code execution or tampering.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Build.C03.TR01",
+ "Description": "Attempt to access the build environment from an external network and verify that access is denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "",
+ "SubSection": "CCC.Build.C03 Deny External Network Access for Build Environments",
+ "SubSectionObjective": "Ensure that build environments do not have external network access to\nprevent unauthorized external access and data exfiltration.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH02",
+ "CCC.TH05"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-5"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-7",
+ "SC-5"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "compute_firewall_rdp_access_from_the_internet_allowed",
+ "compute_firewall_ssh_access_from_the_internet_allowed",
+ "compute_instance_public_ip",
+ "cloudstorage_bucket_public_access",
+ "cloudsql_instance_public_ip",
+ "cloudsql_instance_public_access"
+ ]
+ },
+ {
+ "Id": "CCC.CntrReg.C01.TR01",
+ "Description": "Attempt to push an artifact with known vulnerabilities to the registry\nand observe if it is flagged or rejected by the vulnerability scanning process.",
+ "Attributes": [
+ {
+ "FamilyName": "Risk Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.CntrReg.C01 Implement Vulnerability Scanning for Artifacts",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that container images and artifacts stored in the container registry are scanned for\nvulnerabilities to identify and remediate security issues before deployment.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.CntrReg.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "ID.RA-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "RA-5",
+ "SI-5"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "artifacts_container_analysis_enabled",
+ "gcr_container_scanning_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.CntrReg.C02.TR01",
+ "Description": "Confirm that artifacts older than the specified retention period are automatically\ndeleted from the registry.",
+ "Attributes": [
+ {
+ "FamilyName": "Data Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.CntrReg.C02 Implement Cleanup Policies for Artifacts",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that unused or outdated artifacts are cleaned up according to defined policies to\nmanage storage effectively and reduce security risks associated with outdated versions.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH14"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.IP-6"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SI-12"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.DataWar.C01.TR01",
+ "Description": "Attempt to access underlying database tables directly without\nusing managed views and verify that access is denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.DataWar.C01 Enforce Use of Managed Views for Data Access",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that data access is provided through managed views, restricting users\nfrom accessing underlying tables directly and enforcing consistent security policies.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.DataWar.C02.TR01",
+ "Description": "Attempt to query sensitive columns without the necessary permissions and\nverify that access is denied or data is masked.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.DataWar.C02 Enforce Column-Level Security Policies",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that access to sensitive data columns is restricted based on user roles,\npreventing unauthorized access to sensitive information.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.DataWar.C03.TR01",
+ "Description": "Attempt to query data rows that the user should not have access to and verify\nthat access is denied or data is not returned.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.DataWar.C03 Enforce Row-Level Security Policies",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that access to data rows is restricted based on user roles or attributes,\npreventing unauthorized access to specific subsets of data.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_no_service_roles_at_project_level",
+ "iam_sa_no_administrative_privileges",
+ "iam_role_sa_enforce_separation_of_duties",
+ "iam_role_kms_enforce_separation_of_duties",
+ "iam_account_access_approval_enabled",
+ "iam_audit_logs_enabled",
+ "logging_sink_created",
+ "logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled",
+ "cloudsql_instance_postgres_enable_pgaudit_flag",
+ "cloudsql_instance_postgres_log_connections_flag",
+ "cloudsql_instance_postgres_log_disconnections_flag",
+ "cloudsql_instance_postgres_log_min_messages_flag",
+ "cloudsql_instance_postgres_log_min_duration_statement_flag",
+ "cloudsql_instance_postgres_log_error_verbosity_flag",
+ "cloudsql_instance_postgres_log_min_error_statement_flag",
+ "cloudsql_instance_public_ip",
+ "cloudsql_instance_private_ip_assignment",
+ "compute_firewall_ssh_access_from_the_internet_allowed",
+ "compute_firewall_rdp_access_from_the_internet_allowed",
+ "compute_instance_default_service_account_in_use",
+ "compute_instance_default_service_account_in_use_with_full_api_access",
+ "compute_instance_public_ip"
+ ]
+ },
+ {
+ "Id": "CCC.GenAI.C01.TR01",
+ "Description": "Untrusted input such as user queries, RAG data or tool output\nMUST be validated before it is passed to a GenAI model.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C01 Model Input Filtering and Sanitisation",
+ "SubSection": "",
+ "SubSectionObjective": "Inspect and validate input before it is passed to a GenAI\nmodel in order to filter or sanitise adversarial queries\nand prevent sensitive data leakage.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH01",
+ "CCC.GenAI.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-003",
+ "AIR-PREV-017",
+ "AIR-PREV-002",
+ "AIR-DET-001"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Input Validation and Sanitization"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0020",
+ "AML.M0021",
+ "AML.M0015"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.GenAI.C01.TR02",
+ "Description": "If malicious patterns such as prompt injection or sensitive\ndata are detected during input validation, the input MUST\nbe blocked or sanitised.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C01 Model Input Filtering and Sanitisation",
+ "SubSection": "",
+ "SubSectionObjective": "Inspect and validate input before it is passed to a GenAI\nmodel in order to filter or sanitise adversarial queries\nand prevent sensitive data leakage.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH01",
+ "CCC.GenAI.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-003",
+ "AIR-PREV-017",
+ "AIR-PREV-002",
+ "AIR-DET-001"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Input Validation and Sanitization"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0020",
+ "AML.M0021",
+ "AML.M0015"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.GenAI.C02.TR01",
+ "Description": "GenAI model output MUST be validated for format conformance,\nmalicious patterns, sensitive data and inapropriate content\nbefore being passed to users, application or plugins.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C02 Model Output Filtering and Sanitisation",
+ "SubSection": "",
+ "SubSectionObjective": "Inspect and validate GenAI model output before passing it to\nusers, applications or plugins in order to filter or sanitise\ninsecure or unreliable output and prevent sensitive data leakage.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH01",
+ "CCC.GenAI.TH03",
+ "CCC.GenAI.TH04",
+ "CCC.GenAI.TH05",
+ "CCC.GenAI.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-003",
+ "AIR-PREV-017",
+ "AIR-PREV-002",
+ "AIR-DET-001"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Output Validation and Sanitization"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0020",
+ "AML.M0002"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.GenAI.C02.TR02",
+ "Description": "In the event of policy violations, the AI-generated content MUST\nbe redacted, encoded or rejected.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C02 Model Output Filtering and Sanitisation",
+ "SubSection": "",
+ "SubSectionObjective": "Inspect and validate GenAI model output before passing it to\nusers, applications or plugins in order to filter or sanitise\ninsecure or unreliable output and prevent sensitive data leakage.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH01",
+ "CCC.GenAI.TH03",
+ "CCC.GenAI.TH04",
+ "CCC.GenAI.TH05",
+ "CCC.GenAI.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-003",
+ "AIR-PREV-017",
+ "AIR-PREV-002",
+ "AIR-DET-001"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Output Validation and Sanitization"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0020",
+ "AML.M0002"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.GenAI.C03.TR01",
+ "Description": "When data is designated for model training or RAG ingestion, then its\nsource MUST be explicitly approved and its provenance documented.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C03 Data Provenance and Source Vetting",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all data for training, fine-tuning or RAG comes\nfrom trusted, approved sources and is authorised for the\nintended purposes in order to prevent the initial introduction\nof malicious content or leaked sensitive data.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH02",
+ "CCC.GenAI.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-006"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Training Data Management"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0025"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "dataproc_encrypted_with_cmks_disabled",
+ "bigquery_dataset_cmk_encryption",
+ "bigquery_dataset_public_access",
+ "bigquery_table_cmk_encryption",
+ "cloudstorage_bucket_public_access",
+ "cloudstorage_bucket_uniform_bucket_level_access",
+ "cloudstorage_bucket_log_retention_policy_lock",
+ "kms_key_not_publicly_accessible",
+ "logging_sink_created",
+ "iam_audit_logs_enabled",
+ "iam_cloud_asset_inventory_enabled",
+ "logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.GenAI.C03.TR02",
+ "Description": "Data from unvetted sources MUST NOT be used in production systems.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C03 Data Provenance and Source Vetting",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all data for training, fine-tuning or RAG comes\nfrom trusted, approved sources and is authorised for the\nintended purposes in order to prevent the initial introduction\nof malicious content or leaked sensitive data.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH02",
+ "CCC.GenAI.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-006"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Training Data Management"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0025"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.GenAI.C04.TR01",
+ "Description": "When data is ingested for training, fine-tuning or conversion\nto vector embeddings, it MUST be validated for sensitive\ninformation or malicious content.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C04 Sanitisation of Ingested Data",
+ "SubSection": "",
+ "SubSectionObjective": "Validate and sanitise all data ingested by GenAI systems\nfrom extenal sources or internal knowledge bases, whether\nfor training, conversion to vector embeddings, or real-time\nretireval, in order to remove or redact poisoned or sensitive\ndata before further processing.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH02",
+ "CCC.GenAI.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-002"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Training Data Sanitization"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0007"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudstorage_bucket_public_access",
+ "cloudstorage_bucket_uniform_bucket_level_access",
+ "gcr_container_scanning_enabled",
+ "compute_instance_public_ip",
+ "compute_firewall_ssh_access_from_the_internet_allowed",
+ "compute_firewall_rdp_access_from_the_internet_allowed",
+ "dataproc_encrypted_with_cmks_disabled",
+ "bigquery_dataset_public_access",
+ "bigquery_table_cmk_encryption",
+ "cloudsql_instance_public_access",
+ "kms_key_not_publicly_accessible"
+ ]
+ },
+ {
+ "Id": "CCC.GenAI.C04.TR02",
+ "Description": "If sensitive data or malicious content is detected, it must\nbe rejected, redacted or flagged for manual review.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C04 Sanitisation of Ingested Data",
+ "SubSection": "",
+ "SubSectionObjective": "Validate and sanitise all data ingested by GenAI systems\nfrom extenal sources or internal knowledge bases, whether\nfor training, conversion to vector embeddings, or real-time\nretireval, in order to remove or redact poisoned or sensitive\ndata before further processing.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH02",
+ "CCC.GenAI.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-002"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Training Data Sanitization"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0007"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.GenAI.C05.TR01",
+ "Description": "When a RAG-enabled system generates a response containing information\nretrieved from its knowledge base, then the response MUST include a\nverifiable citation that links back to the specific source document.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.GenAI.C05 Citations and Source Traceability",
+ "SubSection": "",
+ "SubSectionObjective": "Require the GenAI system to provide citations or direct links\nback to the source documents used to generate a response, in\nto enhance the transparency, trustworthiness, and verifiability\nof AI-generated content.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH09",
+ "CCC.GenAI.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-DET-013"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_audit_logs_enabled",
+ "logging_sink_created",
+ "logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_bucket_permission_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_custom_role_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_sql_instance_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_firewall_rule_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_route_changes_enabled",
+ "iam_cloud_asset_inventory_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.GenAI.C06.TR01",
+ "Description": "When an LLM invokes an external tool (e.g., an API, a plugin),\nthen the tool MUST operate with the least privileges required\nfor performing its intended functionality.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.GenAI.C06 Least Privilege for Plugins",
+ "SubSection": "",
+ "SubSectionObjective": "Restricts the permissions of any external tools the GenAI system\ncan call to limit the potential damage if an agent is coerced\nto perform unintended actions or vulnerabilities in the tools\nare exploited.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH07",
+ "CCC.GenAI.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Agent Permissions"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "apikeys_api_restrictions_configured",
+ "compute_instance_default_service_account_in_use_with_full_api_access",
+ "compute_instance_default_service_account_in_use",
+ "gke_cluster_no_default_service_account",
+ "iam_no_service_roles_at_project_level",
+ "iam_sa_no_administrative_privileges",
+ "iam_sa_no_user_managed_keys",
+ "iam_sa_user_managed_key_rotate_90_days",
+ "iam_sa_user_managed_key_unused",
+ "iam_service_account_unused"
+ ]
+ },
+ {
+ "Id": "CCC.GenAI.C07.TR01",
+ "Description": "When an application makes an API call to a foundational model in a\nproduction environment, then it MUST specify an explicit version\nidentifier.",
+ "Attributes": [
+ {
+ "FamilyName": "Configuration Management",
+ "FamilyDescription": "The Configuration Management control family involves establishing,\nmaintaining and monitoring the configuration of the service and\nrelated applications and infrastructure to ensure consistency,\nsecure defaults and compliance.\n",
+ "Section": "CCC.GenAI.C07 Model Version Pinning",
+ "SubSection": "",
+ "SubSectionObjective": "Mandate that applications are locked (\"pinned\") to a specific,\ntested version of a foundational model to prevent unexpected\nbehaviour changes introduced by provider-side updates.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH10"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-010"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.GenAI.C08.TR01",
+ "Description": "When a new AI model is considered for production deployment, it\nMUST undergo a formal red teaming and quality assurance review.",
+ "Attributes": [
+ {
+ "FamilyName": "Model Assurance and Evaluation",
+ "FamilyDescription": "The Model Assurance and Evaluation control family encompasses\nthe proactiveand continuous processes of testing and validating\nthe AI model's behavior to ensure it aligns with safety, ethical,\nand quality standards.\n",
+ "Section": "CCC.GenAI.C08 Quality Control and Red Teaming",
+ "SubSection": "",
+ "SubSectionObjective": "Establish a formal program for quality evaluation and adversarial\ntesting (red teaming) to ensure GenAI system meet all business,\nquality, security and compliance requirements before getting deployed\ninto production environments.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH01",
+ "CCC.GenAI.TH02",
+ "CCC.GenAI.TH04",
+ "CCC.GenAI.TH08",
+ "CCC.GenAI.TH10"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-005"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Adversarial Training and Testing",
+ "Red Teaming",
+ "Product Governance"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0008"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "artifacts_container_analysis_enabled",
+ "gcr_container_scanning_enabled",
+ "cloudstorage_bucket_public_access",
+ "cloudstorage_bucket_log_retention_policy_lock",
+ "iam_audit_logs_enabled",
+ "iam_cloud_asset_inventory_enabled",
+ "logging_sink_created",
+ "bigquery_dataset_cmk_encryption",
+ "bigquery_table_cmk_encryption",
+ "kms_key_not_publicly_accessible",
+ "kms_key_rotation_enabled",
+ "dataproc_encrypted_with_cmks_disabled"
+ ]
+ },
+ {
+ "Id": "CCC.GenAI.C08.TR02",
+ "Description": "If model quality review or red teaming identifies an issue that exceeds\nthe organization's risk tolerance, the model MUST NOT be deployed until\nthe issue is remediated.",
+ "Attributes": [
+ {
+ "FamilyName": "Model Assurance and Evaluation",
+ "FamilyDescription": "The Model Assurance and Evaluation control family encompasses\nthe proactiveand continuous processes of testing and validating\nthe AI model's behavior to ensure it aligns with safety, ethical,\nand quality standards.\n",
+ "Section": "CCC.GenAI.C08 Quality Control and Red Teaming",
+ "SubSection": "",
+ "SubSectionObjective": "Establish a formal program for quality evaluation and adversarial\ntesting (red teaming) to ensure GenAI system meet all business,\nquality, security and compliance requirements before getting deployed\ninto production environments.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.GenAI.TH01",
+ "CCC.GenAI.TH02",
+ "CCC.GenAI.TH04",
+ "CCC.GenAI.TH08",
+ "CCC.GenAI.TH10"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-005"
+ ]
+ },
+ {
+ "ReferenceId": "SAIF",
+ "Identifiers": [
+ "Adversarial Training and Testing",
+ "Red Teaming",
+ "Product Governance"
+ ]
+ },
+ {
+ "ReferenceId": "MITRE-ATLAS",
+ "Identifiers": [
+ "AML.M0008"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "dataproc_encrypted_with_cmks_disabled",
+ "gcr_container_scanning_enabled",
+ "artifacts_container_analysis_enabled",
+ "iam_audit_logs_enabled",
+ "iam_cloud_asset_inventory_enabled",
+ "logging_sink_created",
+ "kms_key_not_publicly_accessible",
+ "bigquery_dataset_cmk_encryption",
+ "bigquery_dataset_public_access"
+ ]
+ },
+ {
+ "Id": "CCC.KeyMgmt.C01.TR01",
+ "Description": "When a key version is scheduled for deletion or disabled, an\nalert MUST be generated within five minutes.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging and Metrics Publication",
+ "FamilyDescription": "Controls that collect, alert, and retain key-management events.",
+ "Section": "CCC.KeyMgmt.C01 Alert on Key-version Changes",
+ "SubSection": "",
+ "SubSectionObjective": "Generate near-real-time alerts when a KMS key version is disabled or scheduled for deletion, enabling rapid investigation and recovery.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Use native event services (e.g., CloudWatch Events, Azure Monitor, Cloud Audit Logs) to route notifications to an incident-response channel.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.KeyMgmt.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "RS.AN-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "IR-5"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.KeyMgmt.C02.TR01",
+ "Description": "When IAM roles and key policies are reviewed, Decrypt permission\nMUST be granted exclusively to documented authorised principals.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls that enforce least-privilege use of KMS operations.",
+ "Section": "CCC.KeyMgmt.C02 Limit Decrypt Permissions",
+ "SubSection": "",
+ "SubSectionObjective": "Restrict the Decrypt operation to authorised principals only, applying the principle of least privilege to protect sensitive data.",
+ "Applicability": [
+ "tlp-green"
+ ],
+ "Recommendation": "Periodically audit policy documents via automated tooling and report any deviations.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.KeyMgmt.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "kms_key_not_publicly_accessible",
+ "iam_role_kms_enforce_separation_of_duties"
+ ]
+ },
+ {
+ "Id": "CCC.KeyMgmt.C03.TR01",
+ "Description": "When rotation settings are examined, rotation MUST be enabled with\nan interval not exceeding 365 days.",
+ "Attributes": [
+ {
+ "FamilyName": "Key Lifecycle Management",
+ "FamilyDescription": "Controls that govern creation, rotation, import, and retirement of cryptographic keys.",
+ "Section": "CCC.KeyMgmt.C03 Enforce Automatic Rotation",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure symmetric keys rotate automatically within policy intervals to reduce exposure of key material.",
+ "Applicability": [
+ "tlp-green"
+ ],
+ "Recommendation": "Use cloud-provider rotation features and verify via configuration scanning.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.KeyMgmt.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "kms_key_rotation_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.KeyMgmt.C04.TR01",
+ "Description": "When a key import request is processed, the key MUST use an\napproved algorithm (RSA-2048+, EC-P256+) and originate from a\ncertified HSM.",
+ "Attributes": [
+ {
+ "FamilyName": "Key Lifecycle Management",
+ "FamilyDescription": "Controls that govern creation, rotation, import, and retirement of cryptographic keys.",
+ "Section": "CCC.KeyMgmt.C04 Validate Imported Keys",
+ "SubSection": "",
+ "SubSectionObjective": "Accept only externally generated keys that meet approved cryptographic strength and provenance requirements.",
+ "Applicability": [
+ "tlp-green"
+ ],
+ "Recommendation": "Implement an approval workflow that validates attestation data before import.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.KeyMgmt.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "kms_key_not_publicly_accessible",
+ "kms_key_rotation_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.LB.C01.TR01",
+ "Description": "When a single client sends more than 2000 requests within any\n5-minute sliding window, the load balancer MUST throttle all\nsubsequent requests from that client for at least 60 seconds.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "Controls that detect anomalous traffic and record load-balancer activity.\n",
+ "Section": "CCC.LB.C01 Enforce and Detect Rate Limiting",
+ "SubSection": "",
+ "SubSectionObjective": "Detect and throttle malicious or excessive requests to prevent downstream resource exhaustion and brute-force activity.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Implement per-IP token-bucket limits with and verify via\nsynthetic traffic tests.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.LB.TH01",
+ "CCC.LB.TH09"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-1",
+ "PR.AC-7",
+ "PR.PT-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-6",
+ "SC-5",
+ "AC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "compute_loadbalancer_logging_enabled",
+ "compute_subnet_flow_logs_enabled",
+ "logging_sink_created",
+ "logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_firewall_rule_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_route_changes_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.LB.C01.TR02",
+ "Description": "When throttling is invoked, the load balancer MUST\nrecord the event in the access log within 5 minutes\nfor alerting and trend analysis.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "Controls that detect anomalous traffic and record load-balancer activity.\n",
+ "Section": "CCC.LB.C01 Enforce and Detect Rate Limiting",
+ "SubSection": "",
+ "SubSectionObjective": "Detect and throttle malicious or excessive requests to prevent downstream resource exhaustion and brute-force activity.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Enable access logging and configure metric filters\non HTTP 429 counts to trigger alerts.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.LB.TH01",
+ "CCC.LB.TH09"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-1",
+ "PR.AC-7",
+ "PR.PT-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-6",
+ "SC-5",
+ "AC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "compute_loadbalancer_logging_enabled",
+ "logging_sink_created"
+ ]
+ },
+ {
+ "Id": "CCC.LB.C06.TR01",
+ "Description": "When more than 10 percent of targets change from healthy to\nunhealthy within five minutes, an alert MUST be issued.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "Controls that detect anomalous traffic and record load-balancer activity.\n",
+ "Section": "CCC.LB.C06 Secure Health-Check Telemetry",
+ "SubSection": "",
+ "SubSectionObjective": "Monitor health-check endpoints for tampering and alert on\nabnormal status changes.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Instrument metrics for health check results and target\nremoval events. Configure monitoring alarms to alert\non abnormal spikes in unhealthy targets.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.LB.TH05"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.AE-2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SI-4"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "compute_loadbalancer_logging_enabled",
+ "logging_sink_created",
+ "compute_subnet_flow_logs_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.LB.C04.TR01",
+ "Description": "When routing weights change, the request MUST originate\nfrom an explicitly defined and trusted identity and MUST\nbe logged.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls that restrict who can change or query load-balancer resources.\n",
+ "Section": "CCC.LB.C04 Enforce Distribution Policies",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure traffic-splitting weights and algorithms are modified\nonly by trusted identities.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Define a list of trusted principals allowed to modify\nrouting configurations. Enforce via conditional access\npolicies, and log changes using audit logging.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.LB.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_audit_logs_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_route_changes_enabled",
+ "compute_loadbalancer_logging_enabled",
+ "logging_sink_created",
+ "iam_no_service_roles_at_project_level",
+ "iam_role_sa_enforce_separation_of_duties",
+ "iam_sa_no_administrative_privileges"
+ ]
+ },
+ {
+ "Id": "CCC.LB.C05.TR01",
+ "Description": "When stickiness is enabled, session cookies MUST expire\nwithin 30 minutes of inactivity.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls that restrict who can change or query load-balancer resources.\n",
+ "Section": "CCC.LB.C05 Validate Session Affinity",
+ "SubSection": "",
+ "SubSectionObjective": "Configure session persistence to minimise fixation and hijacking\nrisks.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Audit CCC.LB.F15 parameters via configuration scans.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.LB.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-7"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-23"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_no_service_roles_at_project_level",
+ "iam_sa_no_administrative_privileges",
+ "iam_role_kms_enforce_separation_of_duties",
+ "iam_role_sa_enforce_separation_of_duties",
+ "iam_account_access_approval_enabled",
+ "iam_audit_logs_enabled",
+ "logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_custom_role_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_route_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_firewall_rule_changes_enabled",
+ "logging_sink_created",
+ "logging_log_metric_filter_and_alert_for_project_ownership_changes_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.LB.C09.TR01",
+ "Description": "When an API call originates outside the approved CIDR\nset, the request MUST be denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls that restrict who can change or query load-balancer resources.\n",
+ "Section": "CCC.LB.C09 Restrict Management API Access",
+ "SubSection": "",
+ "SubSectionObjective": "Limit load-balancer API calls to authorised identities and\ntrusted networks.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Combine VPC endpoints with IAM condition-key filters for protected APIs.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.LB.TH08"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-5"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_account_access_approval_enabled",
+ "iam_audit_logs_enabled",
+ "iam_no_service_roles_at_project_level",
+ "iam_role_kms_enforce_separation_of_duties",
+ "iam_role_sa_enforce_separation_of_duties",
+ "iam_sa_no_administrative_privileges",
+ "logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_custom_role_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_sql_instance_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_firewall_rule_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_route_changes_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.LB.C02.TR01",
+ "Description": "When concurrent connections reach 80 percent of capacity, the\nautoscaling group MUST add at least one instance within five\nminutes.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "Controls that preserve availability and confidentiality of\ntraffic processed by the load balancer.\n",
+ "Section": "CCC.LB.C02 Auto-Scale Load Balancer Capacity",
+ "SubSection": "",
+ "SubSectionObjective": "Expand load-balancer capacity to maintain availability during traffic\nspikes.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Enable autoscaling policies.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.LB.TH09"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "ID.BE-5"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "CP-10"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.LB.C07.TR01",
+ "Description": "When responses pass through the load balancer, the\n\"Server\" header MUST be replaced with \"lb\".",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "Controls that preserve availability and confidentiality of\ntraffic processed by the load balancer.\n",
+ "Section": "CCC.LB.C07 Scrub Sensitive Headers",
+ "SubSection": "",
+ "SubSectionObjective": "Remove headers that disclose internal details or software\nversions from HTTP responses.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Configure header-transformation rules.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.TH15"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-13"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.LB.C08.TR01",
+ "Description": "When a certificate is within 30 days of expiry, automated renewal\nMUST complete and deploy a new certificate within 24 hours.",
+ "Attributes": [
+ {
+ "FamilyName": "Encryption",
+ "FamilyDescription": "Controls that ensure trustworthy TLS certificates and ciphers.",
+ "Section": "CCC.LB.C08 Automate Certificate Renewal",
+ "SubSection": "",
+ "SubSectionObjective": "Maintain valid TLS certificates by automating renewal and\ndeployment before expiry.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Use certificate-manager auto-renewal workflows.",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "LB",
+ "Identifiers": [
+ "CCC.LB.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-6"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-17"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Logging.C01.TR01",
+ "Description": "When a new cloud account is created, provider-level audit and network flow logging MUST be\nenabled by default and directed to the central sink.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "Controls related to the confidentiality, integrity and availability of log data.\n",
+ "Section": "CCC.Logging.C01 Centralized and Comprehensive Log Aggregation",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure all operational and security logs from across the cloud environment, including\napplications, operating systems, network traffic, and cloud service activity, are captured\nautomatically and streamed to a central, secure log management service.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Logging.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-2",
+ "AU-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_audit_logs_enabled",
+ "compute_subnet_flow_logs_enabled",
+ "logging_sink_created"
+ ]
+ },
+ {
+ "Id": "CCC.Logging.C01.TR02",
+ "Description": "When a new cloud compute resource is deployed, it MUST be configured to forward all relevant\nlogs (e.g., OS, application, service logs) to the central log sink.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "Controls related to the confidentiality, integrity and availability of log data.\n",
+ "Section": "CCC.Logging.C01 Centralized and Comprehensive Log Aggregation",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure all operational and security logs from across the cloud environment, including\napplications, operating systems, network traffic, and cloud service activity, are captured\nautomatically and streamed to a central, secure log management service.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Logging.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-2",
+ "AU-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "logging_sink_created",
+ "cloudstorage_bucket_log_retention_policy_lock",
+ "iam_audit_logs_enabled",
+ "compute_subnet_flow_logs_enabled",
+ "compute_network_dns_logging_enabled",
+ "compute_loadbalancer_logging_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Logging.C02.TR01",
+ "Description": "When a new log bucket or stream is created, its retention policy MUST be configured\nin accordance with organisation's data retention policy.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "Controls related to the confidentiality, integrity and availability of log data.\n",
+ "Section": "CCC.Logging.C02 Enforce Data Retention Policy for Logs",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that the retention period configured for logs aligns with the organization's\ndata retention policy.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Logging.TH05"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "GV.PO-01"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-11"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudstorage_bucket_log_retention_policy_lock"
+ ]
+ },
+ {
+ "Id": "CCC.Logging.C02.TR02",
+ "Description": "When a query is performed to retrieve log events older than the number of days defined\nin the organisation's data retention policy, it MUST return an empty result.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "Controls related to the confidentiality, integrity and availability of log data.\n",
+ "Section": "CCC.Logging.C02 Enforce Data Retention Policy for Logs",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that the retention period configured for logs aligns with the organization's\ndata retention policy.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Logging.TH05"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "GV.PO-01"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-11"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudstorage_bucket_log_retention_policy_lock"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C08.TR01",
+ "Description": "When an attempt is made to modify or delete data before the object\nlock period expires, then the action MUST be denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "Controls related to the confidentiality, integrity and availability of log data.\n",
+ "Section": "CCC.Logging.C03 Enable Object Lock On Log Bucket",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure log immutability by enabling Write Once, Read Many (WORM) protection\nusing object lock on log storage buckets. This prevents logs from being modified\nor deleted during the defined retention period, supporting compliance and forensic\nintegrity.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Configure object lock policy.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9",
+ "AU-11"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudstorage_bucket_log_retention_policy_lock"
+ ]
+ },
+ {
+ "Id": "CCC.AuditLog.C04.TR01",
+ "Description": "When restricted fields are accessed by unauthorized users, then those fields MUST remain masked.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls that restrict who can access and modify logs.\n",
+ "Section": "CCC.Logging.C04 Restrict Field And Log Type Access",
+ "SubSection": "",
+ "SubSectionObjective": "Configure access to logs to follow the principle of least privilege in particular where technically\npossible limit the log fields users have access to to prevent accidental exposure to sensitive\ninformation such as PII.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "Review field level access controls on log data.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Logging.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PS-04"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6",
+ "AU-9",
+ "AC-3",
+ "PT-2",
+ "PT-3",
+ "PT-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Logging.C05.TR01",
+ "Description": "When a log storage bucket is created, the bucket's access control settings MUST\nexplicitly deny public read and write access.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls that restrict who can access and modify logs.\n",
+ "Section": "CCC.Logging.C05 Ensure Log Bucket is Not Publicly Accessible",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that log storage buckets are not publicly accessible to prevent unauthorized\naccess to sensitive log data. In addition, logs should be replicated to another cloud\nregion to enhance availability, durability, and support disaster recovery requirements.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green"
+ ],
+ "Recommendation": "Configure bucket policies and access control lists (ACLs) to restrict public access.\nRegularly review bucket permissions to ensure no public access has been inadvertently granted.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AA-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudstorage_bucket_public_access",
+ "cloudstorage_bucket_uniform_bucket_level_access",
+ "cloudstorage_bucket_log_retention_policy_lock",
+ "logging_sink_created"
+ ]
+ },
+ {
+ "Id": "CCC.Logging.C05.TR02",
+ "Description": "When the URL of a log storage bucket's object is accessed publicly, the action MUST be denied\nby bucket policy.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls that restrict who can access and modify logs.\n",
+ "Section": "CCC.Logging.C05 Ensure Log Bucket is Not Publicly Accessible",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that log storage buckets are not publicly accessible to prevent unauthorized\naccess to sensitive log data. In addition, logs should be replicated to another cloud\nregion to enhance availability, durability, and support disaster recovery requirements.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green"
+ ],
+ "Recommendation": "Configure bucket policies and access control lists (ACLs) to restrict public access.\nRegularly review bucket permissions to ensure no public access has been inadvertently granted.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AA-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudstorage_bucket_public_access",
+ "cloudstorage_bucket_uniform_bucket_level_access"
+ ]
+ },
+ {
+ "Id": "CCC.Logging.C06.TR01",
+ "Description": "When a single principal executes an anomalously high number of log queries,\nan alert MUST be generated.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging and Monitoring",
+ "FamilyDescription": "Controls that collect, alert, and retain logging-related events.\n",
+ "Section": "CCC.Logging.C06 Detect and Alert on Potential Log Exfiltration",
+ "SubSection": "",
+ "SubSectionObjective": "Identify and alert on anomalous data access patterns that may indicate an attempt\nto exfiltrate log data.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Logging.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-03",
+ "DE.CM-09"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SI-4",
+ "CA-7",
+ "AU-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_bucket_permission_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_custom_role_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_sql_instance_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_firewall_rule_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_route_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_project_ownership_changes_enabled",
+ "logging_sink_created"
+ ]
+ },
+ {
+ "Id": "CCC.Logging.C07.TR01",
+ "Description": "When an audit log event is recorded that corresponds to a modification of the logging service\nconfiguration such as disabling a log trail, deleting a log sink, or altering a log forwarding rule,\nan alert MUST be generated.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging and Monitoring",
+ "FamilyDescription": "Controls that collect, alert, and retain logging-related events.\n",
+ "Section": "CCC.Logging.C07 Detect and Alert on Log Service Tampering",
+ "SubSection": "",
+ "SubSectionObjective": "Alert when any component of the critical logging infrastructure is disabled, modified,\nor deleted, indicating a defense evasion attempt.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH16"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-03",
+ "DE.CM-09"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SI-4",
+ "CA-7",
+ "AU-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_bucket_permission_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_custom_role_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_sql_instance_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_firewall_rule_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_route_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_project_ownership_changes_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C01.TR01",
+ "Description": "When a request is made to read a protected bucket, the service MUST prevent any request using KMS keys not listed as trusted by the organization.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C01 Prevent Unencrypted Requests",
+ "SubSection": "CCC.ObjStor.C01 Prevent Requests to Buckets or Objects with Untrusted KMS Keys",
+ "SubSectionObjective": "Prevent any requests to object storage buckets or objects using untrusted KMS keys to protect against unauthorized data encryption that can impact data availability and integrity.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01",
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DCS-04",
+ "DCS-06"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "kms_key_not_publicly_accessible",
+ "kms_key_rotation_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C01.TR02",
+ "Description": "When a request is made to read a protected object, the service MUST prevent any request using KMS keys not listed as trusted by the organization.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C01 Prevent Unencrypted Requests",
+ "SubSection": "CCC.ObjStor.C01 Prevent Requests to Buckets or Objects with Untrusted KMS Keys",
+ "SubSectionObjective": "Prevent any requests to object storage buckets or objects using untrusted KMS keys to protect against unauthorized data encryption that can impact data availability and integrity.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01",
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DCS-04",
+ "DCS-06"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.ObjStor.C01.TR03",
+ "Description": "When a request is made to write to a bucket, the service MUST prevent any request using KMS keys not listed as trusted by the organization.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C01 Prevent Unencrypted Requests",
+ "SubSection": "CCC.ObjStor.C01 Prevent Requests to Buckets or Objects with Untrusted KMS Keys",
+ "SubSectionObjective": "Prevent any requests to object storage buckets or objects using untrusted KMS keys to protect against unauthorized data encryption that can impact data availability and integrity.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01",
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DCS-04",
+ "DCS-06"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "kms_key_not_publicly_accessible",
+ "kms_key_rotation_enabled",
+ "bigquery_dataset_cmk_encryption",
+ "bigquery_table_cmk_encryption",
+ "dataproc_encrypted_with_cmks_disabled"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C01.TR04",
+ "Description": "When a request is made to write to an object, the service MUST prevent any request using KMS keys not listed as trusted by the organization.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C01 Prevent Unencrypted Requests",
+ "SubSection": "CCC.ObjStor.C01 Prevent Requests to Buckets or Objects with Untrusted KMS Keys",
+ "SubSectionObjective": "Prevent any requests to object storage buckets or objects using untrusted KMS keys to protect against unauthorized data encryption that can impact data availability and integrity.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01",
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DCS-04",
+ "DCS-06"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "kms_key_not_publicly_accessible",
+ "kms_key_rotation_enabled",
+ "dataproc_encrypted_with_cmks_disabled",
+ "compute_instance_encryption_with_csek_enabled",
+ "bigquery_dataset_cmk_encryption",
+ "bigquery_table_cmk_encryption"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C03.TR01",
+ "Description": "When an object storage bucket deletion is attempted, the bucket MUST be fully recoverable for a set time-frame after deletion is requested.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C03 Implement Multi-factor Authentication (MFA) for Access",
+ "SubSection": "CCC.ObjStor.C03 Prevent Bucket Deletion Through Irrevocable Bucket Retention Policy",
+ "SubSectionObjective": "Ensure that object storage bucket is not deleted after creation, and that the preventative measure cannot be unset.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-16"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.1.4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28",
+ "CP-10"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudstorage_bucket_log_retention_policy_lock"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C03.TR02",
+ "Description": "When an attempt is made to modify the retention policy for an object storage bucket, the service MUST prevent the policy from being modified.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C03 Implement Multi-factor Authentication (MFA) for Access",
+ "SubSection": "CCC.ObjStor.C03 Prevent Bucket Deletion Through Irrevocable Bucket Retention Policy",
+ "SubSectionObjective": "Ensure that object storage bucket is not deleted after creation, and that the preventative measure cannot be unset.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-16"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.1.4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28",
+ "CP-10"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudstorage_bucket_log_retention_policy_lock"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C04.TR01",
+ "Description": "When an object is uploaded to the object storage system, the object MUST automatically receive a default retention policy that prevents premature deletion or modification.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C04 Log All Access and Changes",
+ "SubSection": "CCC.ObjStor.C04 Objects have an Effective Retention Policy by Default",
+ "SubSectionObjective": "Ensure that all objects stored in the object storage system have a retention policy applied by default, preventing premature deletion or modification of objects and ensuring compliance with data retention regulations.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-16"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.1.4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28",
+ "CP-10"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudstorage_bucket_log_retention_policy_lock"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C04.TR02",
+ "Description": "When an attempt is made to delete or modify an object that is subject to an active retention policy, the service MUST prevent the action from being completed.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C04 Log All Access and Changes",
+ "SubSection": "CCC.ObjStor.C04 Objects have an Effective Retention Policy by Default",
+ "SubSectionObjective": "Ensure that all objects stored in the object storage system have a retention policy applied by default, preventing premature deletion or modification of objects and ensuring compliance with data retention regulations.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-16"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.1.4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28",
+ "CP-10"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudstorage_bucket_log_retention_policy_lock"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C05.TR01",
+ "Description": "When an object is uploaded to the object storage bucket, the object MUST be stored with a unique identifier.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C05 Prevent Access from Untrusted Entities",
+ "SubSection": "CCC.ObjStor.C05 Versioning is Enabled for All Objects in the Bucket",
+ "SubSectionObjective": "Ensure that versioning is enabled for all objects stored in the object storage bucket to enable recovery of previous versions of objects in case of loss or corruption.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.1.4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28",
+ "CP-10"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-16"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.ObjStor.C05.TR02",
+ "Description": "When an object is modified, the service MUST assign a new unique identifier to the modified object to differentiate it from the previous version.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C05 Prevent Access from Untrusted Entities",
+ "SubSection": "CCC.ObjStor.C05 Versioning is Enabled for All Objects in the Bucket",
+ "SubSectionObjective": "Ensure that versioning is enabled for all objects stored in the object storage bucket to enable recovery of previous versions of objects in case of loss or corruption.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.1.4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28",
+ "CP-10"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-16"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.ObjStor.C05.TR03",
+ "Description": "When an object is modified, the service MUST allow for recovery of previous versions of the object.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C05 Prevent Access from Untrusted Entities",
+ "SubSection": "CCC.ObjStor.C05 Versioning is Enabled for All Objects in the Bucket",
+ "SubSectionObjective": "Ensure that versioning is enabled for all objects stored in the object storage bucket to enable recovery of previous versions of objects in case of loss or corruption.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.1.4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28",
+ "CP-10"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-16"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.ObjStor.C05.TR04",
+ "Description": "When an object is deleted, the service MUST retain other versions of the object to allow for recovery of previous versions.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C05 Prevent Access from Untrusted Entities",
+ "SubSection": "CCC.ObjStor.C05 Versioning is Enabled for All Objects in the Bucket",
+ "SubSectionObjective": "Ensure that versioning is enabled for all objects stored in the object storage bucket to enable recovery of previous versions of objects in case of loss or corruption.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.1.4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-28",
+ "CP-10"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-16"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.ObjStor.C06.TR01",
+ "Description": "When an object storage bucket is accessed, the service MUST store access logs in a separate data store.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C06 Prevent Deployment in Restricted Regions",
+ "SubSection": "CCC.ObjStor.C06 Access Logs are Stored in a Separate Data Store",
+ "SubSectionObjective": "Ensure that access logs for object storage buckets are stored in a separate data store to protect against unauthorized access, tampering, or deletion of logs (Logbuckets are exempt from this requirement, but must be tlp-red).",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07",
+ "CCC.TH09"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-6"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-07",
+ "DSP-17"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2022 A.8.15.0"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9",
+ "SC-28"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudstorage_bucket_log_retention_policy_lock",
+ "logging_sink_created"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C02.TR01",
+ "Description": "When a permission set is allowed for an object in a bucket, the service MUST allow the same permission set to access all objects in the same bucket.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C02 Ensure Data Encryption at Rest for All Stored Data",
+ "SubSection": "CCC.ObjStor.C02 Enforce Uniform Bucket-level Access to Prevent Inconsistent Permissions",
+ "SubSectionObjective": "Ensure that uniform bucket-level access is enforced across all object storage buckets. This prevents the use of ad-hoc or inconsistent object-level permissions, ensuring centralized, consistent, and secure access management in accordance with the principle of least privilege.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.4.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "AC-6"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DCS-09"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudstorage_bucket_uniform_bucket_level_access"
+ ]
+ },
+ {
+ "Id": "CCC.ObjStor.C02.TR02",
+ "Description": "When a permission set is denied for an object in a bucket, the service MUST deny the same permission set to access all objects in the same bucket.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.C02 Ensure Data Encryption at Rest for All Stored Data",
+ "SubSection": "CCC.ObjStor.C02 Enforce Uniform Bucket-level Access to Prevent Inconsistent Permissions",
+ "SubSectionObjective": "Ensure that uniform bucket-level access is enforced across all object storage buckets. This prevents the use of ad-hoc or inconsistent object-level permissions, ensuring centralized, consistent, and secure access management in accordance with the principle of least privilege.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.4.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "AC-6"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DCS-09"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudstorage_bucket_uniform_bucket_level_access"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN01.AR01",
+ "Description": "Verify that only authorized users can access MLDE resources,\nand that access modes are properly defined and enforced.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN01 Define Access Mode for ML Development Environments",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that access to Machine Learning Development Environment (MLDE)\nresources is strictly defined and controlled.\nOnly authorized users with appropriate permissions can access these environments,\nmitigating the risk of unauthorized access, data leakage, or service disruption.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green",
+ "tlp-clear"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH01",
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.1.1",
+ "2013 A.9.2.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-2",
+ "AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-01",
+ "IAM-02"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_account_access_approval_enabled",
+ "iam_audit_logs_enabled",
+ "iam_no_service_roles_at_project_level",
+ "iam_role_kms_enforce_separation_of_duties",
+ "iam_role_sa_enforce_separation_of_duties",
+ "iam_sa_no_administrative_privileges",
+ "iam_sa_no_user_managed_keys",
+ "iam_sa_user_managed_key_rotate_90_days",
+ "iam_sa_user_managed_key_unused",
+ "iam_service_account_unused",
+ "gke_cluster_no_default_service_account",
+ "compute_instance_default_service_account_in_use",
+ "compute_instance_default_service_account_in_use_with_full_api_access"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN03.AR01",
+ "Description": "Verify that root access is disabled on MLDE instances containing sensitive data.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN03 Disable Root Access on MLDE Instances",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent users from obtaining root access on MLDE instances to reduce the\nrisk of unauthorized system modifications and potential security breaches.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-08",
+ "IAM-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.2.3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "compute_project_os_login_enabled",
+ "compute_instance_block_project_wide_ssh_keys_disabled",
+ "compute_firewall_ssh_access_from_the_internet_allowed"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN03.AR02",
+ "Description": "For MLDE instances without sensitive data, ensure that root access is only\nenabled when necessary and properly authorized.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN03 Disable Root Access on MLDE Instances",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent users from obtaining root access on MLDE instances to reduce the\nrisk of unauthorized system modifications and potential security breaches.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green",
+ "tlp-clear"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-08",
+ "IAM-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.2.3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "compute_firewall_ssh_access_from_the_internet_allowed",
+ "compute_firewall_rdp_access_from_the_internet_allowed",
+ "compute_instance_public_ip",
+ "compute_instance_block_project_wide_ssh_keys_disabled",
+ "compute_project_os_login_enabled",
+ "compute_instance_default_service_account_in_use",
+ "compute_instance_default_service_account_in_use_with_full_api_access",
+ "gke_cluster_no_default_service_account",
+ "iam_sa_no_administrative_privileges",
+ "iam_no_service_roles_at_project_level",
+ "iam_audit_logs_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN04.AR01",
+ "Description": "Verify that terminal access is disabled on MLDE instances containing sensitive data.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN04 Disable Terminal Access on MLDE Instances",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent users from accessing the terminal on MLDE instances to limit the risk of\nunauthorized commands and potential system compromise.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-08"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.2.3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "compute_instance_serial_ports_in_use"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN04.AR02",
+ "Description": "For MLDE instances without sensitive data, ensure that terminal access is only\nenabled when necessary and properly authorized.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN04 Disable Terminal Access on MLDE Instances",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent users from accessing the terminal on MLDE instances to limit the risk of\nunauthorized commands and potential system compromise.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green",
+ "tlp-clear"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-08"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.2.3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "compute_firewall_rdp_access_from_the_internet_allowed",
+ "compute_firewall_ssh_access_from_the_internet_allowed",
+ "compute_instance_serial_ports_in_use",
+ "compute_instance_public_ip"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN02.AR01",
+ "Description": "Confirm that file download functionality is disabled on MLDE instances containing sensitive data.",
+ "Attributes": [
+ {
+ "FamilyName": "Data Protection",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN02 Disable File Downloads on MLDE Instances",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent unauthorized file downloads from MLDE instances to protect sensitive data from being exfiltrated.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH02",
+ "CCC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-5"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSI-05",
+ "DSI-07"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.2.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-7",
+ "SC-8"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.MLDE.CN02.AR02",
+ "Description": "For MLDE instances without sensitive data, ensure that file downloads are monitored and logged.",
+ "Attributes": [
+ {
+ "FamilyName": "Data Protection",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "",
+ "SubSection": "CCC.MLDE.CN02 Disable File Downloads on MLDE Instances",
+ "SubSectionObjective": "Prevent unauthorized file downloads from MLDE instances to protect sensitive data from being exfiltrated.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green",
+ "tlp-clear"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH02",
+ "CCC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-5"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSI-05",
+ "DSI-07"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.2.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-7",
+ "SC-8"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_audit_logs_enabled",
+ "logging_sink_created",
+ "logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_bucket_permission_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_custom_role_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_sql_instance_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_firewall_rule_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_route_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_project_ownership_changes_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN05.AR01",
+ "Description": "Verify that only approved VM and container images can be selected when creating MLDE instances.",
+ "Attributes": [
+ {
+ "FamilyName": "Configuration Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "",
+ "SubSection": "CCC.MLDE.CN05 Restrict Environment Options on MLDE Instances",
+ "SubSectionObjective": "Limit the virtual machine and container image options available when creating\nnew MLDE instances to approved and secure configurations.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.IP-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "TVM-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.12.5.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "CM-2"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "artifacts_container_analysis_enabled",
+ "gcr_container_scanning_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN05.AR02",
+ "Description": "Attempt to create an MLDE instance with an unapproved image and confirm that it is denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Configuration Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "",
+ "SubSection": "CCC.MLDE.CN05 Restrict Environment Options on MLDE Instances",
+ "SubSectionObjective": "Limit the virtual machine and container image options available when creating\nnew MLDE instances to approved and secure configurations.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.IP-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "TVM-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.12.5.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "CM-2"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "artifacts_container_analysis_enabled",
+ "gcr_container_scanning_enabled",
+ "compute_instance_shielded_vm_enabled",
+ "compute_instance_confidential_computing_enabled",
+ "compute_instance_public_ip",
+ "compute_instance_ip_forwarding_is_enabled",
+ "compute_instance_default_service_account_in_use",
+ "compute_instance_serial_ports_in_use",
+ "compute_instance_block_project_wide_ssh_keys_disabled",
+ "compute_instance_encryption_with_csek_enabled",
+ "compute_firewall_ssh_access_from_the_internet_allowed",
+ "compute_firewall_rdp_access_from_the_internet_allowed"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN06.AR01",
+ "Description": "Verify that automatic scheduled upgrades are enabled on user-managed\nMLDE instances containing sensitive data.",
+ "Attributes": [
+ {
+ "FamilyName": "Vulnerability Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "",
+ "SubSection": "CCC.MLDE.CN06 Require Automatic Scheduled Upgrades on User-Managed MLDE Instances",
+ "SubSectionObjective": "Ensure that MLDE instances are kept up-to-date with the\nlatest security patches by enforcing automatic scheduled upgrades.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH04",
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.IP-12"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "TVM-01",
+ "TVM-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.12.6.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SI-2"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "artifacts_container_analysis_enabled",
+ "gcr_container_scanning_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN06.AR02",
+ "Description": "Ensure that the upgrade schedule is appropriately configured and\ndoes not interfere with critical operations.",
+ "Attributes": [
+ {
+ "FamilyName": "Vulnerability Management",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "",
+ "SubSection": "CCC.MLDE.CN06 Require Automatic Scheduled Upgrades on User-Managed MLDE Instances",
+ "SubSectionObjective": "Ensure that MLDE instances are kept up-to-date with the\nlatest security patches by enforcing automatic scheduled upgrades.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green",
+ "tlp-clear"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH04",
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.IP-12"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "TVM-01",
+ "TVM-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.12.6.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SI-2"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.MLDE.CN07.AR01",
+ "Description": "Verify that MLDE instances containing sensitive data cannot be accessed via public IP addresses.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "",
+ "SubSection": "CCC.MLDE.CN07 Restrict Public IP Access on MLDE Instances",
+ "SubSectionObjective": "Prevent public IP access to MLDE instances to reduce exposure to the internet and enhance security.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH02",
+ "CCC.VPC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "SEF-05"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "compute_instance_public_ip",
+ "compute_firewall_rdp_access_from_the_internet_allowed",
+ "compute_firewall_ssh_access_from_the_internet_allowed"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN07.AR02",
+ "Description": "For MLDE instances without sensitive data requiring public access,\nensure that appropriate security controls are in place and access is approved.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN07 Restrict Public IP Access on MLDE Instances",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent public IP access to MLDE instances to reduce exposure to the internet and enhance security.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green",
+ "tlp-clear"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH02",
+ "CCC.VPC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "SEF-05"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "compute_instance_public_ip",
+ "compute_firewall_rdp_access_from_the_internet_allowed",
+ "compute_firewall_ssh_access_from_the_internet_allowed",
+ "cloudsql_instance_public_ip",
+ "cloudsql_instance_private_ip_assignment",
+ "cloudsql_instance_public_access"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN08.AR01",
+ "Description": "Verify that MLDE instances containing sensitive data can only be deployed in\napproved virtual networks with appropriate security controls.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN08 Restrict Virtual Networks for MLDE Instances",
+ "SubSection": "",
+ "SubSectionObjective": "Limit the virtual networks that can be used when creating new MLDE instances to\nensure they are deployed within approved and secure network environments.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH01",
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.1.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "compute_network_default_in_use",
+ "compute_network_not_legacy",
+ "compute_firewall_rdp_access_from_the_internet_allowed",
+ "compute_firewall_ssh_access_from_the_internet_allowed",
+ "compute_instance_public_ip",
+ "cloudsql_instance_public_ip",
+ "cloudsql_instance_private_ip_assignment",
+ "cloudsql_instance_public_access"
+ ]
+ },
+ {
+ "Id": "CCC.MLDE.CN08.AR02",
+ "Description": "Ensure that MLDE instances without sensitive data are deployed in\nnetworks that meet organizational security standards.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.MLDE.CN08 Restrict Virtual Networks for MLDE Instances",
+ "SubSection": "",
+ "SubSectionObjective": "Limit the virtual networks that can be used when creating new MLDE instances to\nensure they are deployed within approved and secure network environments.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber",
+ "tlp-green",
+ "tlp-clear"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.MLDE.TH01",
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-4"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.1.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "compute_firewall_rdp_access_from_the_internet_allowed",
+ "compute_firewall_ssh_access_from_the_internet_allowed",
+ "compute_network_not_legacy",
+ "compute_network_default_in_use",
+ "compute_instance_public_ip",
+ "compute_instance_ip_forwarding_is_enabled",
+ "compute_instance_shielded_vm_enabled",
+ "compute_instance_serial_ports_in_use",
+ "cloudsql_instance_private_ip_assignment",
+ "cloudsql_instance_public_ip",
+ "cloudsql_instance_public_access",
+ "cloudstorage_bucket_public_access"
+ ]
+ },
+ {
+ "Id": "CCC.Message.CN01.AR01",
+ "Description": "Attempt to publish a message without using a customer-managed encryption key\nand verify that the message is rejected or not stored.",
+ "Attributes": [
+ {
+ "FamilyName": "Encryption",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.Message.CN01 Use Customer-Managed Encryption Keys (CMEK) for Messages",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that messages are encrypted using customer-managed encryption keys (CMEK)\nto provide enhanced control over encryption processes and keys, meeting compliance and security requirements.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12",
+ "SC-13"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "dataproc_encrypted_with_cmks_disabled",
+ "compute_instance_encryption_with_csek_enabled",
+ "bigquery_dataset_cmk_encryption",
+ "bigquery_table_cmk_encryption",
+ "kms_key_not_publicly_accessible",
+ "kms_key_rotation_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Monitor.CN01.AR01",
+ "Description": "When an External Monitoring system exceeds the anticipated rate of monitoring checks then\nRate Limiting MUST be applied and an Audit Alert MUST be generated.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "Controls that collect, alert, and retain events from other monitoring services.",
+ "Section": "CCC.Monitor.CN01 Rate Limiting on External Monitoring",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent DoS attacks using External Monitoring tools.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Monitor.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.IR-01",
+ "DE.CM-01"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-5",
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_audit_logs_enabled",
+ "logging_sink_created",
+ "cloudstorage_bucket_log_retention_policy_lock",
+ "logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_bucket_permission_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_custom_role_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_sql_instance_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_firewall_rule_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_route_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_project_ownership_changes_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Monitor.CN02.AR01",
+ "Description": "When an Custom or User-Defined Metric starts to flood a collector, then a rate limit MUST be applied\nto reduce the network impact of traffic and an alert must triggered.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "Controls that collect, alert, and retain events from other monitoring services.",
+ "Section": "CCC.Monitor.CN02 Rate Limiting on Metric Generation",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent Malicious Actor or misconfiguration from flooding services with metric data.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Monitor.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-01"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-5(2)",
+ "CA-7",
+ "SI-4"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "logging_sink_created",
+ "logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_bucket_permission_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_custom_role_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_sql_instance_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_firewall_rule_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_project_ownership_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_route_changes_enabled",
+ "iam_audit_logs_enabled",
+ "compute_loadbalancer_logging_enabled",
+ "compute_network_dns_logging_enabled",
+ "compute_subnet_flow_logs_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Monitor.CN03.AR01",
+ "Description": "When external systems have approved access to internal systems not normally available for public access\nthen they MUST be secured to prevent unauthorised access jumping through to the internal systems and\nonly allow access to specific internal services.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls designed to prevent unauthorised access to monitoring features.",
+ "Section": "CCC.Monitor.CN03 Access External Monitoring",
+ "SubSection": "",
+ "SubSectionObjective": "Control access to Synthetic monitoring solutions using API keys or Certificate based authentication to\nensure they don't become an attack path, preventing monitoring systems from forging network requests to\ngain access to internal systems.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Monitor.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-06",
+ "PR.IR-01",
+ "PR.AA-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "apikeys_api_restrictions_configured",
+ "apikeys_key_exists",
+ "apikeys_key_rotated_in_90_days"
+ ]
+ },
+ {
+ "Id": "CCC.Monitor.CN04.AR01",
+ "Description": "When monitoring dashboards display degraded services which may become potential targets then the\ndashboard MUST be protected from unauthorised access.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls designed to prevent unauthorised access to monitoring features.",
+ "Section": "CCC.Monitor.CN04 Restrict access to Monitoring Dashboards",
+ "SubSection": "",
+ "SubSectionObjective": "Control access to Monitoring Dashboards and reports to ensure they don't highlight an attack path.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Monitor.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.CM-09",
+ "DE.AE-03"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SI-4",
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Monitor.CN05.AR01",
+ "Description": "When monitoring services have generated an alert, the service MUST ensure only authorised\nresponders silence or acknowledge the alert.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls designed to prevent unauthorised access to monitoring features.",
+ "Section": "CCC.Monitor.CN05 Restrict access to silence or acknowledge an alert",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure only a subset of users can silence or acknowledge alerts to prevent attackers hiding their activity.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH10"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.IR-01",
+ "PR.AA-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_bucket_permission_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_custom_role_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_sql_instance_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_firewall_rule_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_route_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_project_ownership_changes_enabled",
+ "logging_sink_created",
+ "iam_organization_essential_contacts_configured"
+ ]
+ },
+ {
+ "Id": "CCC.Monitor.CN06.AR01",
+ "Description": "When systems push metrics or traces they MUST be authenticated for that particular type of metric or trace",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "Controls designed to prevent unauthorised access to monitoring features.",
+ "Section": "CCC.Monitor.CN06 Metrics pushed for authorised services only",
+ "SubSection": "",
+ "SubSectionObjective": "Use IAM to control which types of metrics or traces can be pushed by different system to avoid a compromised\nsystem pushing fabricated metrics about a different service",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Monitor.TH05"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AA-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-5"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "compute_instance_default_service_account_in_use",
+ "compute_instance_default_service_account_in_use_with_full_api_access",
+ "gke_cluster_no_default_service_account",
+ "iam_no_service_roles_at_project_level",
+ "iam_sa_no_administrative_privileges",
+ "iam_sa_no_user_managed_keys",
+ "iam_sa_user_managed_key_rotate_90_days",
+ "iam_sa_user_managed_key_unused",
+ "iam_service_account_unused"
+ ]
+ },
+ {
+ "Id": "CCC.SecMgmt.CN01.AR01",
+ "Description": "Attempt to use an outdated version of a secret after its rotation period\nhas passed and verify that access is denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Data Protection",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.SecMgmt.CN01 Enforce Automatic Secret Rotation",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that secrets are automatically rotated on a defined schedule to\nreduce the risk of secret compromise and unauthorized access.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01",
+ "CCC.TH14"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-6"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12",
+ "SC-28"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "apikeys_key_rotated_in_90_days",
+ "iam_sa_user_managed_key_rotate_90_days",
+ "kms_key_rotation_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.SecMgmt.CN02.AR01",
+ "Description": "Attempt to retrieve a secret from an unauthorized region and verify that access is denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Data Protection",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.SecMgmt.CN02 Enforce Secret Replication Policies",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that secrets are replicated only to authorized locations as per\norganizational data residency and compliance requirements.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH03",
+ "CCC.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-5"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3",
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.SvlsComp.CN01.AR01",
+ "Description": "Attempt to access the serverless function over the public internet and verify that access is denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.SvlsComp.CN01 Enforce Use of Private Endpoints for Serverless Function",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that the serverless function is accessible only through a private endpoint,\nallowing it to communicate securely within a virtual private network and preventing\nunauthorized external access.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-5"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-7",
+ "SC-8"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "compute_firewall_rdp_access_from_the_internet_allowed",
+ "compute_firewall_ssh_access_from_the_internet_allowed",
+ "compute_instance_public_ip",
+ "cloudsql_instance_public_ip",
+ "cloudsql_instance_public_access",
+ "cloudsql_instance_private_ip_assignment",
+ "cloudstorage_bucket_public_access",
+ "bigquery_dataset_public_access",
+ "compute_public_address_shodan"
+ ]
+ },
+ {
+ "Id": "CCC.SvlsComp.CN02.AR01",
+ "Description": "Send requests to invoke the function up to the allowed threshold and confirm they\nare successful; then send additional requests exceeding the threshold from the same\nentity and verify that they are denied.",
+ "Attributes": [
+ {
+ "FamilyName": "Availability",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.SvlsComp.CN02 Implement Function Invocation Rate Limits",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that function invocation is limited to a specified threshold from any single entity,\npreventing resource exhaustion and denial of service attacks.",
+ "Applicability": [
+ "tlp-red",
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH12"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-4"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-5"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.VPC.CN01.AR01",
+ "Description": "When a subscription is created, the subscription MUST NOT\ncontain default network resources.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.VPC.CN01 Restrict Default Network Creation",
+ "SubSection": "",
+ "SubSectionObjective": "Restrict the automatic creation of default virtual networks and related\nresources during subscription initialization to avoid insecure default\nconfigurations and enforce custom network policies.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.VPC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-5"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "TVM-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.12.3.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-7"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "compute_network_default_in_use"
+ ]
+ },
+ {
+ "Id": "CCC.VPC.CN02.AR01",
+ "Description": "When a resource is created in a public subnet, that resource\nMUST NOT be assigned an external IP address by default.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.VPC.CN02 Limit Resource Creation in Public Subnet",
+ "SubSection": "",
+ "SubSectionObjective": "Restrict the creation of resources in the public subnet with\ndirect access to the internet to minimize attack surfaces.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.VPC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "SEF-05"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-4"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "compute_firewall_rdp_access_from_the_internet_allowed",
+ "compute_firewall_ssh_access_from_the_internet_allowed",
+ "compute_instance_public_ip",
+ "cloudsql_instance_public_ip",
+ "cloudsql_instance_public_access"
+ ]
+ },
+ {
+ "Id": "CCC.VPC.CN03.AR01",
+ "Description": "When a VPC peering connection is requested, the service MUST\nprevent connections from VPCs that are not explicitly\nallowed.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.VPC.CN03 Restrict VPC Peering to Authorized Accounts",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure VPC peering connections are only established with explicitly\nauthorized destinations to limit network exposure and enforce boundary\ncontrols.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.VPC.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IVS-01"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.3"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-4"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.VPC.CN04.AR01",
+ "Description": "When any network traffic goes to or from an interface in the VPC,\nthe service MUST capture and log all relevant information.",
+ "Attributes": [
+ {
+ "FamilyName": "Network Security",
+ "FamilyDescription": "TODO: Describe this control family",
+ "Section": "CCC.VPC.CN04 Enforce VPC Flow Logs on VPCs",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure VPCs are configured with flow logs enabled to capture traffic\ninformation.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.VPC.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PT-1"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.12.4.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-2"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IVS-06"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "compute_subnet_flow_logs_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Vector.CN01.AR01",
+ "Description": "When a vector embedding is submitted for indexing, the system MUST validate that it\nmatches expected schema, dimension, and format profiles.",
+ "Attributes": [
+ {
+ "FamilyName": "Vector Indexing",
+ "FamilyDescription": "Controls specific to the management and protection of vector embedding and index operations.",
+ "Section": "CCC.Vector.CN01 Validate Embeddings Before Indexing",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure all incoming embeddings are structurally and statistically validated\nbefore indexing to prevent poisoning or corruption.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Vector.TH02",
+ "CCC.Vector.TH05",
+ "CCC.TH12"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-002"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Vector.CN02.AR01",
+ "Description": "When an index lifecycle event is triggered, the service MUST\nverify that the actor has explicit permissions for the operation type.",
+ "Attributes": [
+ {
+ "FamilyName": "Vector Indexing",
+ "FamilyDescription": "Controls specific to the management and protection of vector embedding and index operations.",
+ "Section": "CCC.Vector.CN02 Enforce Role-Based Index Lifecycle Management",
+ "SubSection": "",
+ "SubSectionObjective": "Restrict index lifecycle operations (create, delete, rollback) to privileged\nidentities using fine-grained access controls.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Vector.TH02",
+ "CCC.Vector.TH04",
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-012"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_role_kms_enforce_separation_of_duties",
+ "iam_role_sa_enforce_separation_of_duties",
+ "iam_sa_no_administrative_privileges",
+ "iam_no_service_roles_at_project_level",
+ "kms_key_not_publicly_accessible"
+ ]
+ },
+ {
+ "Id": "CCC.Vector.CN03.AR01",
+ "Description": "When a metadata filter is applied to a query, the service MUST\nverify the requester is authorized to access that field.",
+ "Attributes": [
+ {
+ "FamilyName": "Vector Indexing",
+ "FamilyDescription": "Controls specific to the management and protection of vector embedding and index operations.",
+ "Section": "CCC.Vector.CN03 Enforce Metadata-Level Access Controls",
+ "SubSection": "",
+ "SubSectionObjective": "Apply access control policies to metadata fields used in filtering to\nprevent unauthorized exposure or inference.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Vector.TH03",
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-DET-001",
+ "AIR-PREV-012",
+ "AIR-DET-016"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_audit_logs_enabled",
+ "iam_account_access_approval_enabled",
+ "iam_no_service_roles_at_project_level",
+ "iam_role_sa_enforce_separation_of_duties",
+ "iam_sa_no_administrative_privileges",
+ "cloudstorage_bucket_public_access",
+ "cloudstorage_bucket_uniform_bucket_level_access",
+ "iam_cloud_asset_inventory_enabled",
+ "compute_instance_default_service_account_in_use"
+ ]
+ },
+ {
+ "Id": "CCC.Vector.CN04.AR01",
+ "Description": "When ingestion exceeds pre-defined thresholds, the service MUST\nthrottle or reject excess vector write operations.",
+ "Attributes": [
+ {
+ "FamilyName": "Vector Indexing",
+ "FamilyDescription": "Controls specific to the management and protection of vector embedding and index operations.",
+ "Section": "CCC.Vector.CN04 Enforce Ingestion Quotas and Throttling",
+ "SubSection": "",
+ "SubSectionObjective": "Prevent ingestion-based DoS or index pollution by\nrate-limiting vector submissions and enforcing quotas.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Vector.TH02",
+ "CCC.TH12"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-008"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Vector.CN05.AR01",
+ "Description": "When a rollback is attempted, the system MUST log\nthe action and verify rollback authorization.",
+ "Attributes": [
+ {
+ "FamilyName": "Vector Indexing",
+ "FamilyDescription": "Controls specific to the management and protection of vector embedding and index operations.",
+ "Section": "CCC.Vector.CN05 Enforce Index Versioning with Rollback Protection",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure vector indexes are versioned and that rollback\noperations are authorized and auditable.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Vector.TH04",
+ "CCC.TH09",
+ "CCC.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "AIR-DET-004",
+ "Identifiers": [
+ "AIR-PREV-008"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_audit_logs_enabled",
+ "logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled",
+ "logging_sink_created",
+ "logging_log_metric_filter_and_alert_for_bucket_permission_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_project_ownership_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_route_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_firewall_rule_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_sql_instance_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_custom_role_changes_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Vector.CN06.AR01",
+ "Description": "When an embedding is submitted, the service MUST validate\nthat its format and dimensionality match allowed profiles.",
+ "Attributes": [
+ {
+ "FamilyName": "Vector Indexing",
+ "FamilyDescription": "Controls specific to the management and protection of vector embedding and index operations.",
+ "Section": "CCC.Vector.CN06 Enforce Dimensional and Format Constraints",
+ "SubSection": "",
+ "SubSectionObjective": "Reject embeddings that do not conform to expected model\nspecifications (dimensions, format, etc).",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Vector.TH05",
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "FINOS-AIGF",
+ "Identifiers": [
+ "AIR-PREV-002"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Vector.CN07.AR01",
+ "Description": "When a search request is issued, clients MUST be allowed\nto declare their requirement for exact vs approximate results.",
+ "Attributes": [
+ {
+ "FamilyName": "Vector Indexing",
+ "FamilyDescription": "Controls specific to the management and protection of vector embedding and index operations.",
+ "Section": "CCC.Vector.CN07 Support Explicit ANN vs. Exact Search Configuration",
+ "SubSection": "",
+ "SubSectionObjective": "Provide clients with the option to enforce exact-match\n(non-ANN) search where search fidelity is critical.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.Vector.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": []
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Core.CN01.AR01",
+ "Description": "When a port is exposed for non-SSH network traffic, all traffic\nMUST include a TLS handshake AND be encrypted using TLS 1.3 or\nhigher.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN01 Encrypt Data for Transmission",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all communications are encrypted in transit to protect\ndata integrity and confidentiality.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Most cloud services enable TLS 1.3 by default. Where it is not\nalready set, ensure that your services are configured or updated\naccordingly.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-03",
+ "CEK-04",
+ "IVS-03",
+ "IVS-07"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-8",
+ "SC-13"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudsql_instance_ssl_connections"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN01.AR02",
+ "Description": "When a port is exposed for SSH network traffic, all traffic MUST\ninclude a SSH handshake AND be encrypted using SSHv2 or higher.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN01 Encrypt Data for Transmission",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all communications are encrypted in transit to protect\ndata integrity and confidentiality.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Any time port 22 is exposed, ensure that it has a properly\nimplemented SSH server with SSHv2 enabled and configured with\nstrong ciphers.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-03",
+ "CEK-04",
+ "IVS-03",
+ "IVS-07"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-8",
+ "SC-13"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "compute_firewall_ssh_access_from_the_internet_allowed"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN01.AR03",
+ "Description": "When the service receives unencrypted traffic, \nthen it MUST either block the request or automatically\nredirect it to the secure equivalent.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN01 Encrypt Data for Transmission",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all communications are encrypted in transit to protect\ndata integrity and confidentiality.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Review firewall, load balancer, and application configurations to\nensure insecure protocols such as HTTP, FTP, and Telnet are not\nexposed. Where possible, implement automatic redirection to secure\nprotocols such as HTTPS, SFTP, SSH, and regularly scan for\nprotocol drift.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-03",
+ "CEK-04",
+ "IVS-03",
+ "IVS-07"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-8",
+ "SC-13"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudsql_instance_ssl_connections",
+ "cloudsql_instance_public_access",
+ "cloudsql_instance_public_ip",
+ "compute_firewall_rdp_access_from_the_internet_allowed",
+ "compute_firewall_ssh_access_from_the_internet_allowed",
+ "compute_instance_public_ip",
+ "cloudstorage_bucket_public_access"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN01.AR07",
+ "Description": "When a port is exposed, the service MUST ensure that the protocol\nand service officially assigned to that port number by the IANA\nService Name and Transport Protocol Port Number Registry, and no\nother, is run on that port.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN01 Encrypt Data for Transmission",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all communications are encrypted in transit to protect\ndata integrity and confidentiality.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Reference the IANA Service Name and Transport Protocol Port Number\nRegistry for more information about correct protocol-to-port\nassignments. Avoid running non-standard services on well-known\nports.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-03",
+ "CEK-04",
+ "IVS-03",
+ "IVS-07"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-8",
+ "SC-13"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "compute_firewall_rdp_access_from_the_internet_allowed",
+ "compute_firewall_ssh_access_from_the_internet_allowed"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN01.AR08",
+ "Description": "When a service transmits data using TLS, mutual TLS (mTLS) MUST be\nimplemented to require both client and server certificate\nauthentication for all connections.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN01 Encrypt Data for Transmission",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all communications are encrypted in transit to protect\ndata integrity and confidentiality.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Configure mTLS for all endpoints that process or transmit\nsensitive data. Ensure both client and server certificates are\nvalidated and managed securely. Regularly review certificate\nauthorities and automate certificate rotation where possible.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH02"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-03",
+ "CEK-04",
+ "IVS-03",
+ "IVS-07"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-02"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-8",
+ "SC-13"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudsql_instance_ssl_connections"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN13.AR01",
+ "Description": "When a port is exposed that uses certificate-based encryption,\nthe service MUST only use valid, unexpired certificates issued by\na trusted certificate authority.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN13 Minimize Lifetime of Encryption and Authentication Certificates",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that encryption and authentication certificates have a limited\nlifetime to reduce the risk of compromise and ensure the use of\nup-to-date security practices.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Track certificate expiration dates and automate certificate\nrenewal where possible. Use certificate management tools to ensure\nonly certificates from trusted authorities are deployed.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH18"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": []
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Core.CN13.AR02",
+ "Description": "When a port is exposed that uses certificate-based encryption,\nthe service MUST rotate active certificates within 180 days of\nissuance.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN13 Minimize Lifetime of Encryption and Authentication Certificates",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that encryption and authentication certificates have a limited\nlifetime to reduce the risk of compromise and ensure the use of\nup-to-date security practices.",
+ "Applicability": [
+ "tlp-amber"
+ ],
+ "Recommendation": "Track certificate expiration dates and automate certificate\nrenewal where possible. Use certificate management tools to ensure\nonly certificates from trusted authorities are deployed.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH18"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": []
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Core.CN13.AR03",
+ "Description": "When a port is exposed that uses certificate-based encryption,\nthe service MUST rotate active certificates within 90 days of\nissuance.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN13 Minimize Lifetime of Encryption and Authentication Certificates",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that encryption and authentication certificates have a limited\nlifetime to reduce the risk of compromise and ensure the use of\nup-to-date security practices.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "Track certificate expiration dates and automate certificate\nrenewal where possible. Use certificate management tools to ensure\nonly certificates from trusted authorities are deployed.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH18"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": []
+ }
+ ],
+ "Checks": [
+ "apikeys_key_rotated_in_90_days",
+ "kms_key_rotation_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN06.AR01",
+ "Description": "When the service is running, its region and availability zone MUST\nbe included in a list of explicitly trusted or approved locations\nwithin the trust perimeter.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN06 Restrict Deployments to Trust Perimeter",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that the service and its child resources are only deployed on\ninfrastructure in locations that are explicitly included within a\ndefined trust perimeter.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Maintain an up-to-date list of trusted and approved regions based\non organizational policies. Validate the service's deployment\nlocation is included in this list.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-19"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.11.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Core.CN06.AR02",
+ "Description": "When a child resource is deployed, its region and availability\nzone MUST be included in a list of explicitly trusted or approved\nlocations within the trust perimeter.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN06 Restrict Deployments to Trust Perimeter",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that the service and its child resources are only deployed on\ninfrastructure in locations that are explicitly included within a\ndefined trust perimeter.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Maintain an up-to-date list of trusted and approved regions based\non organizational policies. Validate that child resources can only\nbe deployed to locations included in this list.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH03"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-19"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.11.1.1"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Core.CN08.AR01",
+ "Description": "When data is created or modified, the data MUST have a complete\nand recoverable duplicate that is stored in a physically separate\ndata center.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN08 Replicate Data to Multiple Locations",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that data is replicated across multiple physical locations to\nprotect against data loss due to hardware failures, natural disasters,\nor other catastrophic events.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Implement automated data replication processes to ensure that\ndata is consistently duplicated in another region or availability\nzone. Regularly test data recovery from the replicated location to\nensure integrity and availability.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PT-5"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "BCR-08",
+ "BCR-10",
+ "BCR-11"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "CP-2",
+ "CP-10"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "cloudsql_instance_automated_backups",
+ "cloudstorage_bucket_log_retention_policy_lock"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN08.AR02",
+ "Description": "When data is replicated into a second location, the service MUST\nbe able to accurately represent the replication locations,\nreplication status, and data synchronization status.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN08 Replicate Data to Multiple Locations",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that data is replicated across multiple physical locations to\nprotect against data loss due to hardware failures, natural disasters,\nor other catastrophic events.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.PT-5"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "BCR-08",
+ "BCR-10",
+ "BCR-11"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "CP-2",
+ "CP-10"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Core.CN09.AR01",
+ "Description": "When the service is operational, its logs and any child resource\nlogs MUST NOT be accessible from the resource they record access\nto.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN09 Ensure Integrity of Access Logs",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that access logs are always recorded to an external location\nthat cannot be manipulated from the context of the service(s) it\ncontains logs for.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07",
+ "CCC.TH09",
+ "CCC.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-6"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "LOG-02",
+ "LOG-04",
+ "LOG-09"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "logging_sink_created",
+ "cloudstorage_bucket_log_retention_policy_lock",
+ "iam_audit_logs_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN09.AR02",
+ "Description": "When the service is operational, disabling the logs for the service\nor its child resources MUST NOT be possible without also disabling\nthe corresponding resource.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN09 Ensure Integrity of Access Logs",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that access logs are always recorded to an external location\nthat cannot be manipulated from the context of the service(s) it\ncontains logs for.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "No normal business operations should disable\nlogs, as this could indicate an attempt to cover up unauthorized\naccess. Ensure that logging mechanisms are tightly integrated with\nservice operations, so that logging cannot be disabled without\nstopping the service itself.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07",
+ "CCC.TH09",
+ "CCC.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-6"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "LOG-02",
+ "LOG-04",
+ "LOG-09"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_audit_logs_enabled",
+ "logging_sink_created",
+ "cloudstorage_bucket_log_retention_policy_lock",
+ "compute_subnet_flow_logs_enabled",
+ "compute_loadbalancer_logging_enabled",
+ "compute_network_dns_logging_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN09.AR03",
+ "Description": "When the service is operational, any attempt to redirect logs for\nthe service or its child resources MUST NOT be possible without\nhalting operation of the corresponding resource and publishing\ncorresponding events to monitored channels.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN09 Ensure Integrity of Access Logs",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that access logs are always recorded to an external location\nthat cannot be manipulated from the context of the service(s) it\ncontains logs for.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "No normal business operations should result in the redirection of\nlogs, as this could indicate an attempt to cover up unauthorized\naccess. Ensure that logging configurations are immutable during\nservice operation so that any changes require stopping the service\nand publishing corresponding events to monitored channels.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH07",
+ "CCC.TH09",
+ "CCC.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-6"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-9"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "LOG-02",
+ "LOG-04",
+ "LOG-09"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "logging_sink_created",
+ "cloudstorage_bucket_log_retention_policy_lock"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN10.AR01",
+ "Description": "When data is replicated, the service MUST ensure that replication\nonly occurs to destinations that are explicitly included within\nthe defined trust perimeter.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN10 Restrict Data Replication to Trust Perimeter",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that data is only replicated on infrastructure in locations\nthat are explicitly included within a defined trust perimeter.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH04"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-5"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-10",
+ "DSP-19"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-4"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Core.CN02.AR01",
+ "Description": "When data is stored, it MUST be encrypted using the latest\nindustry-standard encryption methods.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN02 Encrypt Data for Storage",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all data stored is encrypted at rest using strong\nencryption algorithms.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-03",
+ "CEK-04",
+ "UEM-08",
+ "DSP-17"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-13",
+ "SC-28"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "compute_instance_encryption_with_csek_enabled",
+ "dataproc_encrypted_with_cmks_disabled",
+ "bigquery_dataset_cmk_encryption",
+ "bigquery_table_cmk_encryption",
+ "kms_key_not_publicly_accessible",
+ "kms_key_rotation_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN11.AR01",
+ "Description": "When encryption keys are used, the service MUST verify that\nall encryption keys use the latest industry-standard cryptographic\nalgorithms.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN11 Protect Encryption Keys",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that encryption keys are managed securely by enforcing\nthe use of approved algorithms, regular key rotation, and\ncustomer-managed encryption keys (CMEKs).",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH16"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-08",
+ "CEK-10",
+ "CEK-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12",
+ "SC-17"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "kms_key_rotation_enabled",
+ "dataproc_encrypted_with_cmks_disabled",
+ "bigquery_dataset_cmk_encryption",
+ "bigquery_table_cmk_encryption",
+ "kms_key_not_publicly_accessible"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN11.AR02",
+ "Description": "When encryption keys are used, the service MUST rotate active keys\nwithin 180 days of issuance.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN11 Protect Encryption Keys",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that encryption keys are managed securely by enforcing\nthe use of approved algorithms, regular key rotation, and\ncustomer-managed encryption keys (CMEKs).",
+ "Applicability": [
+ "tlp-amber"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH16"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-08",
+ "CEK-10",
+ "CEK-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12",
+ "SC-17"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "kms_key_rotation_enabled",
+ "kms_key_not_publicly_accessible",
+ "dataproc_encrypted_with_cmks_disabled",
+ "bigquery_dataset_cmk_encryption",
+ "bigquery_table_cmk_encryption"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN11.AR03",
+ "Description": "When encrypting data, the service MUST verify that\ncustomer-managed encryption keys (CMEKs) are used.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "",
+ "SubSection": "CCC.Core.CN11 Protect Encryption Keys",
+ "SubSectionObjective": "Ensure that encryption keys are managed securely by enforcing\nthe use of approved algorithms, regular key rotation, and\ncustomer-managed encryption keys (CMEKs).",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH16"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-08",
+ "CEK-10",
+ "CEK-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12",
+ "SC-17"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "bigquery_dataset_cmk_encryption",
+ "bigquery_table_cmk_encryption",
+ "dataproc_encrypted_with_cmks_disabled",
+ "kms_key_not_publicly_accessible",
+ "kms_key_rotation_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN11.AR04",
+ "Description": "When encryption keys are accessed, the service MUST verify that\naccess to encryption keys is restricted to authorized personnel\nand services, following the principle of least privilege.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN11 Protect Encryption Keys",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that encryption keys are managed securely by enforcing\nthe use of approved algorithms, regular key rotation, and\ncustomer-managed encryption keys (CMEKs).",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH16"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-08",
+ "CEK-10",
+ "CEK-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12",
+ "SC-17"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "kms_key_not_publicly_accessible",
+ "kms_key_rotation_enabled",
+ "bigquery_dataset_cmk_encryption",
+ "bigquery_table_cmk_encryption",
+ "dataproc_encrypted_with_cmks_disabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN11.AR05",
+ "Description": "When encryption keys are used, the service MUST rotate active keys\nwithin 365 days of issuance.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN11 Protect Encryption Keys",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that encryption keys are managed securely by enforcing\nthe use of approved algorithms, regular key rotation, and\ncustomer-managed encryption keys (CMEKs).",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH16"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-08",
+ "CEK-10",
+ "CEK-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12",
+ "SC-17"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "kms_key_rotation_enabled",
+ "kms_key_not_publicly_accessible",
+ "dataproc_encrypted_with_cmks_disabled",
+ "bigquery_dataset_cmk_encryption",
+ "bigquery_table_cmk_encryption"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN11.AR06",
+ "Description": "When encryption keys are used, the service MUST rotate active keys\nwithin 90 days of issuance.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN11 Protect Encryption Keys",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that encryption keys are managed securely by enforcing\nthe use of approved algorithms, regular key rotation, and\ncustomer-managed encryption keys (CMEKs).",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH16"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.DS-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "CEK-08",
+ "CEK-10",
+ "CEK-12"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.10.1.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "SC-12",
+ "SC-17"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "kms_key_rotation_enabled",
+ "kms_key_not_publicly_accessible",
+ "dataproc_encrypted_with_cmks_disabled",
+ "bigquery_dataset_cmk_encryption",
+ "bigquery_table_cmk_encryption"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN14.AR01",
+ "Description": "When backups are created for disaster recovery purposes, the\nstorage mechanism MUST NOT allow modification or deletion\nwithin 30 days of creation.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN14 Maintain Recent Backups",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all backups used for disaster recovery are recent and\nsubject to a retention policy that limits deletion.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Use immutable storage solutions where possible. Implement backup\nretention policies that enforce a minimum retention period of 30\ndays.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": []
+ }
+ ],
+ "Checks": [
+ "cloudstorage_bucket_log_retention_policy_lock",
+ "cloudsql_instance_automated_backups"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN14.AR02",
+ "Description": "When backups are created for disaster recovery purposes, the\nmost recent backup MUST have a creation date within the past\n30 days.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN14 Maintain Recent Backups",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all backups used for disaster recovery are recent and\nsubject to a retention policy that limits deletion.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber"
+ ],
+ "Recommendation": "Implement automated backup processes to ensure that backups are\ncreated regularly. Monitor backup schedules and verify that the\nmost recent backup creation date is within the last 30 days.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": []
+ }
+ ],
+ "Checks": [
+ "cloudsql_instance_automated_backups"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN14.AR02",
+ "Description": "When backups are created for disaster recovery purposes, the\nmost recent backup MUST have a creation date within the past\n14 days.",
+ "Attributes": [
+ {
+ "FamilyName": "Data",
+ "FamilyDescription": "The Data control family ensures the confidentiality, integrity,\navailability, and sovereignty of data across its lifecycle.\nThese controls govern how data is transmitted, stored,\nreplicated, and protected from unauthorized access, tampering,\nor exposure beyond defined trust perimeters.\n",
+ "Section": "CCC.Core.CN14 Maintain Recent Backups",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all backups used for disaster recovery are recent and\nsubject to a retention policy that limits deletion.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "Implement automated backup processes to ensure that backups are\ncreated regularly. Monitor backup schedules and verify that the\nmost recent backup creation date is within the last 14 days.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH06"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": []
+ }
+ ],
+ "Checks": [
+ "cloudsql_instance_automated_backups",
+ "cloudstorage_bucket_log_retention_policy_lock"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN03.AR01",
+ "Description": "When an entity attempts to modify the service through a user\ninterface, the authentication process MUST require multiple\nidentifying factors for authentication.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN03 Implement Multi-factor Authentication (MFA) for Access",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all sensitive activities require two or more identity\nfactors during authentication to prevent unauthorized access.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-14"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-7"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-03",
+ "IAM-08"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.4.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "IA-2"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Core.CN03.AR02",
+ "Description": "When an entity attempts to modify the service through an API\nendpoint, the authentication process MUST require a credential\nsuch as an API key or token AND originate from within the trust\nperimeter.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN03 Implement Multi-factor Authentication (MFA) for Access",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all sensitive activities require two or more identity\nfactors during authentication to prevent unauthorized access.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-14"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-7"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-03",
+ "IAM-08"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.4.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "IA-2"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "apikeys_api_restrictions_configured",
+ "apikeys_key_exists",
+ "apikeys_key_rotated_in_90_days",
+ "compute_firewall_rdp_access_from_the_internet_allowed",
+ "compute_firewall_ssh_access_from_the_internet_allowed",
+ "compute_instance_public_ip",
+ "cloudsql_instance_public_ip",
+ "cloudstorage_bucket_public_access"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN03.AR03",
+ "Description": "When an entity attempts to view information on the service through\na user interface, the authentication process MUST require multiple\nidentifying factors from the user.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN03 Implement Multi-factor Authentication (MFA) for Access",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all sensitive activities require two or more identity\nfactors during authentication to prevent unauthorized access.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-14"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-7"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-03",
+ "IAM-08"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.4.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "IA-2"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": []
+ },
+ {
+ "Id": "CCC.Core.CN03.AR04",
+ "Description": "When an entity attempts to view information on the service through\nan API endpoint, the authentication process MUST require a\ncredential such as an API key or token AND originate from within\nthe trust perimeter.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN03 Implement Multi-factor Authentication (MFA) for Access",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all sensitive activities require two or more identity\nfactors during authentication to prevent unauthorized access.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-14"
+ ]
+ },
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-7"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "IAM-03",
+ "IAM-08"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.9.4.2"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "IA-2"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "compute_firewall_rdp_access_from_the_internet_allowed",
+ "compute_firewall_ssh_access_from_the_internet_allowed",
+ "cloudsql_instance_public_ip",
+ "cloudsql_instance_public_access",
+ "cloudstorage_bucket_public_access",
+ "apikeys_api_restrictions_configured",
+ "iam_account_access_approval_enabled",
+ "iam_audit_logs_enabled",
+ "compute_project_os_login_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN05.AR01",
+ "Description": "When an attempt is made to modify data on the service or a child\nresource, the service MUST block requests from unauthorized\nentities.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN05 Prevent Access from Untrusted Entities",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that secure access controls enforce the principle of least\nprivilege to restrict access to authorized entities from explicitly\ntrusted sources only.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-01",
+ "DSP-07",
+ "DSP-08",
+ "DSP-10",
+ "DSP-17"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.3"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "compute_firewall_rdp_access_from_the_internet_allowed",
+ "compute_firewall_ssh_access_from_the_internet_allowed",
+ "cloudstorage_bucket_public_access",
+ "compute_instance_public_ip",
+ "cloudsql_instance_public_ip",
+ "compute_instance_ip_forwarding_is_enabled",
+ "compute_instance_default_service_account_in_use",
+ "compute_instance_default_service_account_in_use_with_full_api_access",
+ "gke_cluster_no_default_service_account",
+ "iam_no_service_roles_at_project_level",
+ "iam_role_kms_enforce_separation_of_duties",
+ "iam_role_sa_enforce_separation_of_duties",
+ "iam_sa_no_administrative_privileges",
+ "iam_sa_no_user_managed_keys",
+ "iam_sa_user_managed_key_rotate_90_days",
+ "iam_sa_user_managed_key_unused",
+ "iam_service_account_unused",
+ "iam_audit_logs_enabled",
+ "iam_account_access_approval_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN05.AR02",
+ "Description": "When administrative access or configuration change is attempted on\nthe service or a child resource, the service MUST refuse requests\nfrom unauthorized entities.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN05 Prevent Access from Untrusted Entities",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that secure access controls enforce the principle of least\nprivilege to restrict access to authorized entities from explicitly\ntrusted sources only.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-01",
+ "DSP-07",
+ "DSP-08",
+ "DSP-10",
+ "DSP-17"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.3"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_account_access_approval_enabled",
+ "iam_audit_logs_enabled",
+ "iam_no_service_roles_at_project_level",
+ "iam_sa_no_administrative_privileges",
+ "iam_role_kms_enforce_separation_of_duties",
+ "iam_role_sa_enforce_separation_of_duties",
+ "iam_sa_no_user_managed_keys",
+ "iam_sa_user_managed_key_rotate_90_days",
+ "iam_sa_user_managed_key_unused",
+ "iam_service_account_unused",
+ "compute_project_os_login_enabled",
+ "compute_instance_default_service_account_in_use",
+ "compute_instance_default_service_account_in_use_with_full_api_access",
+ "compute_instance_public_ip",
+ "compute_firewall_rdp_access_from_the_internet_allowed",
+ "compute_firewall_ssh_access_from_the_internet_allowed",
+ "cloudsql_instance_public_ip",
+ "cloudstorage_bucket_public_access",
+ "apikeys_api_restrictions_configured",
+ "apikeys_key_exists",
+ "apikeys_key_rotated_in_90_days",
+ "iam_cloud_asset_inventory_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN05.AR03",
+ "Description": "When administrative access or configuration change is attempted on\nthe service or a child resource in a multi-tenant environment, the\nservice MUST refuse requests across tenant boundaries unless the\norigin is explicitly included in a pre-approved allowlist.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN05 Prevent Access from Untrusted Entities",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that secure access controls enforce the principle of least\nprivilege to restrict access to authorized entities from explicitly\ntrusted sources only.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-01",
+ "DSP-07",
+ "DSP-08",
+ "DSP-10",
+ "DSP-17"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.3"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_no_service_roles_at_project_level",
+ "iam_account_access_approval_enabled",
+ "iam_audit_logs_enabled",
+ "iam_role_kms_enforce_separation_of_duties",
+ "iam_role_sa_enforce_separation_of_duties",
+ "iam_sa_no_administrative_privileges",
+ "iam_sa_no_user_managed_keys",
+ "iam_sa_user_managed_key_rotate_90_days",
+ "iam_sa_user_managed_key_unused",
+ "iam_service_account_unused",
+ "compute_firewall_rdp_access_from_the_internet_allowed",
+ "compute_firewall_ssh_access_from_the_internet_allowed",
+ "compute_instance_public_ip",
+ "cloudsql_instance_public_ip",
+ "cloudsql_instance_public_access",
+ "cloudstorage_bucket_public_access",
+ "compute_instance_default_service_account_in_use",
+ "compute_instance_default_service_account_in_use_with_full_api_access",
+ "gke_cluster_no_default_service_account"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN05.AR04",
+ "Description": "When data is requested from outside the trust perimeter, the\nservice MUST refuse requests from unauthorized entities.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "",
+ "SubSection": "CCC.Core.CN05 Prevent Access from Untrusted Entities",
+ "SubSectionObjective": "Ensure that secure access controls enforce the principle of least\nprivilege to restrict access to authorized entities from explicitly\ntrusted sources only.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-01",
+ "DSP-07",
+ "DSP-08",
+ "DSP-10",
+ "DSP-17"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.3"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_no_service_roles_at_project_level",
+ "iam_account_access_approval_enabled",
+ "iam_audit_logs_enabled",
+ "iam_role_kms_enforce_separation_of_duties",
+ "iam_role_sa_enforce_separation_of_duties",
+ "iam_sa_no_administrative_privileges",
+ "iam_sa_no_user_managed_keys",
+ "iam_sa_user_managed_key_rotate_90_days",
+ "iam_sa_user_managed_key_unused",
+ "iam_service_account_unused",
+ "gke_cluster_no_default_service_account",
+ "compute_instance_default_service_account_in_use",
+ "compute_instance_default_service_account_in_use_with_full_api_access",
+ "compute_instance_block_project_wide_ssh_keys_disabled",
+ "compute_instance_public_ip",
+ "compute_firewall_ssh_access_from_the_internet_allowed",
+ "compute_firewall_rdp_access_from_the_internet_allowed",
+ "cloudsql_instance_public_ip",
+ "cloudsql_instance_public_access",
+ "cloudstorage_bucket_public_access",
+ "kms_key_not_publicly_accessible",
+ "kms_key_rotation_enabled",
+ "apikeys_api_restrictions_configured",
+ "apikeys_key_exists",
+ "apikeys_key_rotated_in_90_days"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN05.AR05",
+ "Description": "When any request is made from outside the trust perimeter,\nthe service MUST NOT provide any response that may indicate the\nservice exists.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN05 Prevent Access from Untrusted Entities",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that secure access controls enforce the principle of least\nprivilege to restrict access to authorized entities from explicitly\ntrusted sources only.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-01",
+ "DSP-07",
+ "DSP-08",
+ "DSP-10",
+ "DSP-17"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.3"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "compute_firewall_rdp_access_from_the_internet_allowed",
+ "compute_firewall_ssh_access_from_the_internet_allowed",
+ "compute_instance_public_ip",
+ "cloudsql_instance_public_access",
+ "cloudstorage_bucket_public_access",
+ "compute_instance_default_service_account_in_use",
+ "compute_instance_default_service_account_in_use_with_full_api_access",
+ "gke_cluster_no_default_service_account",
+ "iam_no_service_roles_at_project_level",
+ "iam_account_access_approval_enabled",
+ "iam_audit_logs_enabled",
+ "iam_sa_no_administrative_privileges",
+ "iam_sa_no_user_managed_keys",
+ "iam_role_kms_enforce_separation_of_duties",
+ "iam_role_sa_enforce_separation_of_duties",
+ "iam_sa_user_managed_key_rotate_90_days",
+ "iam_sa_user_managed_key_unused",
+ "iam_service_account_unused",
+ "apikeys_api_restrictions_configured",
+ "kms_key_not_publicly_accessible",
+ "compute_instance_ip_forwarding_is_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN05.AR06",
+ "Description": "When any request is made to the service or a child resource, the\nservice MUST refuse requests from unauthorized entities.",
+ "Attributes": [
+ {
+ "FamilyName": "Identity and Access Management",
+ "FamilyDescription": "The Identity and Access Management control family ensures\nthat only trusted and authenticated entities can access\nresources. These controls establish strong authentication,\nenforce multi-factor verification, and restrict access to\napproved sources to prevent unauthorized use or data exfiltration.\n",
+ "Section": "CCC.Core.CN05 Prevent Access from Untrusted Entities",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that secure access controls enforce the principle of least\nprivilege to restrict access to authorized entities from explicitly\ntrusted sources only.",
+ "Applicability": [
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "PR.AC-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "DSP-01",
+ "DSP-07",
+ "DSP-08",
+ "DSP-10",
+ "DSP-17"
+ ]
+ },
+ {
+ "ReferenceId": "ISO_27001",
+ "Identifiers": [
+ "2013 A.13.1.3"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AC-3"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "compute_firewall_rdp_access_from_the_internet_allowed",
+ "compute_firewall_ssh_access_from_the_internet_allowed",
+ "compute_instance_public_ip",
+ "compute_instance_default_service_account_in_use",
+ "compute_instance_default_service_account_in_use_with_full_api_access",
+ "gke_cluster_no_default_service_account",
+ "cloudstorage_bucket_public_access",
+ "cloudsql_instance_public_access",
+ "cloudsql_instance_public_ip",
+ "cloudsql_instance_private_ip_assignment",
+ "apikeys_api_restrictions_configured",
+ "apikeys_key_exists",
+ "apikeys_key_rotated_in_90_days",
+ "kms_key_not_publicly_accessible",
+ "kms_key_rotation_enabled",
+ "iam_no_service_roles_at_project_level",
+ "iam_account_access_approval_enabled",
+ "iam_audit_logs_enabled",
+ "iam_role_kms_enforce_separation_of_duties",
+ "iam_role_sa_enforce_separation_of_duties",
+ "iam_sa_no_administrative_privileges",
+ "iam_sa_no_user_managed_keys",
+ "iam_sa_user_managed_key_rotate_90_days",
+ "iam_sa_user_managed_key_unused",
+ "iam_service_account_unused"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN04.AR01",
+ "Description": "When administrative access or configuration change is attempted on\nthe service or a child resource, the service MUST log the client\nidentity, time, and result of the attempt.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "The Logging & Monitoring control family ensures that access,\nchanges, and security-relevant events are captured, monitored,\nand alerted on in order to provide visibility, support\nincident response, and meet compliance requirements.\n",
+ "Section": "CCC.Core.CN04 Log All Access and Changes",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all access attempts are logged to maintain a detailed\naudit trail for security and compliance purposes.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.AE-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "LOG-08"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-2",
+ "AU-3",
+ "AU-12"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_bucket_permission_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_custom_role_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_sql_instance_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_firewall_rule_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_route_changes_enabled",
+ "iam_audit_logs_enabled",
+ "logging_sink_created",
+ "logging_log_metric_filter_and_alert_for_project_ownership_changes_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN04.AR02",
+ "Description": "When any attempt is made to modify data on the service or a child\nresource, the service MUST log the client identity, time, and\nresult of the attempt.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "The Logging & Monitoring control family ensures that access,\nchanges, and security-relevant events are captured, monitored,\nand alerted on in order to provide visibility, support\nincident response, and meet compliance requirements.\n",
+ "Section": "CCC.Core.CN04 Log All Access and Changes",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all access attempts are logged to maintain a detailed\naudit trail for security and compliance purposes.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.AE-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "LOG-08"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-2",
+ "AU-3",
+ "AU-12"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_audit_logs_enabled",
+ "logging_sink_created",
+ "logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_bucket_permission_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_custom_role_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_sql_instance_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_firewall_rule_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_route_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_project_ownership_changes_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN04.AR03",
+ "Description": "When any attempt is made to read data on the service or a child\nresource, the service MUST log the client identity, time, and\nresult of the attempt.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "The Logging & Monitoring control family ensures that access,\nchanges, and security-relevant events are captured, monitored,\nand alerted on in order to provide visibility, support\nincident response, and meet compliance requirements.\n",
+ "Section": "CCC.Core.CN04 Log All Access and Changes",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that all access attempts are logged to maintain a detailed\naudit trail for security and compliance purposes.",
+ "Applicability": [
+ "tlp-red"
+ ],
+ "Recommendation": "",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH01"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.AE-3"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "LOG-08"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-2",
+ "AU-3",
+ "AU-12"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_audit_logs_enabled",
+ "logging_sink_created",
+ "logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_bucket_permission_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_custom_role_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_sql_instance_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_firewall_rule_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_route_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_project_ownership_changes_enabled"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN07.AR01",
+ "Description": "When enumeration activities are detected, the service MUST publish\nan event to a monitored channel which includes the client\nidentity, time, and nature of the activity.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "The Logging & Monitoring control family ensures that access,\nchanges, and security-relevant events are captured, monitored,\nand alerted on in order to provide visibility, support\nincident response, and meet compliance requirements.\n",
+ "Section": "CCC.Core.CN07 Alert on Unusual Enumeration Activity",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that logs and associated alerts are generated when\nunusual enumeration activity is detected that may indicate\nreconnaissance activities.",
+ "Applicability": [
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Implement event publication mechanisms and alerts for patterns\nindicative of enumeration activities, such as repeated access\nattempts, requests, or liveness probes. Configure alerts to notify\nsecurity teams of any activities that merit further investigation.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH15"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.AE-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "LOG-05",
+ "SEF-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_bucket_permission_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_custom_role_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_sql_instance_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_firewall_rule_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_project_ownership_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_route_changes_enabled",
+ "logging_sink_created"
+ ]
+ },
+ {
+ "Id": "CCC.Core.CN07.AR02",
+ "Description": "When enumeration activities are detected, the service MUST log the\nclient identity, time, and nature of the activity.",
+ "Attributes": [
+ {
+ "FamilyName": "Logging & Monitoring",
+ "FamilyDescription": "The Logging & Monitoring control family ensures that access,\nchanges, and security-relevant events are captured, monitored,\nand alerted on in order to provide visibility, support\nincident response, and meet compliance requirements.\n",
+ "Section": "CCC.Core.CN07 Alert on Unusual Enumeration Activity",
+ "SubSection": "",
+ "SubSectionObjective": "Ensure that logs and associated alerts are generated when\nunusual enumeration activity is detected that may indicate\nreconnaissance activities.",
+ "Applicability": [
+ "tlp-clear",
+ "tlp-green",
+ "tlp-amber",
+ "tlp-red"
+ ],
+ "Recommendation": "Implement logging mechanisms to capture details of enumeration\nactivities, including client identity, timestamps, and activity\nnature. Retain logs according to organizational policies, and\noccasionally review them for patterns that may indicate\nreconnaissance activities.\n",
+ "SectionThreatMappings": [
+ {
+ "ReferenceId": "CCC",
+ "Identifiers": [
+ "CCC.TH15"
+ ]
+ }
+ ],
+ "SectionGuidelineMappings": [
+ {
+ "ReferenceId": "NIST-CSF",
+ "Identifiers": [
+ "DE.AE-1"
+ ]
+ },
+ {
+ "ReferenceId": "CCM",
+ "Identifiers": [
+ "LOG-05",
+ "SEF-05"
+ ]
+ },
+ {
+ "ReferenceId": "NIST_800_53",
+ "Identifiers": [
+ "AU-6"
+ ]
+ }
+ ]
+ }
+ ],
+ "Checks": [
+ "iam_audit_logs_enabled",
+ "logging_sink_created",
+ "logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_custom_role_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_bucket_permission_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_project_ownership_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_sql_instance_configuration_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_network_route_changes_enabled",
+ "logging_log_metric_filter_and_alert_for_vpc_firewall_rule_changes_enabled"
+ ]
+ }
+ ]
+}
diff --git a/prowler/compliance/gcp/mitre_attack_gcp.json b/prowler/compliance/gcp/mitre_attack_gcp.json
index b5746619f4..adf93a32ca 100644
--- a/prowler/compliance/gcp/mitre_attack_gcp.json
+++ b/prowler/compliance/gcp/mitre_attack_gcp.json
@@ -365,7 +365,32 @@
"Description": "Adversaries may abuse serverless computing, integration, and automation services to execute arbitrary code in cloud environments. Many cloud providers offer a variety of serverless resources, including compute engines, application integration services, and web servers.",
"TechniqueURL": "https://attack.mitre.org/techniques/T1648/",
"Checks": [],
- "Attributes": []
+ "Attributes": [
+ {
+ "GCPService": "Cloud Audit Logs",
+ "Category": "Detect",
+ "Value": "Significant",
+ "Comment": "Cloud Audit Logs capture all administrative operations including Cloud Functions deployment, Cloud Run service creation, and Workflows execution. This provides Significant detection capability for identifying when serverless resources are created, modified, or invoked, which could indicate adversaries establishing serverless execution capabilities. Admin Activity logs record who performed actions, what resources were affected, and when operations occurred."
+ },
+ {
+ "GCPService": "Cloud Functions",
+ "Category": "Protect",
+ "Value": "Partial",
+ "Comment": "Cloud Functions can be protected through IAM policies, VPC Service Controls, and ingress settings that restrict function invocation. Functions can require authentication and be limited to internal traffic only. However, protection is Partial because authorized users with deployment permissions can still create and execute malicious functions, and security configurations must be explicitly enforced and are not always set by default."
+ },
+ {
+ "GCPService": "Security Command Center",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Security Command Center can detect suspicious serverless activity through findings related to unusual function deployments, anomalous Cloud Run executions, and misconfigurations in serverless resources. SCC provides security recommendations and detects known attack patterns. Coverage is Partial as it focuses on misconfigurations and known malicious patterns rather than all possible serverless abuse scenarios."
+ },
+ {
+ "GCPService": "Organization Policy Service",
+ "Category": "Protect",
+ "Value": "Minimal",
+ "Comment": "Organization Policy Service can enforce constraints on serverless resources, such as restricting Cloud Functions deployment regions, requiring VPC connectivity, or limiting service account usage. However, protection is Minimal against serverless execution abuse as policies focus on configuration governance rather than preventing malicious code execution within properly configured serverless resources."
+ }
+ ]
},
{
"Name": "User Execution",
@@ -749,7 +774,32 @@
"Description": "Adversaries may abuse cloud management services to execute commands within virtual machines or hybrid-joined devices. Resources such as AWS Systems Manager, Azure RunCommand, and Runbooks allow users to remotely run scripts in virtual machines by leveraging installed virtual machine agents. Similarly, in Azure AD environments, Microsoft Endpoint Manager allows Global or Intune Administrators to run scripts as SYSTEM on on-premises devices joined to the Azure AD.",
"TechniqueURL": "https://attack.mitre.org/techniques/T1651/",
"Checks": [],
- "Attributes": []
+ "Attributes": [
+ {
+ "GCPService": "Cloud Audit Logs",
+ "Category": "Detect",
+ "Value": "Significant",
+ "Comment": "Cloud Audit Logs capture all OS Login activities, Compute Engine instance operations, and Cloud Workstations command executions. This provides Significant detection capability for identifying remote command execution through GCP management services. Audit logs record detailed information about who executed commands, on which instances, and what actions were performed, enabling effective monitoring of cloud administration command abuse."
+ },
+ {
+ "GCPService": "OS Login",
+ "Category": "Protect",
+ "Value": "Partial",
+ "Comment": "OS Login provides centralized SSH key management and can be protected through IAM policies and organization-level constraints. OS Login can enforce two-factor authentication and manage access to VM instances. However, protection is Partial because authorized administrators with proper IAM permissions can still execute commands on instances, and distinguishing malicious from legitimate administrative activity is challenging."
+ },
+ {
+ "GCPService": "Security Command Center",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Security Command Center can detect suspicious patterns related to instance access and unusual command execution through security findings. SCC identifies anomalous SSH access patterns and suspicious instance operations. Coverage is Partial as detection relies on known malicious patterns and baseline behavior, and may not catch all forms of cloud administration command abuse, especially by authorized administrators."
+ },
+ {
+ "GCPService": "VPC Service Controls",
+ "Category": "Protect",
+ "Value": "Minimal",
+ "Comment": "VPC Service Controls can restrict which services and resources can be accessed from specific networks, providing some protection against unauthorized command execution from external networks. However, protection is Minimal against cloud administration command abuse as VPC Service Controls focus on network perimeter security rather than preventing malicious commands from authorized administrators within the perimeter."
+ }
+ ]
},
{
"Name": "Implant Internal Image",
@@ -1029,7 +1079,32 @@
"Description": "Adversaries may create cloud instances in unused geographic service regions in order to evade detection. Access is usually obtained through compromising accounts used to manage cloud infrastructure.",
"TechniqueURL": "https://attack.mitre.org/techniques/T1535/",
"Checks": [],
- "Attributes": []
+ "Attributes": [
+ {
+ "GCPService": "Organization Policy Service",
+ "Category": "Protect",
+ "Value": "Significant",
+ "Comment": "Organization Policy Service can effectively prevent resource creation in unused or unsupported regions through resource location restrictions. The 'gcp.resourceLocations' constraint can whitelist or blacklist specific regions for resource deployment. This provides Significant protection as organization policies are enforced at the org/folder/project level and cannot be bypassed by individual user permissions."
+ },
+ {
+ "GCPService": "Cloud Audit Logs",
+ "Category": "Detect",
+ "Value": "Significant",
+ "Comment": "Cloud Audit Logs capture all resource creation events across all GCP regions, providing visibility into any resource deployment in unexpected geographic regions. Audit logs include region information for all operations, making it easy to identify and alert on activity in regions that should not be used. This enables Significant detection capability for identifying resources created in unusual locations."
+ },
+ {
+ "GCPService": "Security Command Center",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Security Command Center can detect resources created in unexpected regions through asset inventory and security findings. SCC provides visibility into all GCP resources and their locations, enabling detection of anomalous regional deployments. Coverage is Partial as it requires configuration of custom detectors or manual review of asset inventory to identify resources in unexpected regions."
+ },
+ {
+ "GCPService": "Cloud Asset Inventory",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Cloud Asset Inventory maintains a comprehensive inventory of all GCP resources including their locations, enabling detection of resources in unused regions. Asset Inventory can be queried to find resources deployed in specific regions. However, this is reactive detection after resources are created, providing only Partial coverage. Real-time alerting requires integration with Cloud Monitoring or other tools."
+ }
+ ]
},
{
"Name": "Use Alternate Authentication Material",
@@ -1248,7 +1323,32 @@
"iam_role_sa_enforce_separation_of_duties",
"iam_sa_no_administrative_privileges"
],
- "Attributes": []
+ "Attributes": [
+ {
+ "GCPService": "Cloud Audit Logs",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Cloud Audit Logs capture authentication and authorization events including service account key usage, OAuth token generation, and API key access. These logs can reveal suspicious credential usage patterns that may indicate forged credentials. However, detection is Partial because Cloud Audit Logs record credential usage but cannot directly determine if credentials are legitimate or forged without additional analysis and correlation."
+ },
+ {
+ "GCPService": "Cloud Identity",
+ "Category": "Protect",
+ "Value": "Partial",
+ "Comment": "Cloud Identity provides identity and access management capabilities including enforcement of strong authentication, session management, and credential policies. Cloud Identity can enforce short-lived tokens and require re-authentication. However, protection is Partial as Cloud Identity cannot prevent adversaries with sufficient access from forging valid session tokens or service account credentials if proper secrets management is not enforced."
+ },
+ {
+ "GCPService": "Security Command Center",
+ "Category": "Detect",
+ "Value": "Minimal",
+ "Comment": "Security Command Center can detect some indicators of credential forgery through findings related to anomalous authentication patterns and suspicious service account activities. However, SCC provides only Minimal direct detection of web credential forgery as it focuses on broader security issues rather than specifically identifying forged tokens or session credentials."
+ },
+ {
+ "GCPService": "Identity-Aware Proxy",
+ "Category": "Protect",
+ "Value": "Minimal",
+ "Comment": "Identity-Aware Proxy (IAP) provides application-level access control and can verify user identity before granting access to applications. IAP enforces authentication and authorization policies. However, protection is Minimal against web credential forgery as IAP operates at the application layer and may not detect if credentials presented are legitimate or forged, especially if adversaries have compromised signing keys."
+ }
+ ]
},
{
"Name": "Multi-Factor Authentication Request Generation",
@@ -1270,7 +1370,32 @@
"Description": "Adversaries may attempt to bypass multi-factor authentication (MFA) mechanisms and gain access to accounts by generating MFA requests sent to users.",
"TechniqueURL": "https://attack.mitre.org/techniques/T1621/",
"Checks": [],
- "Attributes": []
+ "Attributes": [
+ {
+ "GCPService": "Cloud Identity Sign-in Logs",
+ "Category": "Detect",
+ "Value": "Significant",
+ "Comment": "Cloud Identity captures all authentication events including MFA challenges and responses through sign-in logs. These logs provide Significant detection capability for MFA fatigue attacks by recording detailed information about repeated MFA prompts, failed MFA attempts, and unusual authentication patterns. Analysis of sign-in logs can reveal MFA bombing attempts where adversaries generate excessive MFA requests."
+ },
+ {
+ "GCPService": "Cloud Identity",
+ "Category": "Protect",
+ "Value": "Partial",
+ "Comment": "Cloud Identity supports various MFA methods including security keys (FIDO2), authenticator apps, and phone prompts. Organizations can enforce MFA policies and use phishing-resistant methods. However, protection is Partial because Cloud Identity cannot prevent adversaries with valid credentials from generating MFA requests, and user awareness remains critical. Push notification fatigue is still a risk with app-based MFA."
+ },
+ {
+ "GCPService": "Security Command Center",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Security Command Center can detect unusual authentication patterns through security findings related to repeated MFA attempts and suspicious sign-in activities. SCC identifies anomalous authentication behavior that may indicate MFA fatigue attacks. Coverage is Partial as detection relies on behavioral analytics and may not catch all forms of MFA request generation, especially when patterns are subtle."
+ },
+ {
+ "GCPService": "Context-Aware Access",
+ "Category": "Protect",
+ "Value": "Minimal",
+ "Comment": "Context-Aware Access can enforce additional access controls based on context such as device status, IP address, and other signals beyond just MFA. However, protection is Minimal against MFA request generation attacks as Context-Aware Access evaluates authentication context but cannot prevent adversaries from generating MFA prompts if they have valid credentials. It adds defense in depth but doesn't eliminate MFA fatigue risks."
+ }
+ ]
},
{
"Name": "Network Sniffing",
@@ -1532,7 +1657,32 @@
"Description": "Once established within a system or network, an adversary may use automated techniques for collecting internal data. Methods for performing this technique could include use of a Command and Scripting Interpreter to search for and copy information fitting set criteria such as file type, location, or name at specific time intervals. In cloud-based environments, adversaries may also use cloud APIs, command line interfaces, or extract, transform, and load (ETL) services to automatically collect data. This functionality could also be built into remote access tools.",
"TechniqueURL": "https://attack.mitre.org/techniques/T1119/",
"Checks": [],
- "Attributes": []
+ "Attributes": [
+ {
+ "GCPService": "Cloud Audit Logs",
+ "Category": "Detect",
+ "Value": "Significant",
+ "Comment": "Cloud Audit Logs capture all data access operations across GCP services including Cloud Storage reads, BigQuery queries, and Compute Engine snapshots. This provides Significant detection capability for identifying automated data collection activities through unusual patterns of bulk data access, rapid sequential operations, or anomalous query patterns. Data Access logs record what data was accessed, by whom, and when."
+ },
+ {
+ "GCPService": "Cloud Data Loss Prevention",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Cloud Data Loss Prevention (DLP) can detect when sensitive data is being accessed or exfiltrated by scanning data in transit and at rest. DLP identifies patterns of sensitive data access that may indicate automated collection. However, coverage is Partial as DLP requires configuration to scan specific data stores and may not detect all automated collection activities, especially if adversaries target data that isn't classified as sensitive."
+ },
+ {
+ "GCPService": "Security Command Center",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Security Command Center can detect unusual data access patterns and bulk operations through security findings. SCC identifies anomalous behavior related to automated data collection such as unusual API call volumes or suspicious data transfers. Coverage is Partial as detection relies on behavioral analytics and may not identify all automated collection activities, especially if performed gradually over time."
+ },
+ {
+ "GCPService": "VPC Service Controls",
+ "Category": "Protect",
+ "Value": "Minimal",
+ "Comment": "VPC Service Controls can limit data exfiltration by restricting which services can be accessed from specific networks and preventing data from leaving authorized perimeters. However, protection is Minimal against automated collection as VPC Service Controls focus on network boundaries and cannot prevent authorized users from collecting data within the security perimeter using legitimate tools and permissions."
+ }
+ ]
},
{
"Name": "Data from Cloud Storage",
@@ -1684,7 +1834,32 @@
"Description": "Adversaries may stage collected data in a central location or directory prior to Exfiltration. Data may be kept in separate files or combined into one file through techniques such as Archive Collected Data. Interactive command shells may be used, and common functionality within cmd and bash may be used to copy data into a staging location.",
"TechniqueURL": "https://attack.mitre.org/techniques/T1074/",
"Checks": [],
- "Attributes": []
+ "Attributes": [
+ {
+ "GCPService": "Cloud Audit Logs",
+ "Category": "Detect",
+ "Value": "Significant",
+ "Comment": "Cloud Audit Logs capture all data movement operations including Cloud Storage uploads, Compute Engine snapshot creation, and data transfers between services. This provides Significant detection capability for identifying data staging activities through patterns of bulk data uploads, snapshot creation, or unusual data aggregation in temporary storage locations. Audit logs reveal who staged data, where, and when."
+ },
+ {
+ "GCPService": "Cloud Storage",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Cloud Storage access logs can reveal data staging activities by showing patterns of object uploads, copies, and bucket access. Monitoring for unusual patterns of data being written to staging buckets can indicate adversaries aggregating data before exfiltration. However, detection is Partial because Cloud Storage operations may be legitimate and difficult to distinguish from normal data management activities without additional context."
+ },
+ {
+ "GCPService": "Security Command Center",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Security Command Center can detect suspicious data staging activities through findings related to unusual storage access patterns, anomalous bucket creations, and suspicious data transfers. SCC identifies behavioral anomalies that may indicate data staging. Coverage is Partial as it focuses on known malicious patterns and may not detect all forms of data staging, especially when performed gradually or using legitimate services."
+ },
+ {
+ "GCPService": "Cloud Data Loss Prevention",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Cloud Data Loss Prevention can help detect data staging by identifying when sensitive data is being aggregated in unusual locations or transferred to temporary storage areas. DLP can scan staged data to determine if sensitive information is being prepared for exfiltration. However, coverage is Partial as DLP requires configuration and may not detect staging of non-sensitive data or encrypted staged content."
+ }
+ ]
},
{
"Name": "Data Destruction",
@@ -1885,7 +2060,32 @@
"logging_log_metric_filter_and_alert_for_vpc_network_changes_enabled",
"logging_log_metric_filter_and_alert_for_vpc_network_route_changes_enabled"
],
- "Attributes": []
+ "Attributes": [
+ {
+ "GCPService": "Cloud Monitoring",
+ "Category": "Detect",
+ "Value": "Significant",
+ "Comment": "Cloud Monitoring provides comprehensive metrics for resource utilization including CPU, memory, network, and API usage across all GCP services. This enables Significant detection of resource hijacking through alerts on unusual resource consumption patterns, unexpected instance launches, or anomalous workload behavior. Monitoring can reveal cryptomining, distributed computing abuse, and other resource hijacking activities."
+ },
+ {
+ "GCPService": "Cloud Billing",
+ "Category": "Detect",
+ "Value": "Significant",
+ "Comment": "Cloud Billing provides detailed cost tracking and budget alerts that can detect resource hijacking through unexpected cost increases, unusual spending patterns, or anomalous resource usage charges. Billing data can reveal unauthorized resource consumption before it becomes financially significant. This provides Significant detection capability as resource hijacking typically causes measurable cost impacts."
+ },
+ {
+ "GCPService": "Security Command Center",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Security Command Center can detect resource hijacking through findings related to suspicious instance launches, anomalous API activity, and cryptocurrency mining indicators. SCC identifies known resource hijacking patterns and misconfigurations that could enable abuse. Coverage is Partial as detection focuses on known attack patterns and may not identify all forms of resource hijacking, especially novel or low-volume abuse."
+ },
+ {
+ "GCPService": "Compute Engine",
+ "Category": "Protect",
+ "Value": "Minimal",
+ "Comment": "Compute Engine can be protected through IAM policies, resource quotas, and organization policies that limit instance creation and resource consumption. However, protection is Minimal against resource hijacking as these controls focus on access management rather than preventing abuse by authorized users. Resource quotas can limit impact but don't prevent hijacking if within quotas."
+ }
+ ]
},
{
"Name": "Network Denial of Service",
@@ -2133,7 +2333,32 @@
"Description": "An adversary may attempt to enumerate the cloud services running on a system after gaining access. These methods can differ from platform-as-a-service (PaaS), to infrastructure-as-a-service (IaaS), or software-as-a-service (SaaS). Many services exist throughout the various cloud providers and can include Continuous Integration and Continuous Delivery (CI/CD), Lambda Functions, Azure AD, etc. They may also include security services, such as AWS GuardDuty and Microsoft Defender for Cloud, and logging services, such as AWS CloudTrail and Google Cloud Audit Logs.",
"TechniqueURL": "https://attack.mitre.org/techniques/T1526/",
"Checks": [],
- "Attributes": []
+ "Attributes": [
+ {
+ "GCPService": "Cloud Audit Logs",
+ "Category": "Detect",
+ "Value": "Significant",
+ "Comment": "Cloud Audit Logs capture all service discovery operations including API calls to list resources, enumerate services, and query project configurations. Logs record operations like compute.instances.list, storage.buckets.list, and resourcemanager.projects.get that indicate service discovery activities. This provides Significant detection capability for identifying when adversaries are enumerating cloud infrastructure."
+ },
+ {
+ "GCPService": "Cloud Asset Inventory",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Cloud Asset Inventory maintains a comprehensive view of all GCP resources, which is the same information adversaries seek during cloud service discovery. Monitoring Asset Inventory API usage can reveal reconnaissance activities. However, detection is Partial as Asset Inventory access is often legitimate for operational and security purposes, making it difficult to distinguish malicious from normal discovery activities."
+ },
+ {
+ "GCPService": "Security Command Center",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Security Command Center can detect suspicious service discovery patterns through findings related to unusual API activity, anomalous resource enumeration, and reconnaissance behavior. SCC identifies patterns that may indicate adversary discovery activities. Coverage is Partial as detection relies on behavioral anomalies and may not catch all service discovery, especially when performed by authorized users or conducted gradually."
+ },
+ {
+ "GCPService": "VPC Service Controls",
+ "Category": "Protect",
+ "Value": "Minimal",
+ "Comment": "VPC Service Controls can restrict access to GCP APIs from specific networks, limiting service discovery capabilities from external or untrusted networks. However, protection is Minimal as VPC Service Controls cannot prevent service discovery by users within the security perimeter, and many legitimate operations require service discovery capabilities, making it difficult to restrict without impacting functionality."
+ }
+ ]
},
{
"Name": "Cloud Storage Object Discovery",
@@ -2273,7 +2498,32 @@
"Description": "Adversaries may gather information in an attempt to calculate the geographical location of a victim host. Adversaries may use the information from System Location Discovery during automated discovery to shape follow-on behaviors, including whether or not the adversary fully infects the target and/or attempts specific actions.",
"TechniqueURL": "https://attack.mitre.org/techniques/T1614/",
"Checks": [],
- "Attributes": []
+ "Attributes": [
+ {
+ "GCPService": "Cloud Audit Logs",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Cloud Audit Logs capture API calls that reveal location information such as compute.zones.list, compute.regions.list, and metadata server queries. These operations can indicate adversaries attempting to determine the geographic location of GCP resources. However, detection is Partial because Audit Logs capture API-level activities but cannot monitor instance-level metadata queries without additional logging agents."
+ },
+ {
+ "GCPService": "Cloud Monitoring",
+ "Category": "Detect",
+ "Value": "Minimal",
+ "Comment": "Cloud Monitoring can collect logs from Compute Engine instances through the Ops Agent that may capture location discovery commands if properly configured. However, this provides only Minimal detection as it requires agent installation and log forwarding configuration. Adversaries can query location through the metadata server in ways that may not be captured by standard monitoring."
+ },
+ {
+ "GCPService": "Security Command Center",
+ "Category": "Detect",
+ "Value": "Minimal",
+ "Comment": "Security Command Center provides Minimal direct detection for system location discovery activities. SCC focuses on detecting security threats and misconfigurations rather than reconnaissance queries about geographic location. Detection of location discovery would be indirect, potentially through identifying compromised instances that may be performing broader reconnaissance activities."
+ },
+ {
+ "GCPService": "VPC",
+ "Category": "Protect",
+ "Value": "Minimal",
+ "Comment": "VPC provides Minimal protection against system location discovery. While VPC firewall rules and network configurations can restrict network access, adversaries with instance access can still query location information through GCP APIs and the Compute Engine metadata server. Network controls focus on connectivity isolation rather than preventing location enumeration."
+ }
+ ]
},
{
"Name": "System Information Discovery",
@@ -2325,7 +2575,32 @@
"Description": "Adversaries may attempt to get a listing of software and software versions that are installed on a system or in a cloud environment. Adversaries may use the information from Software Discovery during automated discovery to shape follow-on behaviors, including whether or not the adversary fully infects the target and/or attempts specific actions.",
"TechniqueURL": "https://attack.mitre.org/techniques/T1518/",
"Checks": [],
- "Attributes": []
+ "Attributes": [
+ {
+ "GCPService": "Cloud Asset Inventory",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Cloud Asset Inventory maintains inventory of software packages and OS information for Compute Engine instances when the Ops Agent is installed. This inventory reveals what software adversaries might discover. However, Asset Inventory provides only Partial detection as it focuses on maintaining inventory rather than detecting active software enumeration by adversaries. It's useful for understanding the software attack surface."
+ },
+ {
+ "GCPService": "Cloud Audit Logs",
+ "Category": "Detect",
+ "Value": "Partial",
+ "Comment": "Cloud Audit Logs capture API calls related to software and image discovery such as compute.images.list, compute.diskTypes.list, and container image queries. These operations can indicate adversaries attempting to enumerate software in the cloud environment. However, detection is Partial because Audit Logs cannot monitor instance-level software enumeration commands without additional logging agents."
+ },
+ {
+ "GCPService": "Security Command Center",
+ "Category": "Detect",
+ "Value": "Minimal",
+ "Comment": "Security Command Center provides Minimal direct detection for software discovery activities. SCC focuses on detecting vulnerabilities and misconfigurations in deployed software rather than reconnaissance activities. Detection would be indirect, potentially identifying compromised instances that may be performing software enumeration as part of broader attack patterns."
+ },
+ {
+ "GCPService": "Cloud Monitoring",
+ "Category": "Detect",
+ "Value": "Minimal",
+ "Comment": "Cloud Monitoring can collect logs from instances through the Ops Agent that may capture software enumeration commands if properly configured. However, this provides only Minimal detection as it requires agent deployment and log forwarding setup. Adversaries may use various methods to enumerate software that bypass or evade standard monitoring configurations."
+ }
+ ]
},
{
"Name": "Permission Groups Discovery",
diff --git a/prowler/compliance/oci/__init__.py b/prowler/compliance/oci/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/prowler/compliance/oci/cis_3.0_oci.json b/prowler/compliance/oci/cis_3.0_oci.json
new file mode 100644
index 0000000000..033a0845e5
--- /dev/null
+++ b/prowler/compliance/oci/cis_3.0_oci.json
@@ -0,0 +1,1141 @@
+{
+ "Framework": "CIS",
+ "Name": "CIS Oracle Cloud Infrastructure Foundations Benchmark v3.0.0",
+ "Version": "3.0",
+ "Provider": "OCI",
+ "Description": "The CIS Oracle Cloud Infrastructure Foundations Benchmark provides prescriptive guidance for configuring security options for Oracle Cloud Infrastructure with an emphasis on foundational, testable, and architecture agnostic settings.",
+ "Requirements": [
+ {
+ "Id": "1.1",
+ "Description": "Ensure service level admins are created to manage resources of particular service",
+ "Checks": [
+ "identity_service_level_admins_exist"
+ ],
+ "Attributes": [
+ {
+ "Section": "1. Identity and Access Management",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Manual",
+ "Description": "To apply least-privilege security principle, one can create service-level administrators in corresponding groups and assigning specific users to each service-level administrative group in a tenancy. This limits administrative access in a tenancy. \n\nIt means service-level administrators can only manage resources of a specific service.\n\nExample policies for global/tenant level service-administrators\n```\nAllow group VolumeAdmins to manage volume-family in tenancy\nAllow group ComputeAdmins to manage instance-family in tenancy\nAllow group NetworkAdmins to manage virtual-network-family in tenancy\n```\n\n```\nA tenancy with identity domains : An Identity Domain is a container of users, groups, Apps and other security configurations. A tenancy that has Identity Domains available comes seeded with a 'Default' identity domain. \n\nIf a group belongs to a domain different than the default domain, use a domain prefix in the policy statements.\nExample - \nAllow group / to in compartment \n\nIf you do not include the before the , then the policy statement is evaluated as though the group belongs to the default identity domain.\n\n```\nOrganizations have various ways of defining service-administrators. Some may prefer creating service administrators at a tenant level and some per department or per project or even per application environment ( dev/test/production etc.). Either approach works so long as the policies are written to limit access given to the service-administrators.\n\n Example policies for compartment level service-administrators \n\n```\nAllow group NonProdComputeAdmins to manage instance-family in compartment dev\nAllow group ProdComputeAdmins to manage instance-family in compartment production\nAllow group A-Admins to manage instance-family in compartment Project-A\nAllow group A-Admins to manage volume-family in compartment Project-A\n```\n\n```\nA tenancy with identity domains : An Identity Domain is a container of users, groups, Apps and other security configurations. A tenancy that has Identity Domains available comes seeded with a 'Default' identity domain. \n\nIf a group belongs to a domain different than the default domain, use a domain prefix in the policy statements.\nExample - \nAllow group / to in compartment \n\nIf you do not include the before the , then the policy statement is evaluated as though the group belongs to the default identity domain.\n\n```",
+ "RationaleStatement": "Creating service-level administrators helps in tightly controlling access to Oracle Cloud Infrastructure (OCI) services to implement the least-privileged security principle.",
+ "ImpactStatement": "",
+ "RemediationProcedure": "Refer to the [policy syntax document](https://docs.cloud.oracle.com/en-us/iaas/Content/Identity/Concepts/policysyntax.htm) and create new policies if the audit results indicate that the required policies are missing.\nThis can be done via OCI console or OCI CLI/SDK or API.\n\nCreating a new policy:\n\n***From CLI:***\n\n```\noci iam policy create [OPTIONS]\n```\nCreates a new policy in the specified compartment (either the tenancy or another of your compartments). If you're new to policies, see\n [Getting Started with Policies](https://docs.cloud.oracle.com/Content/Identity/Concepts/policygetstarted.htm) \n\nYou must specify a name for the policy, which must be unique across all policies in your tenancy and cannot be changed.\n\nYou must also specify a description for the policy (although it can be an empty string). It does not have to be unique, and you can change it anytime with UpdatePolicy.\n\nYou must specify one or more policy statements in the statements array.\nFor information about writing policies, see How [Policies Work](https://docs.cloud.oracle.com/Content/Identity/Concepts/policies.htm) and [Common Policies](https://docs.cloud.oracle.com/Content/Identity/Concepts/commonpolicies.htm).",
+ "AuditProcedure": "***From CLI:***\n\n1) [Set up OCI CLI](https://docs.cloud.oracle.com/iaas/Content/API/SDKDocs/cliinstall.htm) with an IAM administrator user who has read access to IAM resources such as groups and policies.\n\n2) Run OCI CLI command providing the root_compartment_OCID\nGet the list of groups in a tenancy\n```\noci iam group list --compartment-id | grep name\n```\n\n```\nA tenancy with identity domains : The above CLI commands work with the default identity domain only.\nFor IaaS resource management, users and groups created in the default domain are sufficient. \n\n```\n3) Ensure distinct administrative groups are created as per your organization's definition of service-administrators.\n\n4) Verify the appropriate policies are created for the service-administrators groups to have the right access to the corresponding services. Retrieve the policy statements scoped at the tenancy level and/or per compartment. \n```\noci iam policy list --compartment-id | grep \"in tenancy\"\n\noci iam policy list --compartment-id | grep \"in compartment\"\n```\nThe --compartment-id parameter can be changed to a child compartment to get policies associated with child compartments.\n```\noci iam policy list --compartment-id | grep \"in compartment\"\n\n```\nVerify the results to ensure the right policies are created for service-administrators to have the necessary access.",
+ "AdditionalInformation": "",
+ "References": ""
+ }
+ ]
+ },
+ {
+ "Id": "1.2",
+ "Description": "Ensure permissions on all resources are given only to the tenancy administrator group",
+ "Checks": [
+ "identity_tenancy_admin_permissions_limited"
+ ],
+ "Attributes": [
+ {
+ "Section": "1. Identity and Access Management",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Automated",
+ "Description": "There is a built-in OCI IAM policy enabling the Administrators group to perform any action within a tenancy. In the OCI IAM console, this policy reads:\n\n```\nAllow group Administrators to manage all-resources in tenancy\n```\n\nAdministrators create more users, groups, and policies to provide appropriate access to other groups.\n\nAdministrators should not allow any-other-group full access to the tenancy by writing a policy like this - \n\n```\nAllow group any-other-group to manage all-resources in tenancy\n```\n\nThe access should be narrowed down to ensure the least-privileged principle is applied.",
+ "RationaleStatement": "Permission to manage all resources in a tenancy should be limited to a small number of users in the `Administrators` group for break-glass situations and to set up users/groups/policies when a tenancy is created.\n\nNo group other than `Administrators` in a tenancy should need access to all resources in a tenancy, as this violates the enforcement of the least privilege principle.",
+ "ImpactStatement": "",
+ "RemediationProcedure": "**From Console:**\n\n1) Login to OCI console.\n2) Go to `Identity` -> `Policies`, In the compartment dropdown, choose the root compartment. Open each policy to view the policy statements. \n2) Remove any policy statement that allows any group other than `Administrators` or any service access to manage all resources in the tenancy. \n\n**From CLI:**\n\nThe policies can also be updated via OCI CLI, SDK and API, with an example of the CLI commands below:\n\n * Delete a policy via the CLI:\n `oci iam policy delete --policy-id `\n\n * Update a policy via the CLI:\n `oci iam policy update --policy-id --statements `\n\nNote: You should generally **not** delete the policy that allows the `Administrators` group the ability to manage all resources in the tenancy.",
+ "AuditProcedure": "**From CLI:**\n\n1) Run OCI CLI command providing the root compartment OCID to get the list of groups having access to manage all resources in your tenancy. \n\n```\noci iam policy list --compartment-id | grep -i \"to manage all-resources in tenancy\" \n```\n2) Verify the results to ensure only the `Administrators` group has access to manage all resources in tenancy.\n\n \"Allow group Administrators to manage all-resources in tenancy\"",
+ "AdditionalInformation": "",
+ "References": ""
+ }
+ ]
+ },
+ {
+ "Id": "1.3",
+ "Description": "Ensure IAM administrators cannot update tenancy Administrators group",
+ "Checks": [
+ "identity_iam_admins_cannot_update_tenancy_admins"
+ ],
+ "Attributes": [
+ {
+ "Section": "1. Identity and Access Management",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Automated",
+ "Description": "Tenancy administrators can create more users, groups, and policies to provide other service administrators access to OCI resources.\n\nFor example, an IAM administrator will need to have access to manage \nresources like compartments, users, groups, dynamic-groups, policies, identity-providers, tenancy tag-namespaces, tag-definitions in the tenancy.\n\nThe policy that gives IAM-Administrators or any other group full access to 'groups' resources should not allow access to the tenancy 'Administrators' group.\n\nThe policy statements would look like -\n\n```\nAllow group IAMAdmins to inspect users in tenancy\nAllow group IAMAdmins to use users in tenancy where target.group.name != 'Administrators'\nAllow group IAMAdmins to inspect groups in tenancy\nAllow group IAMAdmins to use groups in tenancy where target.group.name != 'Administrators'\n```\n\n**Note:** You must include separate statements for 'inspect' access, because the target.group.name variable is not used by the ListUsers and ListGroups operations",
+ "RationaleStatement": "These policy statements ensure that no other group can manage tenancy administrator users or the membership to the 'Administrators' group thereby gain or remove tenancy administrator access.",
+ "ImpactStatement": "",
+ "RemediationProcedure": "**From Console:**\n\n1. Login to OCI Console.\n2. Select `Identity` from Services Menu.\n3. Select `Policies` from Identity Menu.\n4. Click on an individual policy under the Name heading.\n5. Ensure Policy statements look like this -\n\n```\nAllow group IAMAdmins to use users in tenancy where target.group.name != 'Administrators'\nAllow group IAMAdmins to use groups in tenancy where target.group.name != 'Administrators'\n```",
+ "AuditProcedure": "**From CLI:**\n\n1) Run the following OCI CLI commands providing the root_compartment_OCID \n\n```\noci iam policy list --compartment-id | grep -i \" to use users in tenancy\"\noci iam policy list --compartment-id | grep -i \" to use groups in tenancy\"\n```\n2) Verify the results to ensure that the policy statements that grant access to use or manage users or groups in the tenancy have a condition that excludes access to `Administrators` group or to users in the Administrators group.",
+ "AdditionalInformation": "",
+ "References": ""
+ }
+ ]
+ },
+ {
+ "Id": "1.4",
+ "Description": "Ensure IAM password policy requires minimum length of 14 or greater",
+ "Checks": [
+ "identity_password_policy_minimum_length_14"
+ ],
+ "Attributes": [
+ {
+ "Section": "1. Identity and Access Management",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Automated",
+ "Description": "Password policies are used to enforce password complexity requirements. IAM password policies can be used to ensure passwords are at least a certain length and are composed of certain characters. \n\nIt is recommended the password policy require a minimum password length 14 characters and contain 1 non-alphabetic\ncharacter (Number or “Special Character”).",
+ "RationaleStatement": "In keeping with the overall goal of having users create a password that is not overly weak, an eight-character minimum password length is recommended for an MFA account, and 14 characters for a password only account. In addition, maximum password length should be made as long as possible based on system/software capabilities and not restricted by policy.\n\nIn general, it is true that longer passwords are better (harder to crack), but it is also true that forced password length requirements can cause user behavior that is predictable and undesirable. For example, requiring users to have a minimum 16-character password may cause them to choose repeating patterns like fourfourfourfour or passwordpassword that meet the requirement but aren’t hard to guess. Additionally, length requirements increase the chances that users will adopt other insecure practices, like writing them down, re-using them or storing them unencrypted in their documents. \n\nPassword composition requirements are a poor defense against guessing attacks. Forcing users to choose some combination of upper-case, lower-case, numbers, and special characters has a negative impact. It places an extra burden on users and many\nwill use predictable patterns (for example, a capital letter in the first position, followed by lowercase letters, then one or two numbers, and a “special character” at the end). Attackers know this, so dictionary attacks will often contain these common patterns and use the most common substitutions like, $ for s, @ for a, 1 for l, 0 for o.\n\nPasswords that are too complex in nature make it harder for users to remember, leading to bad practices. In addition, composition requirements provide no defense against common attack types such as social engineering or insecure storage of passwords.",
+ "ImpactStatement": "",
+ "RemediationProcedure": "1. Go to Identity Domains: [https://cloud.oracle.com/identity/domains/](https://cloud.oracle.com/identity/domains/)\n1. Select the Compartment the Domain to remediate is in\n1. Click on the Domain to remediate\n1. Click on Settings\n1. Click on Password policy to remediate\n1. Click Edit password rules\n1. Update the `Password length (minimum)` setting to 14 or greater\n6. Under The `Passwords must meet the following character requirements` section, update the number given in `Special (minimum)` setting to `1` or greater\n\nor\n\n Under The `Passwords must meet the following character requirements` section, update the number given in `Numeric (minimum)` setting to `1` or greater\n7. Click `Save changes`",
+ "AuditProcedure": "1. Go to Identity Domains: [https://cloud.oracle.com/identity/domains/](https://cloud.oracle.com/identity/domains/)\n1. Select the `Compartment` your Domain to review is in\n1. Click on the Domain to review\n1. Click on `Settings`\n1. Click on `Password policy`\n1. Click each Password policy in the domain\n1. Ensure `Password length (minimum)` is greater than or equal to 14\n1. Under The `The following criteria apply to passwords` section, ensure that the number given in `Numeric (minimum)` setting is `1`, or the `Special (minimum)` setting is `1`.\n\nThe following criteria apply to passwords:\n6. Ensure that 1 or more is selected for `Numeric (minimum)` OR `Special (minimum)`\n\n**From Cloud Guard:**\n\nTo Enable Cloud Guard Auditing:\nEnsure Cloud Guard is enabled in the root compartment of the tenancy. For more information about enabling Cloud Guard, please look at the instructions included in \"Ensure Cloud Guard is enabled in the root compartment of the tenancy\" Recommendation in the \"Logging and Monitoring\" section. \n\n**From Console:**\n1. Type `Cloud Guard` into the Search box at the top of the Console.\n2. Click `Cloud Guard` from the “Services” submenu.\n3. Click `Detector Recipes` in the Cloud Guard menu.\n4. Click `OCI Configuration Detector Recipe (Oracle Managed)` under the Recipe Name column.\n5. Find Password policy does not meet complexity requirements in the Detector Rules column.\n6. Select the vertical ellipsis icon and chose `Edit` on the Password policy does not meet complexity requirements row.\n7. In the Edit Detector Rule window, find the Input Setting box and verify/change the Required password length setting to 14.\n8. Click the `Save` button.\n\n**From CLI:**\n1. Update the Password policy does not meet complexity requirements Detector Rule in Cloud Guard to generate Problems if IAM password policy isn’t configured to enforce a password length of at least 14 characters with the following command:\n\n```\noci cloud-guard detector-recipe-detector-rule update --detector-recipe-id --detector-rule-id PASSWORD_POLICY_NOT_COMPLEX --details '{\"configurations\":[{ \"configKey\" : \"passwordPolicyMinLength\", \"name\" : \"Required password length\", \"value\" : \"14\", \"dataType\" : null, \"values\" : null }]}'\n```",
+ "AdditionalInformation": "The Audit Procedure and Remediation Procedure for OCI IAM without Identity Domains can be found in the CIS OCI Foundation Benchmark 2.0.0 under the respective recommendations.",
+ "References": "https://www.cisecurity.org/white-papers/cis-password-policy-guide/"
+ }
+ ]
+ },
+ {
+ "Id": "1.5",
+ "Description": "Ensure IAM password policy expires passwords within 365 days",
+ "Checks": [
+ "identity_password_policy_expires_within_365_days"
+ ],
+ "Attributes": [
+ {
+ "Section": "1. Identity and Access Management",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Manual",
+ "Description": "IAM password policies can require passwords to be rotated or expired after a given number of days. It is recommended that the password policy expire passwords after 365 and are changed immediately based on events.",
+ "RationaleStatement": "Excessive password expiration requirements do more harm than good, because these requirements make users select predictable passwords, composed of sequential words and numbers that are closely related to each other.10 In these cases, the next password can be predicted based on the previous one (incrementing a number used in the password for example). Also, password expiration requirements offer no containment benefits because attackers will often use credentials as soon as they compromise them. Instead, immediate password changes should be based on key events including, but not\nlimited to:\n\n1. Indication of compromise\n1. Change of user roles\n1. When a user leaves the organization.\n\nNot only does changing passwords every few weeks or months frustrate the user, it’s been suggested that it does more harm than good, because it could lead to bad practices by the user such as adding a character to the end of their existing password.\n\nIn addition, we also recommend a yearly password change. This is primarily because for all their good intentions users will share credentials across accounts. Therefore, even if a breach is publicly identified, the user may not see this notification, or forget they have an account on that site. This could leave a shared credential vulnerable indefinitely. Having an organizational policy of a 1-year (annual) password expiration is a reasonable compromise to mitigate this with minimal user burden.",
+ "ImpactStatement": "",
+ "RemediationProcedure": "1. Go to Identity Domains: [https://cloud.oracle.com/identity/domains/](https://cloud.oracle.com/identity/domains/)\n1. Select the `Compartment` the Domain to remediate is in\n1. Click on the Domain to remediate\n1. Click on `Settings`\n1. Click on `Password policy` to remediate\n1. Click `Edit password rules`\n1. Change `Expires after (days)` to 365",
+ "AuditProcedure": "1. Go to Identity Domains: [https://cloud.oracle.com/identity/domains/](https://cloud.oracle.com/identity/domains/)\n1. Select the `Compartment` your Domain to review is in\n1. Click on the Domain to review\n1. Click on `Settings`\n1. Click on `Password policy`\n1. Click each Password policy in the domain\n1. Ensure `Expires after (days)` is less than or equal to 365 days",
+ "AdditionalInformation": "The Audit Procedure and Remediation Procedure for OCI IAM without Identity Domains can be found in the CIS OCI Foundation Benchmark 2.0.0 under the respective recommendations.",
+ "References": "https://www.cisecurity.org/white-papers/cis-password-policy-guide/"
+ }
+ ]
+ },
+ {
+ "Id": "1.6",
+ "Description": "Ensure IAM password policy prevents password reuse",
+ "Checks": [
+ "identity_password_policy_prevents_reuse"
+ ],
+ "Attributes": [
+ {
+ "Section": "1. Identity and Access Management",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Manual",
+ "Description": "IAM password policies can prevent the reuse of a given password by the same user. It is recommended the password policy prevent the reuse of passwords.",
+ "RationaleStatement": "Enforcing password history ensures that passwords are not reused in for a certain period of time by the same user. If a user is not allowed to use last 24 passwords, that window of time is greater. This helps maintain the effectiveness of password security.",
+ "ImpactStatement": "",
+ "RemediationProcedure": "1. Go to Identity Domains: [https://cloud.oracle.com/identity/domains/](https://cloud.oracle.com/identity/domains/)\n1. Select the Compartment the Domain to remediate is in\n1. Click on the Domain to remediate\n1. Click on Settings\n1. Click on Password policy to remediate\n1. Click Edit password rules\n1. Update the number of remembered passwords in `Previous passwords remembered` setting to 24 or greater.",
+ "AuditProcedure": "1. Go to Identity Domains: [https://cloud.oracle.com/identity/domains/](https://cloud.oracle.com/identity/domains/)\n1. Select the `Compartment` your Domain to review is in\n1. Click on the Domain to review\n1. Click on `Settings`\n1. Click on `Password policy`\n1. Click each Password policy in the domain\n1. Ensure `Previous passwords remembered` is set 24 or greater",
+ "AdditionalInformation": "The Audit Procedure and Remediation Procedure for OCI IAM without Identity Domains can be found in the CIS OCI Foundation Benchmark 2.0.0 under the respective recommendations.",
+ "References": ""
+ }
+ ]
+ },
+ {
+ "Id": "1.7",
+ "Description": "Ensure MFA is enabled for all users with a console password",
+ "Checks": [
+ "identity_user_mfa_enabled_console_access"
+ ],
+ "Attributes": [
+ {
+ "Section": "1. Identity and Access Management",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Automated",
+ "Description": "Multi-factor authentication is a method of authentication that requires the use of more than one factor to verify a user’s identity.\n\nWith MFA enabled in the IAM service, when a user signs in to Oracle Cloud Infrastructure, they are prompted for their user name and password, which is the first factor (something that they know). The user is then prompted to provide a verification code from a registered MFA device, which is the second factor (something that they have). The two factors work together, requiring an extra layer of security to verify the user’s identity and complete the sign-in process.\n\nOCI IAM supports two-factor authentication using a password (first factor) and a device that can generate a time-based one-time password (TOTP) (second factor).\n\nSee [OCI documentation](https://docs.cloud.oracle.com/en-us/iaas/Content/Identity/Tasks/usingmfa.htm) for more details.",
+ "RationaleStatement": "Multi factor authentication adds an extra layer of security during the login process and makes it harder for unauthorized users to gain access to OCI resources.",
+ "ImpactStatement": "",
+ "RemediationProcedure": "Each user must enable MFA for themselves using a device they will have access to every time they sign in. An administrator cannot enable MFA for another user but can enforce MFA by identifying the list of non-complaint users, notifying them or disabling access by resetting the password for non-complaint accounts.\n\n**Disabling access from Console:**\n\n1. Go to [https://cloud.oracle.com/identity/](https://cloud.oracle.com/identity/).\n1. Select `Domains` from Identity menu.\n1. Select the domain\n1. Click `Security`\n1. Click `Sign-on polices` then the `\"Default Sign-on Policy\"`\n1. Under the sign-on rules header, click the three dots on the rule with the highest priority.\n1. Select `Edit sign-on rule`\n1. Make a change to ensure that `allow access` is selected and `prompt for an additional factor` is enabled",
+ "AuditProcedure": "**From Console:**\n1. Go to Identity Domains: [https://cloud.oracle.com/identity/domains/](https://cloud.oracle.com/identity/domains/)\n1. Select the `Compartment` your Domain to review is in\n1. Click on the Domain to review\n1. Click on `Security`\n1. Click `Sign-on policies` \n1. Select the sign-on policy to review\n6. Under the sign-on rules header, click the three dots on the rule with the highest priority.\n7. Select `Edit sign-on rule`\n8. Verify that `allow access` is selected and `prompt for an additional factor` is enabled\n\n* This requires users to enable MFA when they next login next however, to determine users have enabled MFA use the below CLI.\n\n**From the CLI:**\n* This CLI command checks which users have enabled MFA for their accounts\n1. Execute the below:\n```\ntenancy_ocid=`oci iam compartment list --raw-output --query \"data[?contains(\\\"compartment-id\\\",'.tenancy.')].\\\"compartment-id\\\" | [0]\"`\nfor id_domain_url in `oci iam domain list --compartment-id $tenancy_ocid --all | jq -r '.data[] | .url'`\ndo\n oci identity-domains users list --endpoint $id_domain_url 2>/dev/null | jq -r '.data.resources[] | select(.\"urn-ietf-params-scim-schemas-oracle-idcs-extension-mfa-user\".\"mfa-status\"!=\"ENROLLED\")' 2>/dev/null | jq -r '.ocid'\n\ndone\nfor region in `oci iam region-subscription list | jq -r '.data[] | .\"region-name\"'`;\n do\n for compid in `oci iam compartment list --compartment-id-in-subtree TRUE --all 2>/dev/null | jq -r '.data[] | .id'`\n do\n for id_domain_url in `oci iam domain list --compartment-id $compid --region $region --all 2>/dev/null | jq -r '.data[] | .url'`\n do\n oci identity-domains users list --endpoint $id_domain_url 2>/dev/null | jq -r '.data.resources[] | select(.\"urn-ietf-params-scim-schemas-oracle-idcs-extension-mfa-user\".\"mfa-status\"!=\"ENROLLED\")' 2>/dev/null | jq -r '.ocid'\n done\n done\n done\n```\n2. Ensure no results are returned",
+ "AdditionalInformation": "The Audit Procedure and Remediation Procedure for OCI IAM without Identity Domains can be found in the CIS OCI Foundation Benchmark 2.0.0 under the respective recommendations.",
+ "References": "https://docs.cloud.oracle.com/en-us/iaas/Content/Identity/Tasks/usingmfa.htm:https://docs.oracle.com/en-us/iaas/Content/Security/Reference/iam_security_topic-IAM_MFA.htm"
+ }
+ ]
+ },
+ {
+ "Id": "1.8",
+ "Description": "Ensure user API keys rotate within 90 days",
+ "Checks": [
+ "identity_user_api_keys_rotated_90_days"
+ ],
+ "Attributes": [
+ {
+ "Section": "1. Identity and Access Management",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Automated",
+ "Description": "API keys are used by administrators, developers, services and scripts for accessing OCI APIs directly or via SDKs/OCI CLI to search, create, update or delete OCI resources.\n\nThe API key is an RSA key pair. The private key is used for signing the API requests and the public key is associated with a local or synchronized user's profile.",
+ "RationaleStatement": "It is important to secure and rotate an API key every 90 days or less as it provides the same level of access that a user it is associated with has.\n\nIn addition to a security engineering best practice, this is also a compliance requirement. For example, PCI-DSS Section 3.6.4 states, \"Verify that key-management procedures include a defined cryptoperiod for each key type in use and define a process for key changes at the end of the defined crypto period(s).\"",
+ "ImpactStatement": "",
+ "RemediationProcedure": "**From Console:**\n\n1. Login to OCI Console.\n2. Select `Identity & Security` from the Services menu.\n3. Select `Domains` from the Identity menu.\n4. For each domain listed, click on the name and select `Users`.\n5. Click on an individual user under the Name heading.\n6. Click on `API Keys` in the lower left-hand corner of the page.\n7. Delete any API Keys that are older than 90 days under the `Created` column of the API Key table.\n\n**From CLI:**\n\n```\noci iam user api-key delete --user-id __ --fingerprint \n```",
+ "AuditProcedure": "**From Console:**\n\n1. Login to OCI Console.\n2. Select `Identity & Security` from the Services menu.\n3. Select `Domains` from the Identity menu.\n4. For each domain listed, click on the name and select `Users`.\n5. Click on an individual user under the Name heading.\n6. Click on `API Keys` in the lower left-hand corner of the page.\n7. Ensure the date of the API key under the `Created` column of the API Key is no more than 90 days old.",
+ "AdditionalInformation": "The Audit Procedure and Remediation Procedure for OCI IAM without Identity Domains can be found in the CIS OCI Foundation Benchmark 2.0.0 under the respective recommendations.",
+ "References": ""
+ }
+ ]
+ },
+ {
+ "Id": "1.9",
+ "Description": "Ensure user customer secret keys rotate within 90 days",
+ "Checks": [
+ "identity_user_customer_secret_keys_rotated_90_days"
+ ],
+ "Attributes": [
+ {
+ "Section": "1. Identity and Access Management",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Automated",
+ "Description": "Object Storage provides an API to enable interoperability with Amazon S3. To use this Amazon S3 Compatibility API, you need to generate the signing key required to authenticate with Amazon S3.\n\nThis special signing key is an Access Key/Secret Key pair. Oracle generates the Customer Secret key to pair with the Access Key.",
+ "RationaleStatement": "It is important to rotate customer secret keys at least every 90 days, as they provide the same level of object storage access that the user they are associated with has.",
+ "ImpactStatement": "",
+ "RemediationProcedure": "**From Console:**\n1. Login to OCI Console.\n1. Select `Identity & Security` from the Services menu.\n1. Select Domains from the Identity menu.\n1. For each domain listed, click on the name and select `Users`.\n1. Click on an individual user under the `Username` heading.\n1. Click on `Customer Secret Keys` in the lower left-hand corner of the page.\n1. Delete any Access Keys with a date older than 90 days under the `Created` column of the Customer Secret Keys.",
+ "AuditProcedure": "**From Console:**\n1. Login to OCI Console.\n1. Select `Identity & Security` from the Services menu.\n1. Select Domains from the Identity menu.\n1. For each domain listed, click on the name and select `Users`.\n1. Click on an individual user under the `Username` heading.\n1. Click on `Customer Secret Keys` in the lower left-hand corner of the page.\n1. Ensure the date of the Customer Secret Key under the `Created` column of the Customer Secret Key is no more than 90 days old.",
+ "AdditionalInformation": "The Audit Procedure and Remediation Procedure for OCI IAM without Identity Domains can be found in the CIS OCI Foundation Benchmark 2.0.0 under the respective recommendations.",
+ "References": ""
+ }
+ ]
+ },
+ {
+ "Id": "1.10",
+ "Description": "Ensure user auth tokens rotate within 90 days",
+ "Checks": [
+ "identity_user_auth_tokens_rotated_90_days"
+ ],
+ "Attributes": [
+ {
+ "Section": "1. Identity and Access Management",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Automated",
+ "Description": "Auth tokens are authentication tokens generated by Oracle. You use auth tokens to authenticate with APIs that do not support the Oracle Cloud Infrastructure signature-based authentication. If the service requires an auth token, the service-specific documentation instructs you to generate one and how to use it.",
+ "RationaleStatement": "It is important to secure and rotate an auth token every 90 days or less as it provides the same level of access to APIs that do not support the OCI signature-based authentication as the user associated to it.",
+ "ImpactStatement": "",
+ "RemediationProcedure": "**From Console:**\n\n1. Login to OCI Console.\n1. Select `Identity & Security` from the Services menu.\n1. Select Domains from the Identity menu.\n1. For each domain listed, click on the name and select `Users`.\n1. Click on an individual user under the `Username` heading.\n1. Click on `Auth Tokens` in the lower left-hand corner of the page.\n1. Delete any auth token with a date older than 90 days under the `Created` column of the Customer Secret Keys.",
+ "AuditProcedure": "**From Console:**\n\n1. Login to OCI Console.\n1. Select `Identity & Security` from the Services menu.\n1. Select Domains from the Identity menu.\n1. For each domain listed, click on the name and select `Users`.\n1. Click on an individual user under the `Username` heading.\n5. Click on `Auth Tokens` in the lower left-hand corner of the page.\n1. Ensure the date of the Auth Token under the `Created` column of the Customer Secret Key is no more than 90 days old.",
+ "AdditionalInformation": "The Audit Procedure and Remediation Procedure for OCI IAM without Identity Domains can be found in the CIS OCI Foundation Benchmark 2.0.0 under the respective recommendations.",
+ "References": ""
+ }
+ ]
+ },
+ {
+ "Id": "1.11",
+ "Description": "Ensure user IAM Database Passwords rotate within 90 days",
+ "Checks": [
+ "identity_user_db_passwords_rotated_90_days"
+ ],
+ "Attributes": [
+ {
+ "Section": "1. Identity and Access Management",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Manual",
+ "Description": "Users can create and manage their database password in their IAM user profile and use that password to authenticate to databases in their tenancy. An IAM database password is a different password than an OCI Console password. Setting an IAM database password allows an authorized IAM user to sign in to one or more Autonomous Databases in their tenancy.\n\nAn IAM database password is a different password than an OCI Console password. Setting an IAM database password allows an authorized IAM user to sign in to one or more Autonomous Databases in their tenancy.",
+ "RationaleStatement": "It is important to secure and rotate an IAM Database password 90 days or less as it provides the same access the user would have a using a local database user.",
+ "ImpactStatement": "",
+ "RemediationProcedure": "#### OCI IAM with Identity Domains\n\n**From Console:**\n1. Login to OCI Console.\n1. Select `Identity & Security` from the Services menu.\n1. Select Domains from the Identity menu.\n1. For each domain listed, click on the name and select `Users`.\n1. Click on an individual user under the `Username` heading.\n1. Click on `IAM Database Passwords` in the lower left-hand corner of the page.\n1. Delete any Database Passwords with a date older than 90 days under the `Created` column of the Database Passwords.",
+ "AuditProcedure": "**From Console:**\n\n1. Login to OCI Console.\n2. Select `Identity & Security` from the Services menu.\n3. Select `Users` from the Identity menu.\n4. Click on an individual user under the Name heading.\n5. Click on `Database Passwords` in the lower left-hand corner of the page.\n6. Ensure the date of the Database Passwords under the `Created` column of the Database Passwords is no more than 90 days \n**From Console:**\n1. Login to OCI Console.\n1. Select `Identity & Security` from the Services menu.\n1. Select Domains from the Identity menu.\n1. For each domain listed, click on the name and select `Users`.\n1. Click on an individual user under the `Username` heading.\n1. Click on `Database Passwords` in the lower left-hand corner of the page.\n1. Ensure the date of the Database Passwords under the `Created` column of the Database Password is no more than 90 days old.",
+ "AdditionalInformation": "The Audit Procedure and Remediation Procedure for OCI IAM without Identity Domains can be found in the CIS OCI Foundation Benchmark 2.0.0 under the respective recommendations.",
+ "References": "https://docs.oracle.com/en-us/iaas/Content/Identity/Concepts/usercredentials.htm#usercredentials_iam_db_pwd"
+ }
+ ]
+ },
+ {
+ "Id": "1.12",
+ "Description": "Ensure API keys are not created for tenancy administrator users",
+ "Checks": [
+ "identity_tenancy_admin_users_no_api_keys"
+ ],
+ "Attributes": [
+ {
+ "Section": "1. Identity and Access Management",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Automated",
+ "Description": "Tenancy administrator users have full access to the organization's OCI tenancy. API keys associated with user accounts are used for invoking the OCI APIs via custom programs or clients like CLI/SDKs. The clients are typically used for performing day-to-day operations and should never require full tenancy access. Service-level administrative users with API keys should be used instead.",
+ "RationaleStatement": "For performing day-to-day operations tenancy administrator access is not needed.\nService-level administrative users with API keys should be used to apply privileged security principle.",
+ "ImpactStatement": "",
+ "RemediationProcedure": "**From Console:**\n\n1. Login to OCI console.\n2. Select `Identity` from Services menu.\n3. Select `Users` from Identity menu, or select `Domains`, select a domain, and select `Users`.\n4. Select the username of a tenancy administrator user with an API key.\n5. Select `API Keys` from the menu in the lower left-hand corner.\n6. Delete any associated keys from the `API Keys` table.\n7. Repeat steps 3-6 for all tenancy administrator users with an API key.\n\n**From CLI:**\n\n1. For each tenancy administrator user with an API key, execute the following command to retrieve API key details:\n```\noci iam user api-key list --user-id \n```\n2. For each API key, execute the following command to delete the key:\n```\noci iam user api-key delete --user-id --fingerprint \n```\n3. The following message will be displayed:\n```\nAre you sure you want to delete this resource? [y/N]:\n```\n4. Type 'y' and press 'Enter'.",
+ "AuditProcedure": "**From Console:**\n\n1. Login to OCI Console. \n1. Select `Identity & Security` from the Services menu.\n1. Select `Domains` from the Identity menu.\n1. Click on the 'Default' Domain in the (root).\n1. Click on 'Groups'.\n1. Select the 'Administrators' group by clicking on the Name\n1. Click on each local or synchronized `Administrators` member profile\n4. Click on API Keys to verify if a user has an API key associated.",
+ "AdditionalInformation": "The Audit Procedure and Remediation Procedure for OCI IAM without Identity Domains can be found in the CIS OCI Foundation Benchmark 2.0.0 under the respective recommendations.",
+ "References": ""
+ }
+ ]
+ },
+ {
+ "Id": "1.13",
+ "Description": "Ensure all OCI IAM user accounts have a valid and current email address",
+ "Checks": [
+ "identity_user_valid_email_address"
+ ],
+ "Attributes": [
+ {
+ "Section": "1. Identity and Access Management",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Manual",
+ "Description": "All OCI IAM local user accounts have an email address field associated with the account. It is recommended to specify an email address that is valid and current.\n\nIf you have an email address in your user profile, you can use the Forgot Password link on the sign on page to have a temporary password sent to you.",
+ "RationaleStatement": "Having a valid and current email address associated with an OCI IAM local user account allows you to tie the account to identity in your organization. It also allows that user to reset their password if it is forgotten or lost.",
+ "ImpactStatement": "",
+ "RemediationProcedure": "**From Console:**\n1. Login to OCI Console.\n1. Select `Identity & Security` from the Services menu.\n1. Select Domains from the Identity menu.\n1. For each domain listed, click on the name and select `Users`.\n1. Click on each non-complaint user.\n1. Click on `Edit User`.\n1. Enter a valid and current email address in the Email and Recovery Email text boxes.\n1. Click `Save Changes`",
+ "AuditProcedure": "**From Console:**\n1. Login to OCI Console.\n1. Select `Identity & Security` from the Services menu.\n1. Select Domains from the Identity menu.\n1. For each domain listed, click on the name and select `Users`.\n1. Click on an individual user under the `Username` heading.\n1. Ensure a valid and current email address is next to Email and Recovery email.",
+ "AdditionalInformation": "The Audit Procedure and Remediation Procedure for OCI IAM without Identity Domains can be found in the CIS OCI Foundation Benchmark 2.0.0 under the respective recommendations.",
+ "References": ""
+ }
+ ]
+ },
+ {
+ "Id": "1.14",
+ "Description": "Ensure Instance Principal authentication is used for OCI instances, OCI Cloud Databases and OCI Functions to access OCI resources",
+ "Checks": [
+ "identity_instance_principal_used"
+ ],
+ "Attributes": [
+ {
+ "Section": "1. Identity and Access Management",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Manual",
+ "Description": "OCI instances, OCI database and OCI functions can access other OCI resources either via an OCI API key associated to a user or via Instance Principal. Instance Principal authentication can be achieved by inclusion in a Dynamic Group that has an IAM policy granting it the required access or using an OCI IAM policy that has `request.principal` added to the `where` clause. Access to OCI Resources refers to making API calls to another OCI resource like Object Storage, OCI Vaults, etc.",
+ "RationaleStatement": "Instance Principal reduces the risks related to hard-coded credentials. Hard-coded API keys can be shared and require rotation, which can open them up to being compromised. Compromised credentials could allow access to OCI services outside of the expected radius.",
+ "ImpactStatement": "For an OCI instance that contains embedded credential audit the scripts and environment variables to ensure that none of them contain OCI API Keys or credentials.",
+ "RemediationProcedure": "**From Console (Dynamic Groups):**\n1. Go to [https://cloud.oracle.com/identity/domains/](https://cloud.oracle.com/identity/domains/)\n1. Select a Compartment\n1. Click on the Domain\n1. Click on `Dynamic groups`\n1. Click Create Dynamic Group.\n1. Enter a Name\n1. Enter a Description\n1. Enter Matching Rules to that includes the instances accessing your OCI resources.\n1. Click Create.",
+ "AuditProcedure": "**From Console (Dynamic Groups):**\n1. Go to [https://cloud.oracle.com/identity/domains/](https://cloud.oracle.com/identity/domains/)\n1. Select a Compartment\n1. Click on a Domain\n1. Click on `Dynamic groups`\n1. Click on the Dynamic Group\n1. Check if the Matching Rules includes the instances accessing your OCI resources.\n\n**From Console (request.principal):**\n1. Go to [https://cloud.oracle.com/identity/policies](https://cloud.oracle.com/identity/policies)\n1. Select a Compartment\n1. Click on an individual policy under the Name heading.\n1. Ensure Policy statements look like this :\n```\nallow any-user to in compartment where ALL {request.principal.type='', request.principal.id=''}\n```\nor\n```\nallow any-user to in compartment where ALL {request.principal.type='', request.principal.compartment.id=''}\n```\n\n**From CLI (request.principal):**\n1. Execute the following for each compartment_OCID: \n```\noci iam policy list --compartment-id | grep request.principal\n```\n1. Ensure that the condition includes the instances accessing your OCI resources",
+ "AdditionalInformation": "The Audit Procedure and Remediation Procedure for OCI IAM without Identity Domains can be found in the CIS OCI Foundation Benchmark 2.0.0 under the respective recommendations.",
+ "References": "https://docs.oracle.com/en-us/iaas/Content/Identity/Tasks/managingdynamicgroups.htm"
+ }
+ ]
+ },
+ {
+ "Id": "1.15",
+ "Description": "Ensure storage service-level admins cannot delete resources they manage",
+ "Checks": [],
+ "Attributes": [
+ {
+ "Section": "1. Identity and Access Management",
+ "Profile": "Level 2",
+ "AssessmentStatus": "Manual",
+ "Description": "To apply the separation of duties security principle, one can restrict service-level administrators from being able to delete resources they are managing. It means service-level administrators can only manage resources of a specific service but not delete resources for that specific service.\n\nExample policies for global/tenant level for block volume service-administrators:\n```\nAllow group VolumeUsers to manage volumes in tenancy where request.permission!='VOLUME_DELETE' \nAllow group VolumeUsers to manage volume-backups in tenancy where request.permission!='VOLUME_BACKUP_DELETE'\n```\n\nExample policies for global/tenant level for file storage system service-administrators:\n```\nAllow group FileUsers to manage file-systems in tenancy where request.permission!='FILE_SYSTEM_DELETE'\nAllow group FileUsers to manage mount-targets in tenancy where request.permission!='MOUNT_TARGET_DELETE'\nAllow group FileUsers to manage export-sets in tenancy where request.permission!='EXPORT_SET_DELETE'\n```\n\nExample policies for global/tenant level for object storage system service-administrators:\n```\nAllow group BucketUsers to manage objects in tenancy where request.permission!='OBJECT_DELETE' \nAllow group BucketUsers to manage buckets in tenancy where request.permission!='BUCKET_DELETE'\n```",
+ "RationaleStatement": "Creating service-level administrators without the ability to delete the resource they are managing helps in tightly controlling access to Oracle Cloud Infrastructure (OCI) services by implementing the separation of duties security principle.",
+ "ImpactStatement": "",
+ "RemediationProcedure": "**From Console:**\n1. Login to OCI console.\n2. Go to Identity -> Policies, In the compartment dropdown, choose the compartment. Open each policy to view the policy statements.\n3. Add the appropriate `where` condition to any policy statement that allows the storage service-level to manage the storage service.",
+ "AuditProcedure": "**From Console:**\n1. Login to OCI console.\n2. Go to Identity -> Policies, In the compartment dropdown, choose the compartment. \n3. Open each policy to view the policy statements.\n4. Verify the policies to ensure that the policy statements that grant access to storage service-level administrators have a condition that excludes access to delete the service they are the administrator for.\n\n**From CLI:**\n1. Execute the following command:\n```\nfor compid in `oci iam compartment list --compartment-id-in-subtree TRUE 2>/dev/null | jq -r '.data[] | .id'`\n do\n for policy in `oci iam policy list --compartment-id $compid 2>/dev/null | jq -r '.data[] | .id'`\n do\n output=`oci iam policy list --compartment-id $compid 2>/dev/null | jq -r '.data[] | .id, .name, .statements'` \n if [ ! -z \"$output\" ]; then echo $output; fi\n done\n done\n```\n2. Verify the policies to ensure that the policy statements that grant access to storage service-level administrators have a condition that excludes access to delete the service they are the administrator for.",
+ "AdditionalInformation": "",
+ "References": "https://docs.oracle.com/en/solutions/oci-best-practices/protect-data-rest1.html#GUID-939A5EA1-3057-48E0-9E02-ADAFCB82BA3E:https://docs.oracle.com/en-us/iaas/Content/Identity/policyreference/policyreference.htm:https://docs.oracle.com/en-us/iaas/Content/Block/home.htm:https://docs.oracle.com/en-us/iaas/Content/File/home.htm:https://docs.oracle.com/en-us/iaas/Content/Object/home.htm"
+ }
+ ]
+ },
+ {
+ "Id": "1.16",
+ "Description": "Ensure OCI IAM credentials unused for 45 days or more are disabled",
+ "Checks": [],
+ "Attributes": [
+ {
+ "Section": "1. Identity and Access Management",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Automated",
+ "Description": "OCI IAM Local users can access OCI resources using different credentials, such as passwords or API keys. It is recommended that credentials that have been unused for 45 days or more be deactivated or removed.",
+ "RationaleStatement": "Disabling or removing unnecessary OCI IAM local users will reduce the window of opportunity for credentials associated with a compromised or abandoned account to be used.",
+ "ImpactStatement": "",
+ "RemediationProcedure": "**From Console:**\n1. Login to OCI Console.\n2. Select `Identity & Security` from the Services menu.\n3. Select Domains from the Identity menu.\n4. For each domain listed, click on the name and select `Users`.\n5. Click on an individual user under the `Username` heading.\n6. Click `More action`\n7. Select `Deactivate`\n\n**From CLI:**\n1. Create a input.json:\n```\n{\n \"operations\": [\n { \"op\": \"replace\", \"path\": \"active\",\"value\": false}\n ],\n \"schemas\": [\"urn:ietf:params:scim:api:messages:2.0:PatchOp\"],\n \"userId\": \"\"\n }\n```\n2. Execute the below:\n```\noci identity-domains user patch --from-json file://file.json --endpoint \n```",
+ "AuditProcedure": "Perform the following to determine if unused credentials exist:\n\n**From Console:**\n\nFor Passwords:\n1. Login to OCI Console.\n2. Select `Identity & Security` from the Services menu.\n3. Select `Domains` from the `Identity` menu.\n4. For each domain listed, click on the name \n5. Click `Reports`\n6. Under Dormant users report click `View report`\n7. Enter a date 45 days from today’s date in Last Successful Login Date\n8. Check and ensure that `Last Successful Login Date` is greater than 45 days or empty\n\nFor API Keys:\n1. Login to OCI Console.\n2. Select `Observability & Management` from the Services menu.\n3. Select `Search` from `Logging` menu\n4. Click `Show Advanced Mode` in the right corner\n5. Select `Custom` from `Filter by time`\n6. Under `Select regions to search` add regions\n7. Under `Query` enter the following query in the text box:\n```\nsearch \"/_Audit_Include_Subcompartment\" | data.identity.credentials='//' | summarize count() by data.identity.principalId\n```\n8. Enter a day range \n- Note each query can only be 14 days multiple queries will be required to go 45 days\n9. Click `Search`\n10. Expand the results\n11. If results the count is not zero the user has used their API key during that period\n12. Repeat steps 8 – 11 for the 45-day period\n\n**From CLI:**\n\nFor Passwords:\n1. Execute the below:\n\n```\noci identity-domains users list --all --endpoint --attributes urn:ietf:params:scim:schemas:oracle:idcs:extension:userState:User:lastSuccessfulLoginDate --profile Oracle --query '.data.resources[]|.\"user-name\" + \" \" + .\"urn-ietf-params-scim-schemas-oracle-idcs-extension-user-state-user\".\"last-successful-login-date\"'\n```\n\n2. Review the output the that the date is under 45 days, or no date means they have not logged in\n\nFor API Keys: \n1. Create the search query text:\n\n```\nexport query=\"search \\\"/_Audit_Include_Subcompartment\\\" | data.identity.credentials='*' | summarize count() by data.identity.principalId\"\n```\n2. Select a day range. Date format is `2024-12-01`\n- Note each query can only be 14 days multiple queries will be required to go 45 days\n3. Execute the below:\n```\n\noci logging-search search-logs --search-query $query --time-start --time-end --query 'data.results[0].data.count' \nexport query=\"search \\\"/_Audit_Include_Subcompartment\\\" | data.identity.credentials='*' | summarize count() by data.identity.principalId\"\n```\n\n4. If results the count is not zero, the user has used their API key during that period\n5. Repeat steps 2 – 4 for the 45-day period",
+ "AdditionalInformation": "This audit should exclude the OCI Administrator, break-glass accounts, and service accounts as these accounts should only be used for day-to-day business and would likely be unused for up to 45 days.",
+ "References": ""
+ }
+ ]
+ },
+ {
+ "Id": "1.17",
+ "Description": "Ensure there is only one active API Key for any single OCI IAM user",
+ "Checks": [],
+ "Attributes": [
+ {
+ "Section": "1. Identity and Access Management",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Automated",
+ "Description": "API Keys are long-term credentials for an OCI IAM user. They can be used to make programmatic requests to the OCI APIs directly or via, OCI SDKs or the OCI CLI.",
+ "RationaleStatement": "Having a single API Key for an OCI IAM reduces attack surface area and makes it easier to manage.",
+ "ImpactStatement": "Deletion of an OCI API Key will remove programmatic access to OCI APIs",
+ "RemediationProcedure": "**From Console:**\n1. Login to OCI Console.\n2. Select `Identity & Security` from the Services menu.\n3. Select `Domains` from the Identity menu.\n4. For each domain listed, click on the name and select Users.\n5. Click on an individual user under the Name heading.\n6. Click on `API Keys` in the lower left-hand corner of the page.\n7. Delete one of the API Keys \n\n**From CLI:**\n1. Follow the audit procedure above.\n2. For API Key ID to be removed execute the following command:\n```\noci identity-domains api-key delete –api-key-id --endpoint \n```",
+ "AuditProcedure": "**From Console:**\n\n1. Login to OCI Console.\n2. Select `Identity & Security` from the Services menu.\n3. Select `Users` from the Identity menu.\n4. Click on an individual user under the Name heading.\n5. Click on `API Keys` in the lower left-hand corner of the page.\n6. Ensure the has only has a one API Key\n\n**From CLI:**\n1. Each user and in each Identity Domain\n```\noci raw-request --http-method GET --target-uri \"https:///admin/v1/ApiKeys?filter=user.ocid+eq+%%22\" | jq '.data.Resources[] | \"\\(.fingerprint) \\(.id)\"'\n```\n2. Ensure only one key is returned",
+ "AdditionalInformation": "",
+ "References": "https://docs.public.oneportal.content.oci.oraclecloud.com/en-us/iaas/Content/Security/Reference/iam_security_topic-IAM_Credentials.htm#IAM_Credentials"
+ }
+ ]
+ },
+ {
+ "Id": "2.1",
+ "Description": "Ensure no security lists allow ingress from 0.0.0.0/0 to port 22",
+ "Checks": [
+ "network_security_list_ingress_from_internet_to_ssh_port"
+ ],
+ "Attributes": [
+ {
+ "Section": "2. Networking",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Automated",
+ "Description": "Security lists provide stateful and stateless filtering of ingress and egress network traffic to OCI resources on a subnet level. It is recommended that no security list allows unrestricted ingress access to port 22.",
+ "RationaleStatement": "Removing unfettered connectivity to remote console services, such as Secure Shell (SSH), reduces a server's exposure to risk.",
+ "ImpactStatement": "For updating an existing environment, care should be taken to ensure that administrators currently relying on an existing ingress from 0.0.0.0/0 have access to ports 22 and/or 3389 through another network security group or security list.",
+ "RemediationProcedure": "**From Console:**\n\n1. Follow the audit procedure above.\n2. For each security list in the returned results, click the security list name\n3. Either edit the `ingress rule` to be more restrictive, delete the `ingress rule` or click on the `VCN` and terminate the `security list` as appropriate.\n\n**From CLI:**\n\n1. Follow the audit procedure.\n2. For each of the `security lists` identified, execute the following command:\n```\noci network security-list get --security-list-id \n```\n3. Then either:\n\n - Update the `security list` by copying the `ingress-security-rules` element from the JSON returned by the above command, edit it appropriately and use it in the following command:\n```\noci network security-list update --security-list-id --ingress-security-rules ''\n```\n or\n - Delete the security list with the following command:\n\n```\noci network security-list delete --security-list-id \n```",
+ "AuditProcedure": "**From Console:**\n\n1. Login to the OCI Console.\n2. Click the search bar at the top of the screen.\n3. Type `Advanced Resource Query` and hit `enter`.\n4. Click the `Advanced Resource Query` button in the upper right corner of the screen.\n5. Enter the following query in the query box:\n```\nquery SecurityList resources where \n(IngressSecurityRules.source = '0.0.0.0/0' && \nIngressSecurityRules.protocol = 6 && IngressSecurityRules.tcpOptions.destinationPortRange.max >= 22 && IngressSecurityRules.tcpOptions.destinationPortRange.min =<= 22) \n```\n6. Ensure the query returns no results.\n\n**From CLI:**\n\n1. Execute the following command:\n```\noci search resource structured-search --query-text \"query SecurityList resources where \n(IngressSecurityRules.source = '0.0.0.0/0' && \nIngressSecurityRules.protocol = 6 && IngressSecurityRules.tcpOptions.destinationPortRange.max >= 22 && IngressSecurityRules.tcpOptions.destinationPortRange.min <= 22) \n\"\n```\n2. Ensure the query returns no results.\n\n**Cloud Guard**\n\nEnsure Cloud Guard is enabled in the root compartment of the tenancy. For more information about enabling Cloud Guard, please look at the instructions included in Recommendation 3.15.\n\n**From Console:**\n1. Type `Cloud Guard` into the Search box at the top of the Console.\n2. Click `Cloud Guard` from the “Services” submenu.\n3. Click `Detector Recipes` in the Cloud Guard menu.\n4. Click `OCI Configuration Detector Recipe (Oracle Managed)` under the Recipe Name column.\n5. Find VCN Security list allows traffic to non-public port from all sources (0.0.0.0/0) in the Detector Rules column.\n6. Select the vertical ellipsis icon and chose Edit on the VCN Security list allows traffic to non-public port from all sources (0.0.0.0/0) row.\n7. In the Edit Detector Rule window find the Input Setting box and verify/add to the Restricted Protocol: Ports List setting to TCP:[22], UDP:[22].\n8. Click the `Save` button.\n\n**From CLI:**\n1. Update the VCN Security list allows traffic to non-public port from all sources (0.0.0.0/0) Detector Rule in Cloud Guard to generate Problems if a VCN security list allows public access via port 22 with the following command:\n\n```\noci cloud-guard detector-recipe-detector-rule update --detector-recipe-id --detector-rule-id SECURITY_LISTS_OPEN_SOURCE --details '{\"configurations\":[{ \"configKey\" : \"securityListsOpenSourceConfig\", \"name\" : \"Restricted Protocol:Ports List\", \"value\" : \"TCP:[22], UDP:[22]\", \"dataType\" : null, \"values\" : null }]}'\n```",
+ "AdditionalInformation": "",
+ "References": ""
+ }
+ ]
+ },
+ {
+ "Id": "2.2",
+ "Description": "Ensure no security lists allow ingress from 0.0.0.0/0 to port 3389",
+ "Checks": [
+ "network_security_list_ingress_from_internet_to_rdp_port"
+ ],
+ "Attributes": [
+ {
+ "Section": "2. Networking",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Automated",
+ "Description": "Security lists provide stateful and stateless filtering of ingress and egress network traffic to OCI resources on a subnet level. It is recommended that no security group allows unrestricted ingress access to port 3389.",
+ "RationaleStatement": "Removing unfettered connectivity to remote console services, such as Remote Desktop Protocol (RDP), reduces a server's exposure to risk.",
+ "ImpactStatement": "For updating an existing environment, care should be taken to ensure that administrators currently relying on an existing ingress from 0.0.0.0/0 have access to ports 22 and/or 3389 through another network security group or security list.",
+ "RemediationProcedure": "**From Console:**\n\n1. Follow the audit procedure above.\n2. For each security list in the returned results, click the security list name\n3. Either edit the `ingress rule` to be more restrictive, delete the `ingress rule` or click on the `VCN` and terminate the `security list` as appropriate.\n\n**From CLI:**\n\n1. Follow the audit procedure.\n2. For each of the `security lists` identified, execute the following command:\n```\noci network security-list get --security-list-id \n```\n3. Then either:\n - Update the `security list` by copying the `ingress-security-rules` element from the JSON returned by the above command, edit it appropriately, and use it in the following command\n```\noci network security-list update --security-list-id --ingress-security-rules ''\n```\n or\n - Delete the security list with the following command:\n\n```\noci network security-list delete --security-list-id \n```",
+ "AuditProcedure": "**From Console:**\n\n1. Login into the OCI Console\n2. Click in the search bar at the top of the screen.\n3. Type `Advanced Resource Query` and hit `enter`.\n4. Click the `Advanced Resource Query` button in the upper right corner of the screen.\n5. Enter the following query in the query box:\n```\nquery SecurityList resources where \n(IngressSecurityRules.source = '0.0.0.0/0' && \nIngressSecurityRules.protocol = 6 && IngressSecurityRules.tcpOptions.destinationPortRange.max >= 3389 && IngressSecurityRules.tcpOptions.destinationPortRange.min <= 3389) \n```\n6. Ensure query returns no results.\n\n**From CLI:**\n\n1. Execute the following command:\n```\noci search resource structured-search --query-text \"query SecurityList resources where \n(IngressSecurityRules.source = '0.0.0.0/0' && \nIngressSecurityRules.protocol = 6 && IngressSecurityRules.tcpOptions.destinationPortRange.max >= 3389 && IngressSecurityRules.tcpOptions.destinationPortRange.min <= 3389) \n\"\n```\n2. Ensure query returns no results.\n\n**Cloud Guard**\n\nTo Enable Cloud Guard Auditing:\nEnsure Cloud Guard is enabled in the root compartment of the tenancy. For more information about enabling Cloud Guard, please look at the instructions included in Recommendation 3.15. \n\n**From Console:**\n1. Type `Cloud Guard` into the Search box at the top of the Console .\n2. Click `Cloud Guard` from the “Services” submenu.\n3. Click `Detector Recipes` in the Cloud Guard menu.\n4. Click `OCI Configuration Detector Recipe (Oracle Managed)` under the Recipe Name column.\n5. Find VCN Security list allows traffic to non-public port from all sources (0.0.0.0/0) in the Detector Rules column.\n6. Select the vertical ellipsis icon and choose Edit on the VCN Security list allows traffic to non-public port from all sources (0.0.0.0/0) row.\n7. In the Edit Detector Rule window find the Input Setting box and verify/add to the Restricted Protocol: Ports List setting to TCP:[3389], UDP:[3389].\n8. Click the `Save` button.\n\n**From CLI:**\n1. Update the VCN Security list allows traffic to non-public port from all sources (0.0.0.0/0) Detector Rule in Cloud Guard to generate Problems if a VCN security list allows public access via port 3389 with the following command:\n```\noci cloud-guard detector-recipe-detector-rule update --detector-recipe-id --detector-rule-id SECURITY_LISTS_OPEN_SOURCE --details '{\"configurations\":[{ \"configKey\" : \"securityListsOpenSourceConfig\", \"name\" : \"Restricted Protocol:Ports List\", \"value\" : \"TCP:[3389], UDP:[3389]\", \"dataType\" : null, \"values\" : null }]}'\n```",
+ "AdditionalInformation": "This recommendation can also be audited programmatically using REST API \n\nhttps://docs.oracle.com/en-us/iaas/api/#/en/iaas/20160918/SecurityList/ListSecurityLists",
+ "References": ""
+ }
+ ]
+ },
+ {
+ "Id": "2.3",
+ "Description": "Ensure no network security groups allow ingress from 0.0.0.0/0 to port 22",
+ "Checks": [
+ "network_security_group_ingress_from_internet_to_ssh_port"
+ ],
+ "Attributes": [
+ {
+ "Section": "2. Networking",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Automated",
+ "Description": "Network security groups provide stateful filtering of ingress/egress network traffic to OCI resources. It is recommended that no security group allows unrestricted ingress to port 22.",
+ "RationaleStatement": "Removing unfettered connectivity to remote console services, such as Secure Shell (SSH), reduces a server's exposure to risk.",
+ "ImpactStatement": "For updating an existing environment, care should be taken to ensure that administrators currently relying on an existing ingress from 0.0.0.0/0 have access to ports 22 and/or 3389 through another network security group or security list.",
+ "RemediationProcedure": "**From Console:**\n 1. Login into the OCI Console.\n 2. Click the search bar at the top of the screen.\n 3. Type Advanced Resource Query and hit enter.\n 4. Click the Advanced Resource Query button in the upper right corner of the screen.\n 5. Enter the following query in the query box:\n\n query networksecuritygroup resources where lifeCycleState = 'AVAILABLE'\n\n 6. For each of the network security groups in the returned results, click the name and inspect each of the security rules.\n 7. Remove all security rules with direction: Ingress, Source: 0.0.0.0/0, and Destination Port Range: 22.\n\n**From CLI:**\n\nIssue the following command and identify the security rule to remove.\n\n```\n for region in `oci iam region list | jq -r '.data[] | .name'`;\n do\n for compid in `oci iam compartment list 2>/dev/null | jq -r '.data[] | .id'`;\n do \n for nsgid in `oci network nsg list --compartment-id $compid --region $region --all 2>/dev/null | jq -r '.data[] | .id'`\n do\n output=`oci network nsg rules list --nsg-id=$nsgid --all 2>/dev/null | jq -r '.data[] | select(.source == \"0.0.0.0/0\" and .direction == \"INGRESS\" and ((.\"tcp-options\".\"destination-port-range\".max >= 22 and .\"tcp-options\".\"destination-port-range\".min <= 22) or .\"tcp-options\".\"destination-port-range\" == null))'`\n if [ ! -z \"$output\" ]; then echo \"NSGID=\", $nsgid, \"Security Rules=\", $output; fi\n done\n done\n done\n```\n\n- Remove the security rules\n\n```\noci network nsg rules remove --nsg-id=\n```\nor\n\n- Update the security rules\n```\noci network nsg rules update --nsg-id= --security-rules='[]'\n\neg:\n\n oci network nsg rules update --nsg-id=ocid1.networksecuritygroup.oc1.iad.xxxxxxxxxxxxxxxxxxxxxx --security-rules='[{ \"description\": null, \"destination\": null, \"destination-type\": null, \"direction\": \"INGRESS\", \"icmp-options\": null, \"id\": \"709001\", \"is-stateless\": null, \"protocol\": \"6\", \"source\": \"140.238.154.0/24\", \"source-type\": \"CIDR_BLOCK\", \"tcp-options\": { \"destination-port-range\": { \"max\": 22, \"min\": 22 }, \"source-port-range\": null }, \"udp-options\": null }]'\n```",
+ "AuditProcedure": "**From Console:**\n 1. Login into the OCI Console.\n 2. Click the search bar at the top of the screen.\n 3. Type Advanced Resource Query and hit enter.\n 4. Click the Advanced Resource Query button in the upper right corner of the screen.\n 5. Enter the following query in the query box:\n```\nquery networksecuritygroup resources where lifeCycleState = 'AVAILABLE'\n```\n 6. For each of the network security groups in the returned results, click the name and inspect each of the security rules.\n 7. Ensure that there are no security rules with direction: Ingress, Source: 0.0.0.0/0, and Destination Port Range: 22.\n\n**From CLI:**\n\nIssue the following command, it should return no values.\n\n```\nfor region in $(oci iam region-subscription list | jq -r '.data[] | .\"region-name\"')\n do\n echo \"Enumerating region $region\"\n for compid in $(oci iam compartment list --include-root --compartment-id-in-subtree TRUE 2>/dev/null | jq -r '.data[] | .id')\n do\n echo \"Enumerating compartment $compid\"\n for nsgid in $(oci network nsg list --compartment-id $compid --region $region --all 2>/dev/null | jq -r '.data[] | .id')\n do\n output=$(oci network nsg rules list --nsg-id=$nsgid --all 2>/dev/null | jq -r '.data[] | select(.source == \"0.0.0.0/0\" and .direction == \"INGRESS\" and ((.\"tcp-options\".\"destination-port-range\".max >= 22 and .\"tcp-options\".\"destination-port-range\".min <= 22) or .\"tcp-options\".\"destination-port-range\" == null))')\n if [ ! -z \"$output\" ]; then echo \"NSGID: \", $nsgid, \"Security Rules: \", $output; fi\n done\n done\n done\n```\n\n**Cloud Guard:**\n\nTo Enable Cloud Guard Auditing:\nEnsure Cloud Guard is enabled in the root compartment of the tenancy. For more information about enabling Cloud Guard, please look at the instructions included in Recommendation 3.15. \n\n**From Console:**\n1. Type `Cloud Guard` into the Search box at the top of the Console .\n2. Click `Cloud Guard` from the “Services” submenu.\n3. Click `Detector Recipes` in the Cloud Guard menu.\n4. Click `OCI Configuration Detector Recipe (Oracle Managed)` under the Recipe Name column.\n5. Find NSG ingress rule contains disallowed IP/port in the Detector Rules column.\n6. Select the vertical ellipsis icon and chose Edit on the NSG ingress rule contains disallowed IP/port row.\n7. In the Edit Detector Rule window find the Input Setting box and verify/add to the Restricted Protocol: Ports List setting to TCP:[22], UDP:[22].\n8. Click the `Save` button.\n\n**From CLI:**\n1. Update the NSG ingress rule contains disallowed IP/port Detector Rule in Cloud Guard to generate Problems if a network security group allows ingress network traffic to port 22 with the following command:\n\n```\noci cloud-guard detector-recipe-detector-rule update --detector-recipe-id --detector-rule-id VCN_NSG_INGRESS_RULE_PORTS_CHECK --details '{\"configurations\":[ {\"configKey\" : \"nsgIngressRuleDisallowedPortsConfig\", \"name\" : \"Default disallowed ports\", \"value\" : \"TCP:[22], UDP:[22]\", \"dataType\" : null, \"values\" : null }]}'\n```",
+ "AdditionalInformation": "",
+ "References": ""
+ }
+ ]
+ },
+ {
+ "Id": "2.4",
+ "Description": "Ensure no network security groups allow ingress from 0.0.0.0/0 to port 3389",
+ "Checks": [
+ "network_security_group_ingress_from_internet_to_rdp_port"
+ ],
+ "Attributes": [
+ {
+ "Section": "2. Networking",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Automated",
+ "Description": "Network security groups provide stateful filtering of ingress/egress network traffic to OCI resources. It is recommended that no security group allows unrestricted ingress access to port 3389.",
+ "RationaleStatement": "Removing unfettered connectivity to remote console services, such as Remote Desktop Protocol (RDP), reduces a server's exposure to risk.",
+ "ImpactStatement": "For updating an existing environment, care should be taken to ensure that administrators currently relying on an existing ingress from 0.0.0.0/0 have access to ports 22 and/or 3389 through another network security group or security list.",
+ "RemediationProcedure": "**From CLI:**\n\nUsing the details returned from the audit procedure either:\n\n- Remove the security rules\n```\noci network nsg rules remove --nsg-id=\n```\nor\n\n- Update the security rules\n```\noci network nsg rules update --nsg-id= --security-rules=\n\neg:\n\n oci network nsg rules update --nsg-id=ocid1.networksecuritygroup.oc1.iad.xxxxxxxxxxxxxxxxxxxxxx --security-rules='[{ \"description\": null, \"destination\": null, \"destination-type\": null, \"direction\": \"INGRESS\", \"icmp-options\": null, \"id\": \"709001\", \"is-stateless\": null, \"protocol\": \"6\", \"source\": \"140.238.154.0/24\", \"source-type\": \"CIDR_BLOCK\", \"tcp-options\": { \"destination-port-range\": { \"max\": 3389, \"min\": 3389 }, \"source-port-range\": null }, \"udp-options\": null }]'\n```",
+ "AuditProcedure": "**From CLI:**\n\nIssue the following command, it should not return anything.\n\n```\n for region in $(oci iam region-subscription list | jq -r '.data[] | .\"region-name\"')\n do\n echo \"Enumerating region $region\"\n for compid in $(oci iam compartment list --include-root --compartment-id-in-subtree TRUE 2>/dev/null | jq -r '.data[] | .id')\n do\n echo \"Enumerating compartment $compid\"\n for nsgid in $(oci network nsg list --compartment-id $compid --region $region --all 2>/dev/null | jq -r '.data[] | .id')\n do\n output=$(oci network nsg rules list --nsg-id=$nsgid --all 2>/dev/null | jq -r '.data[] | select(.source == \"0.0.0.0/0\" and .direction == \"INGRESS\" and ((.\"tcp-options\".\"destination-port-range\".max >= 3389 and .\"tcp-options\".\"destination-port-range\".min <= 3389) or .\"tcp-options\".\"destination-port-range\" == null))')\n if [ ! -z \"$output\" ]; then echo \"NSGID: \", $nsgid, \"Security Rules: \", $output; fi\n done\n done\n done\n```\n\n**From Cloud Guard:**\n\nTo Enable Cloud Guard Auditing:\nEnsure Cloud Guard is enabled in the root compartment of the tenancy. For more information about enabling Cloud Guard, please look at the instructions included in Recommendation 3.15. \n\n**From Console:**\n1. Type `Cloud Guard` into the Search box at the top of the Console.\n2. Click `Cloud Guard` from the “Services” submenu.\n3. Click `Detector Recipes` in the Cloud Guard menu.\n4. Click `OCI Configuration Detector Recipe (Oracle Managed)` under the Recipe Name column.\n5. Find NSG ingress rule contains disallowed IP/port in the Detector Rules column.\n6. Select the vertical ellipsis icon and chose Edit on the NSG ingress rule contains disallowed IP/port row.\n7. In the Edit Detector Rule window find the Input Setting box and verify/add to the Restricted Protocol: Ports List setting to TCP:[3389], UDP:[3389].\n8. Click the Save button.\n\n**From CLI:**\n1. Update the NSG ingress rule contains disallowed IP/port Detector Rule in Cloud Guard to generate Problems if a network security group allows ingress network traffic to port 3389 with the following command:\n\n```\noci cloud-guard detector-recipe-detector-rule update --detector-recipe-id --detector-rule-id VCN_NSG_INGRESS_RULE_PORTS_CHECK --details '{\"configurations\":[ {\"configKey\" : \"nsgIngressRuleDisallowedPortsConfig\", \"name\" : \"Default disallowed ports\", \"value\" : \"TCP:[3389], UDP:[3389]\", \"dataType\" : null, \"values\" : null }]}'\n```",
+ "AdditionalInformation": "",
+ "References": ""
+ }
+ ]
+ },
+ {
+ "Id": "2.5",
+ "Description": "Ensure the default security list of every VCN restricts all traffic except ICMP",
+ "Checks": [
+ "network_default_security_list_restricts_traffic"
+ ],
+ "Attributes": [
+ {
+ "Section": "2. Networking",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Automated",
+ "Description": "A default security list is created when a Virtual Cloud Network (VCN) is created and attached to the public subnets in the VCN. Security lists provide stateful or stateless filtering of ingress and egress network traffic to OCI resources in the VCN. It is recommended that the default security list does not allow unrestricted ingress and egress access to resources in the VCN.",
+ "RationaleStatement": "Removing unfettered connectivity to OCI resource, reduces a server's exposure to unauthorized access or data exfiltration.",
+ "ImpactStatement": "For updating an existing environment, care should be taken to ensure that administrators currently relying on an existing ingress from 0.0.0.0/0 have access to port 22 through another network security group and servers have egress to specified ports and protocols through another network security group.",
+ "RemediationProcedure": "**From Console:**\n\n1. Login into the OCI Console\n2. Click on `Networking -> Virtual Cloud Networks` from the services menu\n3. For each VCN listed `Click on Security Lists`\n4. Click on `Default Security List for `\n5. Identify the Ingress Rule with 'Source 0.0.0.0/0'\n6. Either Edit the Security rule to restrict the source and/or port range or delete the rule.\n7. Identify the Egress Rule with 'Destination 0.0.0.0/0, All Protocols'\n8. Either Edit the Security rule to restrict the source and/or port range or delete the rule.",
+ "AuditProcedure": "**From Console:**\n\n1. Login into the OCI Console\n2. Click on `Networking -> Virtual Cloud Networks` from the services menu\n3. For each VCN listed `Click on Security Lists`\n4. Click on `Default Security List for `\n5. Verify that there is no Ingress rule with 'Source 0.0.0.0/0'\n6. Verify that there is no Egress rule with 'Destination 0.0.0.0/0, All Protocols'",
+ "AdditionalInformation": "",
+ "References": "https://docs.oracle.com/en-us/iaas/Content/Security/Reference/networking_security.htm#Securing_Networking_VCN_Load_Balancers_and_DNS"
+ }
+ ]
+ },
+ {
+ "Id": "2.6",
+ "Description": "Ensure Oracle Integration Cloud (OIC) access is restricted to allowed sources",
+ "Checks": [
+ "integration_instance_access_restricted"
+ ],
+ "Attributes": [
+ {
+ "Section": "2. Networking",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Manual",
+ "Description": "Oracle Integration (OIC) is a complete, secure, but lightweight integration solution that enables you to connect your applications in the cloud. It simplifies connectivity between your applications and connects both your applications that live in the cloud and your applications that still live on premises. Oracle Integration provides secure, enterprise-grade connectivity regardless of the applications you are connecting or where they reside. OIC instances are created within an Oracle managed secure private network with each having a public endpoint. The capability to configure ingress filtering of network traffic to protect your OIC instances from unauthorized network access is included. It is recommended that network access to your OIC instances be restricted to your approved corporate IP Addresses or Virtual Cloud Networks (VCN)s.",
+ "RationaleStatement": "Restricting connectivity to OIC Instances reduces an OIC instance’s exposure to risk.",
+ "ImpactStatement": "When updating ingress filters for an existing environment, care should be taken to ensure that IP addresses and VCNs currently used by administrators, users, and services to access your OIC instances are included in the updated filters.",
+ "RemediationProcedure": "**From Console:**\n1. Follow the audit procedure above.\n2. For each OIC instance in the returned results, click the OIC Instance name\n3. Click `Network Access`\n4. Either edit the `Network Access` to be more restrictive \n\n**From CLI**\n1. Follow the audit procedure.\n2. Get the json input format using the below command:\n```\noci integration integration-instance change-network-endpoint --generate-param-json-input\n```\n3.For each of the OIC Instances identified get its details.\n4.Update the `Network Access`, copy the `network-endpoint-details` element from the JSON returned by the above get call, edit it appropriately and use it in the following command\n```\nOci integration integration-instance change-network-endpoint --id --from-json ''\n```",
+ "AuditProcedure": "**From Console:**\n1. Login into the OCI Console\n2. Click in the search bar, top of the screen.\n3. Type Advanced Resource Query and hit enter.\n4. Click the Advanced Resource Query button in the upper right of the screen.\n5. Enter the following query in the query box:\n```\nquery integrationinstance resources\n```\n6. For each OIC Instance returned click on the link under `Display name`\n7. Click on `Network Access`\n8 .Ensure `Restrict Network Access` is selected and the IP Address/CIDR Block as well as Virtual Cloud Networks are correct\n9. Repeat for other subscribed regions\n\n**From CLI:**\n1. Execute the following command:\n```\nfor region in `oci iam region list | jq -r '.data[] | .name'`;\n do\n for compid in `oci iam compartment list --compartment-id-in-subtree TRUE 2>/dev/null | jq -r '.data[] | .id'`\n do\n output=`oci integration integration-instance list --compartment-id $compid --region $region --all 2>/dev/null | jq -r '.data[] | select(.\"network-endpoint-details\".\"network-endpoint-type\" == null)'`\n if [ ! -z \"$output\" ]; then echo $output; fi\n done\n done\n\n```\n2. Ensure `allowlisted-http-ips` and `allowed-http-vcns` are correct",
+ "AdditionalInformation": "",
+ "References": "https://docs.oracle.com/en/cloud/paas/integration-cloud/integrations-user/get-started-integration-cloud-service.html"
+ }
+ ]
+ },
+ {
+ "Id": "2.7",
+ "Description": "Ensure Oracle Analytics Cloud (OAC) access is restricted to allowed sources or deployed within a Virtual Cloud Network",
+ "Checks": [
+ "analytics_instance_access_restricted"
+ ],
+ "Attributes": [
+ {
+ "Section": "2. Networking",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Manual",
+ "Description": "Oracle Analytics Cloud (OAC) is a scalable and secure public cloud service that provides a full set of capabilities to explore and perform collaborative analytics for you, your workgroup, and your enterprise. OAC instances provide ingress filtering of network traffic or can be deployed with in an existing Virtual Cloud Network VCN. It is recommended that all new OAC instances be deployed within a VCN and that the Access Control Rules are restricted to your corporate IP Addresses or VCNs for existing OAC instances.",
+ "RationaleStatement": "Restricting connectivity to Oracle Analytics Cloud instances reduces an OAC instance’s exposure to risk.",
+ "ImpactStatement": "When updating ingress filters for an existing environment, care should be taken to ensure that IP addresses and VCNs currently used by administrators, users, and services to access your OAC instances are included in the updated filters. Also, these changes will temporarily bring the OAC instance offline.",
+ "RemediationProcedure": "**From Console:**\n1. Follow the audit procedure above.\n2. For each OAC instance in the returned results, click the OAC Instance name\n3. Click `Edit` next to `Access Control Rules`\n4. Click `+Another Rule` and add rules as required\n\n**From CLI:**\n1. Follow the audit procedure.\n2. Get the json input format by executing the below command:\n```\noci analytics analytics-instance change-network-endpoint --generate-full-command-json-input\n```\n3. For each of the OAC Instances identified get its details.\n4. Update the `Access Control Rules`, copy the `network-endpoint-details` element from the JSON returned by the above get call, edit it appropriately and use it in the following command:\n```\noci integration analytics-instance change-network-endpoint --from-json ''\n```",
+ "AuditProcedure": "**From Console:**\n1 Login into the OCI Console\n2. Click in the search bar, top of the screen.\n3. Type Advanced Resource Query and hit enter.\n4. Click the Advanced Resource Query button in the upper right of the screen.\n5. Enter the following query in the query box:\n```\nquery analyticsinstance resources\n```\n6. For each OAC Instance returned click on the link under `Display name`.\n7. Ensure `Access Control Rules` IP Address/CIDR Block as well as Virtual Cloud Networks are correct.\n8. Repeat for other subscribed regions.\n\n**From CLI:**\n1. Execute the following command:\n```\nfor region in `oci iam region list | jq -r '.data[] | .name'`;\n do\n for compid in `oci iam compartment list --compartment-id-in-subtree TRUE 2>/dev/null | jq -r '.data[] | .id'`\n do\n output=`oci analytics analytics-instance list --compartment-id $compid --region $region --all 2>/dev/null | jq -r '.data[] | select(.\"network-endpoint-details\".\"network-endpoint-type\" == \"PUBLIC\")'`\n if [ ! -z \"$output\" ]; then echo $output; fi\n done\n done\n```\n2. Ensure `network-endpoint-type` are correct.",
+ "AdditionalInformation": "https://docs.oracle.com/en/cloud/paas/analytics-cloud/acoci/manage-service-access-and-security.html#GUID-3DB25824-4417-4981-9EEC-29C0C6FD3883",
+ "References": ""
+ }
+ ]
+ },
+ {
+ "Id": "2.8",
+ "Description": "Ensure Oracle Autonomous Shared Databases (ADB) access is restricted to allowed sources or deployed within a Virtual Cloud Network",
+ "Checks": [
+ "database_autonomous_database_access_restricted"
+ ],
+ "Attributes": [
+ {
+ "Section": "2. Networking",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Manual",
+ "Description": "Oracle Autonomous Database Shared (ADB-S) automates database tuning, security, backups, updates, and other routine management tasks traditionally performed by DBAs. ADB-S provide ingress filtering of network traffic or can be deployed within an existing Virtual Cloud Network (VCN). It is recommended that all new ADB-S databases be deployed within a VCN and that the Access Control Rules are restricted to your corporate IP Addresses or VCNs for existing ADB-S databases.",
+ "RationaleStatement": "Restricting connectivity to ADB-S Databases reduces an ADB-S database’s exposure to risk.",
+ "ImpactStatement": "When updating ingress filters for an existing environment, care should be taken to ensure that IP addresses and VCNs currently used by administrators, users, and services to access your ADB-S instances are included in the updated filters.",
+ "RemediationProcedure": "**From Console:**\n1. Follow the audit procedure above.\n2. For each ADB-S database in the returned results, click the ADB-S database name\n3. Click `Edit` next to `Access Control Rules`\n4. Click `+Another Rule` and add rules as required\n5. Click `Save Changes`\n\n**From CLI:**\n1. Follow the audit procedure.\n2. Get the json input format by executing the following command:\n```\noci db autonomous-database update --generate-full-command-json-input\n```\n3. For each of the ADB-S Database identified get its details.\n4. Update the `whitelistIps`, copy the `WhiteListIPs` element from the JSON returned by the above get call, edit it appropriately and use it in the following command:\n```\noci db autonomous-database update –-autonomous-database-id --from-json ''\n```",
+ "AuditProcedure": "**From Console:**\n1. Login into the OCI Console\n2. Click in the search bar, top of the screen.\n3. Type Advanced Resource Query and hit enter.\n4. Click the `Advanced Resource Query` button in the upper right of the screen.\n5. Enter the following query in the query box:\n```\nquery autonomousdatabase resources\n```\n6. For each ABD-S database returned click on the link under `Display name`\n7. Click `Edit` next to `Access Control List`\n8. Ensure `Access Control Rules’ IP Address/CIDR Block as well as VCNs are correct\n9. Repeat for other subscribed regions\n\n**From CLI:**\n1. Execute the following command:\n```\nfor region in `oci iam region list | jq -r '.data[] | .name'`;\n do\n for compid in `oci iam compartment list --compartment-id-in-subtree TRUE 2>/dev/null | jq -r '.data[] | .id'`\n do\n for adbid in `oci db autonomous-database list --compartment-id $compid --region $region --all 2>/dev/null | jq -r '.data[] | select(.\"nsg-ids\" == null).id'`\n do\n output=`oci db autonomous-database get --autonomous-database-id $adbid --region $region --query=data.{\"WhiteListIPs:\\\"whitelisted-ips\\\",\"id:id\"\"} --output table 2>/dev/null`\n if [ ! -z \"$output\" ]; then echo $output; fi\n done\n done\n done\n```\n2. Ensure `WhiteListIPs` are correct.",
+ "AdditionalInformation": "",
+ "References": "https://docs.oracle.com/en/cloud/paas/autonomous-database/adbsa/network-access-options.html#GUID-29D62917-0F18-4F3E-8081-B3BD5C0C79F5"
+ }
+ ]
+ },
+ {
+ "Id": "3.1",
+ "Description": "Ensure Compute Instance Legacy Metadata service endpoint is disabled",
+ "Checks": [
+ "compute_instance_legacy_metadata_endpoint_disabled"
+ ],
+ "Attributes": [
+ {
+ "Section": "3. Compute",
+ "Profile": "Level 2",
+ "AssessmentStatus": "Automated",
+ "Description": "Compute Instances that utilize Legacy MetaData service endpoints (IMDSv1) are susceptible to potential SSRF attacks. To bolster security measures, it is strongly advised to reconfigure Compute Instances to adopt Instance Metadata Service v2, aligning with the industry's best security practices.",
+ "RationaleStatement": "Enabling Instance Metadata Service v2 enhances security and grants precise control over metadata access. Transitioning from IMDSv1 reduces the risk of SSRF attacks, bolstering system protection.\n\nIMDv1 poses security risks due to its inferior security measures and limited auditing capabilities. Transitioning to IMDv2 ensures a more secure environment with robust security features and improved monitoring capabilities.",
+ "ImpactStatement": "If you disable IMDSv1 on an instance that does not support IMDSv2, you might not be able to connect to the instance when you launch it.\n\nIMDSv2 is supported on the following platform images:\n- Oracle Autonomous Linux 8.x images\n- Oracle Autonomous Linux 7.x images released in June 2020 or later\n- Oracle Linux 8.x, Oracle Linux 7.x, and Oracle Linux 6.x images released in July 2020 or later\n\nOther platform images, most custom images, and most Marketplace images do not support IMDSv2. Custom Linux images might support IMDSv2 if cloud-init is updated to version 20.3 or later and Oracle Cloud Agent is updated to version 0.0.19 or later. Custom Windows images might support IMDSv2 if Oracle Cloud Agent is updated to version 1.0.0.0 or later; cloudbase-init does not support IMDSv2.",
+ "RemediationProcedure": "**From Console:**\n\n1. Login to the OCI Console\n2. Click on the search box at the top of the console and search for compute instance name.\n3. Click on the instance name, In the `Instance Details` section, next to Instance Metadata Service, click `Edit`.\n4. For the `Instance metadata service`, select the `Version 2 only` option.\n5. Click `Save Changes`.\n\nNote : Disabling IMDSv1 on an incompatible instance may result in connectivity issues upon launch.\nTo re-enable IMDSv1, follow these steps: \n\n1. On the Instance Details page in the Console, click `Edit` next to Instance Metadata Service.\n2. Choose the `Version 1 and version 2` option, and save your changes.\n\n**From CLI:**\n\nRun Below Command,\n\n```\noci compute instance update --instance-id [instance-ocid] --instance-options '{\"areLegacyImdsEndpointsDisabled\" :\"true\"}'\n```\n\nThis will set Instance Metadata Service to use Version 2 Only.",
+ "AuditProcedure": "**From Console:**\n\n1. Login to the OCI Console\n2. Select compute instance in your compartment.\n3. Click on each instance name.\n4. In the `Instance Details` section, next to `Instance metadata service` make sure `Version 2 only` is selected.\n\n**From CLI:**\n1. Run command:\n```\nfor region in `oci iam region-subscription list | jq -r '.data[] | .\"region-name\"'`;\n do\n for compid in `oci iam compartment list --compartment-id-in-subtree TRUE 2>/dev/null | jq -r '.data[] | .id'`\n do\n output=`oci compute instance list --compartment-id $compid --region $region --all 2>/dev/null | jq -r '.data[] | select(.\"instance-options\".\"are-legacy-imds-endpoints-disabled\" == false )'`\n if [ ! -z \"$output\" ]; then echo $output; fi\n done\n done\n```\n2. No results should be returned",
+ "AdditionalInformation": "",
+ "References": "https://docs.oracle.com/en-us/iaas/Content/Compute/Tasks/gettingmetadata.htm"
+ }
+ ]
+ },
+ {
+ "Id": "3.2",
+ "Description": "Ensure Secure Boot is enabled on Compute Instance",
+ "Checks": [
+ "compute_instance_secure_boot_enabled"
+ ],
+ "Attributes": [
+ {
+ "Section": "3. Compute",
+ "Profile": "Level 2",
+ "AssessmentStatus": "Automated",
+ "Description": "Shielded Instances with Secure Boot enabled prevents unauthorized boot loaders and operating systems from booting. This prevent rootkits, bootkits, and unauthorized software from running before the operating system loads.\nSecure Boot verifies the digital signature of the system's boot software to check its authenticity. The digital signature ensures the operating system has not been tampered with and is from a trusted source.\nWhen the system boots and attempts to execute the software, it will first check the digital signature to ensure validity. If the digital signature is not valid, the system will not allow the software to run.\nSecure Boot is a feature of UEFI(Unified Extensible Firmware Interface) that only allows approved operating systems to boot up.",
+ "RationaleStatement": "A Threat Actor with access to the operating system may seek to alter boot components to persist malware or rootkits during system initialization. Secure Boot helps ensure that the system only runs authentic software by verifying the digital signature of all boot components.",
+ "ImpactStatement": "An existing instance cannot be changed to a Shielded instance with Secure boot enabled. Shielded Secure Boot not available on all instance shapes and Operating systems. Additionally the following limitations exist:\n\nThus to enable you have to terminate the instance and create a new one. Also, Shielded instances do not support live migration. During an infrastructure maintenance event, Oracle Cloud Infrastructure live migrates supported VM instances from the physical VM host that needs maintenance to a healthy VM host with minimal disruption to running instances. If you enable Secure Boot on an instance, the instance cannot be migrated, because the hardware TPM is not migratable. This may result in an outage because the TPM can't be migrate from a unhealthy host to healthy host.",
+ "RemediationProcedure": "Note: Secure Boot facility is available on selected VM images and Shapes in OCI. User have to configure Secured Boot at time of instance creation only.\n\n**From Console:**\n\n1. Navigate to https://cloud.oracle.com/compute/instances\n1. Select the instance from the Audit Procedure\n1. Click `Terminate`.\n1. Determine whether or not to permanently delete instance's attached boot volume.\n1. Click `Terminate instance`.\n1. Click on `Create Instance`.\n1. Select Image and Shape which supports Shielded Instance configuration. Icon for Shield in front of Image/Shape row indicates support of Shielded Instance.\n1. Click on `edit` of Security Blade.\n1. Turn On Shielded Instance, then Turn on the Secure Boot Toggle.\n1. Fill in the rest of the details as per requirements.\n1. Click `Create`.",
+ "AuditProcedure": "**From Console:**\n\n1. Login to the OCI Console\n2. Select compute instance in your compartment.\n3. Click on each instance name.\n4. In the `Launch Options` section,\n5. Check if `Secure Boot` is `Enabled`.\n\n**From CLI:**\n\nRun command:\n```\nfor region in `oci iam region-subscription list | jq -r '.data[] | .\"region-name\"'`;\n do\n for compid in `oci iam compartment list --compartment-id-in-subtree TRUE 2>/dev/null | jq -r '.data[] | .id'`\n do\n output=`oci compute instance list --compartment-id $compid --region $region --all 2>/dev/null | jq -r '.data[] | select(.\"platform-config\" == null or \"platform-config\".\"is-secure-boot-enabled\" == false )'`\n if [ ! -z \"$output\" ]; then echo $output; fi\n done\n done\n\n```\nIn response, check if `platform-config` are not null and `is-secure-boot-enabled` is set to `true`",
+ "AdditionalInformation": "",
+ "References": "https://docs.oracle.com/en-us/iaas/Content/Compute/References/shielded-instances.htm:https://uefi.org/sites/default/files/resources/UEFI_Secure_Boot_in_Modern_Computer_Security_Solutions_2013.pdf"
+ }
+ ]
+ },
+ {
+ "Id": "3.3",
+ "Description": "Ensure In-transit Encryption is enabled on Compute Instance",
+ "Checks": [
+ "compute_instance_in_transit_encryption_enabled"
+ ],
+ "Attributes": [
+ {
+ "Section": "3. Compute",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Automated",
+ "Description": "The Block Volume service provides the option to enable in-transit encryption for paravirtualized volume attachments on virtual machine (VM) instances.",
+ "RationaleStatement": "All the data moving between the instance and the block volume is transferred over an internal and highly secure network. If you have specific compliance requirements related to the encryption of the data while it is moving between the instance and the block volume, you should enable the in-transit encryption option.",
+ "ImpactStatement": "In-transit encryption for boot and block volumes is only available for virtual machine (VM) instances launched from platform images, along with bare metal instances that use the following shapes: BM.Standard.E3.128, BM.Standard.E4.128, BM.DenseIO.E4.128. It is not supported on other bare metal instances.",
+ "RemediationProcedure": "**From Console:**\n1. Navigate to https://cloud.oracle.com/compute/instances\n1. Select the instance from the Audit Procedure\n1. Click `Terminate`.\n1. Determine whether or not to permanently delete instance's attached boot volume.\n1. Click `Terminate instance`.\n1. Click on `Create Instance`.\n1. Fill in the details as per requirements.\n1. In the `Boot volume` section ensure `Use in-transit encryption` is checked.\n1. Fill in the rest of the details as per requirements.\n1. Click `Create`.",
+ "AuditProcedure": "**From Console:**\n1. Go to [https://cloud.oracle.com/compute/instances](https://cloud.oracle.com/compute/instances)\n2. Select compute instance in your compartment.\n3. Click on each instance name.\n4. Click on `Boot volume` on the bottom left.\n5. Under the `In-transit encryption` column make sure it is `Enabled`\n\n**From CLI:**\n1. Execute the following:\n```\nfor region in `oci iam region-subscription list | jq -r '.data[] | .\"region-name\"'`;\n do\n for compid in `oci iam compartment list --compartment-id-in-subtree TRUE 2>/dev/null | jq -r '.data[] | .id'`\n do\n output=`oci compute instance list --compartment-id $compid --region $region --all 2>/dev/null | jq -r '.data[] | select(.\"launch-options\".\"is-pv-encryption-in-transit-enabled\" == false )'`\n if [ ! -z \"$output\" ]; then echo $output; fi\n done\n done\n```\n2. Ensure no results are returned",
+ "AdditionalInformation": "",
+ "References": "https://docs.oracle.com/en-us/iaas/Content/Block/Concepts/overview.htm#BlockVolumeEncryption__intransit"
+ }
+ ]
+ },
+ {
+ "Id": "4.1",
+ "Description": "Ensure default tags are used on resources",
+ "Checks": [],
+ "Attributes": [
+ {
+ "Section": "4. Logging and Monitoring",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Automated",
+ "Description": "Using default tags is a way to ensure all resources that support tags are tagged during creation. Tags can be based on static or computed values. It is recommended to set up default tags early after root compartment creation to ensure all created resources will get tagged.\nTags are scoped to Compartments and are inherited by Child Compartments. The recommendation is to create default tags like “CreatedBy” at the Root Compartment level to ensure all resources get tagged.\nWhen using Tags it is important to ensure that Tag Namespaces are protected by IAM Policies otherwise this will allow users to change tags or tag values.\nDepending on the age of the OCI Tenancy there may already be Tag defaults setup at the Root Level and no need for further action to implement this action.",
+ "RationaleStatement": "In the case of an incident having default tags like “CreatedBy” applied will provide info on who created the resource without having to search the Audit logs.",
+ "ImpactStatement": "There is no performance impact when enabling the above described features.",
+ "RemediationProcedure": "**From Console:**\n\n1. Login to OCI Console.\n2. From the navigation menu, select `Governance & Administration`.\n3. Under `Tenancy Management`, select `Tag Namespaces`.\n4. Under `Compartment`, select the root compartment.\n5. If no tag namespace exists, click `Create Tag Namespace`, enter a name and description and click `Create Tag Namespace`.\n6. Click the name of a tag namespace.\n7. Click `Create Tag Key Definition`.\n8. Enter a tag key (e.g. CreatedBy) and description, and click `Create Tag Key Definition`.\n9. From the navigation menu, select `Identity & Security`.\n10. Under `Identity`, select `Compartments`.\n11. Click the name of the root compartment.\n12. Under `Resources`, select `Tag Defaults`.\n13. Click `Create Tag Default`.\n14. Select a tag namespace, tag key, and enter `${iam.principal.name}` as the tag value.\n15. Click `Create`.\n\n**From CLI:**\n\n1. Create a Tag Namespace in the Root Compartment\n```\noci iam tag-namespace create --compartment-id= --name= --description= --query data.{\"\\\"Tag Namespace OCID\\\":id\"} --output table\n```\n2. Note the Tag Namespace OCID and use it when creating the Tag Key Definition\n```\noci iam tag create --tag-namespace-id= --name= --description= --query data.{\"\\\"Tag Key Definition OCID\\\":id\"} --output table\n```\n3. Note the Tag Key Definition OCID and use it when creating the Tag Default in the Root compartment\n```\noci iam tag-default create --compartment-id= --tag-definition-id= --value=\"\\${iam.principal.name}\"\n```",
+ "AuditProcedure": "**From Console:**\n\n1. Login to OCI Console.\n2. From the navigation menu, select `Identity & Security`.\n3. Under `Identity`, select `Compartments`.\n4. Click the name of the root compartment.\n5. Under `Resources`, select `Tag Defaults`.\n6. In the `Tag Defaults` table, verify that there is a Tag with a value of `${iam.principal.name}` and a Tag Key Status of `Active`.\n\nNote: \nThe name of the tag may be different then “CreatedBy” if the Tenancy Administrator has decided to use another tag.\n\n**From CLI:**\n\n1. List the active tag defaults defined at the Root compartment level by using the Tenancy OCID as compartment id.\nNote: The Tenancy OCID can be found in the `~/.oci/config` file used by the OCI Command Line Tool\n```\noci iam tag-default list --compartment-id= --query=\"data [?\\\"lifecycle-state\\\"=='ACTIVE']\".{\"name:\\\"tag-definition-name\\\",\"value:value\"\"} --output table\n```\n2. Verify in the table returned that there is at least one row that contains the value of `${iam.principal.name}`.",
+ "AdditionalInformation": "'- There is no requirement to use the “Oracle-Tags” namespace to implement this control.\n A Tag Namespace Administrator can create any namespace and use it for this control.",
+ "References": ""
+ }
+ ]
+ },
+ {
+ "Id": "4.2",
+ "Description": "Create at least one notification topic and subscription to receive monitoring alerts",
+ "Checks": [
+ "events_notification_topic_and_subscription_exists"
+ ],
+ "Attributes": [
+ {
+ "Section": "4. Logging and Monitoring",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Automated",
+ "Description": "Notifications provide a multi-channel messaging service that allow users and applications to be notified of events of interest occurring within OCI. Messages can be sent via eMail, HTTPs, PagerDuty, Slack or the OCI Function service. Some channels, such as eMail require confirmation of the subscription before it becomes active.",
+ "RationaleStatement": "Creating one or more notification topics allow administrators to be notified of relevant changes made to OCI infrastructure.",
+ "ImpactStatement": "There is no performance impact when enabling the above described features but depending on the amount of notifications sent per month there may be a cost associated.",
+ "RemediationProcedure": "**From Console:**\n1. Go to the Notifications Service page: [https://console.us-ashburn-1.oraclecloud.com/notification/topics](https://console.us-ashburn-1.oraclecloud.com/notification/topics)\n2. Select the `Compartment` that hosts the notifications\n3. Click `Create Topic`\n4. Set the `name` to something relevant\n5. Set the `description` to describe the purpose of the topic\n6. Click `Create`\n7. Click the newly created topic\n8. Click `Create Subscription`\n9. Choose the correct `protocol`\n10. Complete the correct parameter, for instance `email` address\n11. Click `Create`\n\n**From CLI:**\n1. Create a topic in a compartment\n```\noci ons topic create --name --description --compartment-id \n```\n2. Note the `OCID` of the `topic` using the `topic-id` field of the returned JSON and use it to create a new subscription\n```\noci ons subscription create --compartment-id --topic-id --protocol --subscription-endpoint \n```\n3. The returned JSON includes the id of the `subscription`.",
+ "AuditProcedure": "**From Console:**\n\n1. Go to the Notifications Service page: [https://console.us-ashburn-1.oraclecloud.com/notification/topics](https://console.us-ashburn-1.oraclecloud.com/notification/topics)\n2. Select the `Compartment` that hosts the notifications\n3. Find and click the `Topic` relevant to your monitoring alerts.\n4. Ensure a valid active subscription is shown.\n\n**From CLI:** \n1. List the topics in the `Compartment` that hosts the notifications\n```\noci ons topic list --compartment-id --all\n```\n2. Note the `OCID` of the monitoring topic(s) using the `topic-id` field of the returned JSON and use it to list the subscriptions\n```\noci ons subscription list --compartment-id --topic-id --all\n```\n3. Ensure at least one active subscription is returned",
+ "AdditionalInformation": "'- The console URL shown is for the Ashburn region. Your tenancy might have a different home region and thus console URL.\n- The same Notification topic can be reused by many Events. A single topic can have multiple subscriptions allowing the same topic to be published to multiple locations.\n- The generated notification will include an eventID that can be used when querying the Audit Logs in case further investigation is required.",
+ "References": ""
+ }
+ ]
+ },
+ {
+ "Id": "4.3",
+ "Description": "Ensure a notification is configured for Identity Provider changes",
+ "Checks": [
+ "events_rule_identity_provider_changes"
+ ],
+ "Attributes": [
+ {
+ "Section": "4. Logging and Monitoring",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Automated",
+ "Description": "It is recommended to setup an Event Rule and Notification that gets triggered when Identity Providers are created, updated or deleted. Event Rules are compartment scoped and will detect events in child compartments. It is recommended to create the Event rule at the root compartment level.",
+ "RationaleStatement": "OCI Identity Providers allow management of User ID / passwords in external systems and use of those credentials to access OCI resources. Identity Providers allow users to single sign-on to OCI console and have other OCI credentials like API Keys.\nMonitoring and alerting on changes to Identity Providers will help in identifying changes to the security posture.",
+ "ImpactStatement": "There is no performance impact when enabling the above described features but depending on the amount of notifications sent per month there may be a cost associated.",
+ "RemediationProcedure": "**From Console:**\n1. Go to the `Events Service` page: [https://cloud.oracle.com/events/rules](https://cloud.oracle.com/events/rules)\n2. Select the `compartment` that should host the rule\n3. Click `Create Rule`\n4. Provide a `Display Name` and `Description`\n5. Create a Rule Condition by selecting `Identity` in the Service Name Drop-down and selecting `Identity Provider – Create`, `Identity Provider - Delete and Identity Provider – Update`\n6. In the `Actions` section select `Notifications` as Action Type\n7. Select the `Compartment` that hosts the Topic to be used.\n8. Select the `Topic` to be used\n9. Optionally add Tags to the Rule\n10. Click `Create Rule`\n\n**From CLI:**\n1. Find the `topic-id` of the topic the Event Rule should use for sending notifications by using the topic `name` and `Compartment OCID`\n```\noci ons topic list --compartment-id --all --query \"data [?name=='']\".{\"name:name,topic_id:\\\"topic-id\\\"\"} --output table\n```\n2. Create a JSON file to be used when creating the Event Rule. Replace topic id, display name, description and compartment OCID.\n```\n{\n \"actions\":\n {\n \"actions\": [\n {\n \"actionType\": \"ONS\",\n \"isEnabled\": true,\n \"topicId\": \"\"\n }]\n },\n \"condition\":\n\"{\\\"eventType\\\":[\\\"com.oraclecloud.identitycontrolplane.createidentityprovider\\\",\\\" com.oraclecloud.identitycontrolplane.deleteidentityprovider\\\",\\\" com.oraclecloud.identitycontrolplane.updateidentityprovider\\\"],\\\"data\\\":{}}\",\n \"displayName\": \"\",\n \"description\": \"\",\n \"isEnabled\": true,\n \"compartmentId\": \"\"\n}\n```\n3. Create the actual event rule\n```\noci events rule create --from-json file://event_rule.json\n```\n4. Note in the JSON returned that it lists the parameters specified in the JSON file provided and that there is an OCID provided for the Event Rule",
+ "AuditProcedure": "**From Console:**\n1. Go to the Events Service page: \n[https://cloud.oracle.com/events/rules](https://cloud.oracle.com/events/rules)\n2. Select the `Compartment` that hosts the rules\n3. Find and click the `Rule` that handles `Identity Provider` Changes (if any)\n4. Click the `Edit Rule` button and verify that the `RuleConditions` section contains a condition for the Service `Identity` and Event Types: `Identity Provider – Create`, `Identity Provider - Delete` and `Identity Provider – Update`\n5. Verify that in the `Actions` section the Action Type contains: `Notifications` and that a valid `Topic` is referenced.\n\n**From CLI:** \n1. Find the OCID of the specific Event Rule based on Display Name and Compartment OCID\n```\noci events rule list --compartment-id --query \"data [?\\\"display-name\\\"=='']\".{\"id:id\"} --output table\n```\n2. List the details of a specific Event Rule based on the OCID of the rule.\n```\noci events rule get --rule-id \n```\n3. In the JSON output locate the Conditions key value pair and verify that the following Conditions are present:\n```\ncom.oraclecloud.identitycontrolplane.createidentityprovider\ncom.oraclecloud.identitycontrolplane.deleteidentityprovider\ncom.oraclecloud.identitycontrolplane.updateidentityprovider\n```\n4. Verify the value of the `is-enabled` attribute is `true`\n5. In the JSON output verify that `actionType` is `ONS` and locate the `topic-id`\n6. Verify the correct topic is used by checking the topic name\n```\noci ons topic get --topic-id --query data.{\"name:name\"} --output table\n```",
+ "AdditionalInformation": "'- The same Notification topic can be reused by many Event Rules.\n- The generated notification will include an eventID that can be used when querying the Audit Logs in case further investigation is required.",
+ "References": ""
+ }
+ ]
+ },
+ {
+ "Id": "4.4",
+ "Description": "Ensure a notification is configured for IdP group mapping changes",
+ "Checks": [
+ "events_rule_idp_group_mapping_changes"
+ ],
+ "Attributes": [
+ {
+ "Section": "4. Logging and Monitoring",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Automated",
+ "Description": "It is recommended to setup an Event Rule and Notification that gets triggered when Identity Provider Group Mappings are created, updated or deleted. Event Rules are compartment scoped and will detect events in child compartments. It is recommended to create the Event rule at the root compartment level.",
+ "RationaleStatement": "IAM Policies govern access to all resources within an OCI Tenancy. IAM Policies use OCI Groups for assigning the privileges. Identity Provider Groups could be mapped to OCI Groups to assign privileges to federated users in OCI. Monitoring and alerting on changes to Identity Provider Group mappings will help in identifying changes to the security posture.",
+ "ImpactStatement": "There is no performance impact when enabling the above described features but depending on the amount of notifications sent per month there may be a cost associated.",
+ "RemediationProcedure": "**From Console:**\n1. Go to the `Events Service` page: [https://cloud.oracle.com/events/rules](https://cloud.oracle.com/events/rules)\n2. Select the `compartment` that should host the rule\n3. Click `Create Rule`\n4. Provide a `Display Name` and `Description`\n5. Create a Rule Condition by selecting `Identity` in the Service Name Drop-down and selecting `Idp Group Mapping – Create`, `Idp Group Mapping – Delete` and `Idp Group Mapping – Update`\n6. In the `Actions` section select `Notifications` as Action Type\n7. Select the `Compartment` that hosts the Topic to be used.\n8. Select the `Topic` to be used\n9. Optionally add Tags to the Rule\n10. Click `Create Rule`\n\n**From CLI:**\n1. Find the `topic-id` of the topic the Event Rule should use for sending notifications by using the topic `name` and `Compartment OCID`\n```\noci ons topic list --compartment-id --all --query \"data [?name=='']\".{\"name:name,topic_id:\\\"topic-id\\\"\"} --output table\n```\n2. Create a JSON file to be used when creating the Event Rule. Replace topic id, display name, description and compartment OCID.\n```\n{\n \"actions\":\n {\n \"actions\": [\n {\n \"actionType\": \"ONS\",\n \"isEnabled\": true,\n \"topicId\": \"\"\n }]\n },\n \"condition\":\n\"{\\\"eventType\\\":[\\\"com.oraclecloud.identitycontrolplane.createidpgroupmapping\\\",\\\"com.oraclecloud.identitycontrolplane.deleteidpgroupmapping\\\",\\\"com.oraclecloud.identitycontrolplane.updateidpgroupmapping\\\"],\\\"data\\\":{}}\",\n \"displayName\": \"\",\n \"description\": \"\",\n \"isEnabled\": true,\n \"compartmentId\": \"\"\n}\n\n```\n3. Create the actual event rule\n```\noci events rule create --from-json file://event_rule.json\n```\n4. Note in the JSON returned that it lists the parameters specified in the JSON file provided and that there is an OCID provided for the Event Rule",
+ "AuditProcedure": "**From Console:**\n1. Go to the Events Service page: \n[https://cloud.oracle.com/events/rules](https://cloud.oracle.com/events/rules)\n2. Select the `Compartment` that hosts the rules\n3. Find and click the `Rule` that handles `Idp Group Mapping` Changes (if any)\n4. Click the `Edit Rule` button and verify that the `RuleConditions` section contains a condition for the Service `Identity` and Event Types: `Idp Group Mapping – Create`, `Idp Group Mapping – Delete` and `Idp Group Mapping – Update`\n5. Verify that in the `Actions` section the Action Type contains: `Notifications` and that a valid `Topic` is referenced.\n\n**From CLI:** \n1. Find the OCID of the specific Event Rule based on Display Name and Compartment OCID\n```\noci events rule list --compartment-id --query \"data [?\\\"display-name\\\"=='']\".{\"id:id\"} --output table\n```\n2. List the details of a specific Event Rule based on the OCID of the rule.\n```\noci events rule get --rule-id \n```\n3. In the JSON output locate the Conditions key value pair and verify that the following Conditions are present:\n```\ncom.oraclecloud.identitycontrolplane.createidpgroupmapping\ncom.oraclecloud.identitycontrolplane.deleteidpgroupmapping\ncom.oraclecloud.identitycontrolplane.updateidpgroupmapping\n```\n4. Verify the value of the `is-enabled` attribute is `true`\n5. In the JSON output verify that `actionType` is `ONS` and locate the `topic-id`\n6. Verify the correct topic is used by checking the topic name\n```\noci ons topic get --topic-id --query data.{\"name:name\"} --output table\n```",
+ "AdditionalInformation": "'- The same Notification topic can be reused by many Event Rules.\n- The generated notification will include an eventID that can be used when querying the Audit Logs in case further investigation is required.",
+ "References": ""
+ }
+ ]
+ },
+ {
+ "Id": "4.5",
+ "Description": "Ensure a notification is configured for IAM group changes",
+ "Checks": [
+ "events_rule_iam_group_changes"
+ ],
+ "Attributes": [
+ {
+ "Section": "4. Logging and Monitoring",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Automated",
+ "Description": "It is recommended to setup an Event Rule and Notification that gets triggered when IAM Groups are created, updated or deleted. Event Rules are compartment scoped and will detect events in child compartments, it is recommended to create the Event rule at the root compartment level.",
+ "RationaleStatement": "IAM Groups control access to all resources within an OCI Tenancy. \nMonitoring and alerting on changes to IAM Groups will help in identifying changes to satisfy least privilege principle.",
+ "ImpactStatement": "There is no performance impact when enabling the above described features but depending on the amount of notifications sent per month there may be a cost associated.",
+ "RemediationProcedure": "**From Console:**\n1. Go to the `Events Service` page: [https://cloud.oracle.com/events/rules](https://cloud.oracle.com/events/rules)\n2. Select the `compartment` that should host the rule\n3. Click `Create Rule`\n4. Provide a `Display Name` and `Description`\n5. Create a Rule Condition by selecting `Identity` in the Service Name Drop-down and selecting `Group – Create`, `Group – Delete` and `Group – Update`\n6. In the `Actions` section select `Notifications` as Action Type\n7. Select the `Compartment` that hosts the Topic to be used.\n8. Select the `Topic` to be used\n9. Optionally add Tags to the Rule\n10. Click `Create Rule`\n\n**From CLI:**\n1. Find the `topic-id` of the topic the Event Rule should use for sending Notifications by using the topic `name` and `Compartment OCID`\n```\noci ons topic list --compartment-id --all --query \"data [?name=='']\".{\"name:name,topic_id:\\\"topic-id\\\"\"} --output table\n```\n2. Create a JSON file to be used when creating the Event Rule. Replace topic id, display name, description and compartment OCID.\n```\n{\n \"actions\":\n {\n \"actions\": [\n {\n \"actionType\": \"ONS\",\n \"isEnabled\": true,\n \"topicId\": \"\"\n }]\n },\n \"condition\": \"{\\\"eventType\\\":[\\\"com.oraclecloud.identitycontrolplane.creategroup\\\",\\\"com.oraclecloud.identitycontrolplane.deletegroup\\\",\\\"com.oraclecloud.identitycontrolplane.updategroup\\\"],\\\"data\\\":{}}\",\n \"displayName\": \"\",\n \"description\": \"\",\n \"isEnabled\": true,\n \"compartmentId\": \"\"\n}\n```\n3. Create the actual event rule\n```\noci events rule create --from-json file://event_rule.json\n```\n4. Note in the JSON returned that it lists the parameters specified in the JSON file provided and that there is an OCID provided for the Event Rule",
+ "AuditProcedure": "**From Console:**\n1. Go to the `Events Service` page: \n[https://cloud.oracle.com/events/rules](https://cloud.oracle.com/events/rules)\n2. Select the `Compartment` that hosts the rules\n3. Find and click the `Rule` that handles IAM `Group` Changes\n4. Click the `Edit Rule` button and verify that the `Rule Conditions` section contains a condition for the Service `Identity` and Event Types: `Group – Create`, `Group – Delete` and `Group – Update`\n5. Verify that in the `Actions` section the Action Type contains: `Notifications` and that a valid `Topic` is referenced.\n\n**From CLI:**\n1. Find the OCID of the specific Event Rule based on `Display Name` and `Compartment OCID`\n```\noci events rule list --compartment-id --query \"data [?\\\"display-name\\\"=='']\".{\"id:id\"} --output table\n```\n2. List the details of a specific Event Rule based on the OCID of the rule.\n```\noci events rule get --rule-id \n```\n3. In the JSON output locate the Conditions key value pair and verify that the following Conditions are present:\n```\ncom.oraclecloud.identitycontrolplane.creategroup\ncom.oraclecloud.identitycontrolplane.deletegroup\ncom.oraclecloud.identitycontrolplane.updategroup\n```\n4. Verify the value of the `is-enabled` attribute is `true`\n5. In the JSON output verify that `actionType` is ONS and locate the `topic-id`\n6. Verify the correct topic is used by checking the topic name\n```\noci ons topic get --topic-id --query data.{\"name:name\"} --output table\n```",
+ "AdditionalInformation": "'- The same Notification topic can be reused by many Event Rules.\n- The generated notification will include an eventID that can be used when querying the Audit Logs in case further investigation is required.",
+ "References": ""
+ }
+ ]
+ },
+ {
+ "Id": "4.6",
+ "Description": "Ensure a notification is configured for IAM policy changes",
+ "Checks": [
+ "events_rule_iam_policy_changes"
+ ],
+ "Attributes": [
+ {
+ "Section": "4. Logging and Monitoring",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Automated",
+ "Description": "It is recommended to setup an Event Rule and Notification that gets triggered when IAM Policies are created, updated or deleted. Event Rules are compartment scoped and will detect events in child compartments, it is recommended to create the Event rule at the root compartment level.",
+ "RationaleStatement": "IAM Policies govern access to all resources within an OCI Tenancy. \nMonitoring and alerting on changes to IAM policies will help in identifying changes to the security posture.",
+ "ImpactStatement": "There is no performance impact when enabling the above described features but depending on the amount of notifications sent per month there may be a cost associated.",
+ "RemediationProcedure": "**From Console:**\n1. Go to the `Events Service` page: [https://cloud.oracle.com/events/rules](https://cloud.oracle.com/events/rules)\n2. Select the `compartment` that should host the rule\n3. Click `Create Rule`\n4. Provide a `Display Name` and `Description`\n5. Create a Rule Condition by selecting `Identity` in the Service Name Drop-down and selecting `Policy – Change Compartment`, `Policy – Create`, `Policy - Delete` and `Policy – Update`\n6. In the `Actions` section select `Notifications` as Action Type\n7. Select the `Compartment` that hosts the Topic to be used.\n8. Select the `Topic` to be used\n9. Optionally add Tags to the Rule\n10. Click `Create Rule`\n\n**From CLI:**\n1. Find the `topic-id` of the topic the Event Rule should use for sending Notifications by using the topic `name` and `Compartment OCID`\n```\noci ons topic list --compartment-id --all --query \"data [?name=='']\".{\"name:name,topic_id:\\\"topic-id\\\"\"} --output table\n```\n2. Create a JSON file to be used when creating the Event Rule. Replace topic id, display name, description and compartment OCID.\n```\n{\n \"actions\":\n {\n \"actions\": [\n {\n \"actionType\": \"ONS\",\n \"isEnabled\": true,\n \"topicId\": \"\"\n }]\n },\n \"condition\":\n\"{\\\"eventType\\\":[\\\"com.oraclecloud.identitycontrolplane.createpolicy\\\",\\\"com.oraclecloud.identitycontrolplane.deletepolicy\\\",\\\"com.oraclecloud.identitycontrolplane.updatepolicy\\\"],\\\"data\\\":{}}\",\n \"displayName\": \"\",\n \"description\": \"\",\n \"isEnabled\": true,\n \"compartmentId\": \"\"\n}\n```\n3. Create the actual event rule\n```\noci events rule create --from-json file://event_rule.json\n```\n4. Note in the JSON returned that it lists the parameters specified in the JSON file provided and that there is an OCID provided for the Event Rule",
+ "AuditProcedure": "**From Console:**\n1. Go to the Events Service page: \n[https://cloud.oracle.com/events/rules](https://cloud.oracle.com/events/rules)\n2. Select the `Compartment` that hosts the rules\n3. Find and click the `Rule` that handles `IAM Policy` Changes (if any)\n4. Click the `Edit Rule` button and verify that the `RuleConditions` section contains a condition for the Service `Identity` and Event Types: `Policy – Create`, ` Policy - Delete` and `Policy – Update`\n5. Verify that in the `Actions` section the Action Type contains: `Notifications` and that a valid `Topic` is referenced.\n\n**From CLI:** \n1. Find the OCID of the specific Event Rule based on Display Name and Compartment OCID\n```\noci events rule list --compartment-id --query \"data [?\\\"display-name\\\"=='']\".{\"id:id\"} --output table\n```\n2. List the details of a specific Event Rule based on the OCID of the rule.\n```\noci events rule get --rule-id \n```\n3. In the JSON output locate the Conditions key value pair and verify that the following Conditions are present:\n```\ncom.oraclecloud.identitycontrolplane.createpolicy\ncom.oraclecloud.identitycontrolplane.deletepolicy\ncom.oraclecloud.identitycontrolplane.updatepolicy\n```\n4. Verify the value of the `is-enabled` attribute is `true`\n5. In the JSON output verify that `actionType` is `ONS` and locate the `topic-id`\n6. Verify the correct topic is used by checking the topic name\n```\noci ons topic get --topic-id --query data.{\"name:name\"} --output table\n```",
+ "AdditionalInformation": "'- The same Notification topic can be reused by many Event Rules.\n- The generated notification will include an eventID that can be used when querying the Audit Logs in case further investigation is required.",
+ "References": ""
+ }
+ ]
+ },
+ {
+ "Id": "4.7",
+ "Description": "Ensure a notification is configured for user changes",
+ "Checks": [
+ "events_rule_user_changes"
+ ],
+ "Attributes": [
+ {
+ "Section": "4. Logging and Monitoring",
+ "Profile": "Level 1",
+ "AssessmentStatus": "Automated",
+ "Description": "It is recommended to setup an Event Rule and Notification that gets triggered when IAM Users are created, updated, deleted, capabilities updated, or state updated. Event Rules are compartment scoped and will detect events in child compartments, it is recommended to create the Event rule at the root compartment level.",
+ "RationaleStatement": "Users use or manage Oracle Cloud Infrastructure resources. \nMonitoring and alerting on changes to Users will help in identifying changes to the security posture.",
+ "ImpactStatement": "There is no performance impact when enabling the above described features but depending on the amount of notifications sent per month there may be a cost associated.",
+ "RemediationProcedure": "**From Console:**\n1. Using the search box to navigate to `events`\n2. Navigate to the `rules` page\n3. Select the `compartment` that should host the rule\n4. Click `Create Rule`\n5. Provide a `Display Name` and `Description`\n6. Create a Rule Condition by selecting `Identity` in the Service Name Drop-down and selecting:\n`User – Create`, \n`User – Delete`, \n`User – Update`, \n`User Capabilities – Update`,\n`User State – Update` \n7. In the `Actions` section select `Notifications` as Action Type\n8. Select the `Compartment` that hosts the Topic to be used.\n9. Select the `Topic` to be used\n10. Optionally add Tags to the Rule\n11. Click `Create Rule`\n\n**From CLI:**\n1. Find the `topic-id` of the topic the Event Rule should use for sending Notifications by using the topic `name` and `Compartment OCID`\n```\noci ons topic list --compartment-id --all --query \"data [?name=='']\".{\"name:name,topic_id:\\\"topic-id\\\"\"} --output table\n```\n2. Create a JSON file to be used when creating the Event Rule. Replace topic id, display name, description and compartment OCID.\n```\n{\n \"actions\":\n {\n \"actions\": [\n {\n \"actionType\": \"ONS\",\n \"isEnabled\": true,\n \"topicId\": \"\"\n }]\n },\n \"condition\": \"{\\\"eventType\\\":[\\\"com.oraclecloud.identitycontrolplane.createuser\\\",\\\"com.oraclecloud.identitycontrolplane.deleteuser\\\",\\\"com.oraclecloud.identitycontrolplane.updateuser\\\",\\\"com.oraclecloud.identitycontrolplane.updateusercapabilities\\\",\\\"com.oraclecloud.identitycontrolplane.updateuserstate\\\"],\\\"data\\\":{}}\",\n \"displayName\": \"\",\n \"description\": \"\",\n \"isEnabled\": true,\n \"compartmentId\": \"\"\n}\n```\n3. Create the actual event rule\n```\noci events rule create --from-json file://event_rule.json\n```\n4. Note in the JSON returned that it lists the parameters specified in the JSON file provided and that there is an OCID provided for the Event Rule",
+ "AuditProcedure": "**From Console:**\n1. Using the search box to navigate to `events`\n2. Navigate to the `rules` page\n3. Select the `Compartment` that hosts the rules\n4. Find and click the `Rule` that handles `IAM User` Changes\n5. Click the `Edit Rule` button and verify that the `Rule Conditions` section contains a condition for the Service `Identity` and Event Types: \n`User – Create`, \n`User – Delete`, \n`User – Update`, \n`User Capabilities – Update`,\n`User State – Update` \n6. Verify that in the `Actions` section the Action Type contains: `Notifications` and that a valid `Topic` is referenced.\n\n**From CLI:**\n1. Find the OCID of the specific Event Rule based on `Display Name` and `Compartment OCID`\n```\noci events rule list --compartment-id